Browse Source

Outsource definitions to a standalone file

which prevents macro redefinitions within a single cl file.
Tomas Farago 8 years ago
parent
commit
ede00a539a

+ 3 - 1
src/kernels/CMakeLists.txt

@@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 2.6)
 
 # make burst backprojection kernels
 set(COMMON_TEMPLATE templates/common.in)
+set(DEFINITIONS templates/definitions.in)
 set(Z_TEMPLATE templates/z_template.in)
 set(LAMINO_TEMPLATE templates/lamino_template.in)
 set(CENTER_TEMPLATE templates/center_template.in)
@@ -14,13 +15,14 @@ add_custom_command(
     OUTPUT ${Z_KERNEL} ${CENTER_KERNEL} ${LAMINO_KERNEL}
     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${GENERATOR} ${GENERATOR}
     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${COMMON_TEMPLATE} ${COMMON_TEMPLATE}
+    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${DEFINITIONS} ${DEFINITIONS}
     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${Z_TEMPLATE} ${Z_TEMPLATE}
     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${CENTER_TEMPLATE} ${CENTER_TEMPLATE}
     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${LAMINO_TEMPLATE} ${LAMINO_TEMPLATE}
     COMMAND python ${GENERATOR} ${Z_TEMPLATE} 1 2 4 8 16 > ${Z_KERNEL}
     COMMAND python ${GENERATOR} ${CENTER_TEMPLATE} 1 2 4 8 16 > ${CENTER_KERNEL}
     COMMAND python ${GENERATOR} ${LAMINO_TEMPLATE} 1 2 4 8 16 > ${LAMINO_KERNEL}
-    DEPENDS ${GENERATOR} ${COMMON_TEMPLATE} ${Z_TEMPLATE} ${CENTER_TEMPLATE} ${LAMINO_TEMPLATE}
+    DEPENDS ${GENERATOR} ${COMMON_TEMPLATE} ${DEFINITIONS} ${Z_TEMPLATE} ${CENTER_TEMPLATE} ${LAMINO_TEMPLATE}
     COMMENT "Generating burst backprojection kernels")
 
 add_custom_target(burst ALL

+ 0 - 7
src/kernels/templates/common.in

@@ -1,10 +1,3 @@
-#define rotate()    pixel.x -= x_center.x; \
-                    pixel.y -= y_center; \
-                    pixel.x = pixel.x * cos_roll + pixel.y * sin_roll; \
-                    pixel.y = -pixel.x * sin_roll + pixel.y * cos_roll; \
-                    pixel.x += x_center.x; \
-                    pixel.y += y_center;
-
 kernel void backproject_burst_{0} (
 {1}
                                     global float *volume,

+ 6 - 0
src/kernels/templates/definitions.in

@@ -0,0 +1,6 @@
+#define rotate()    pixel.x -= x_center.x; \
+                    pixel.y -= y_center; \
+                    pixel.x = pixel.x * cos_roll + pixel.y * sin_roll; \
+                    pixel.y = -pixel.x * sin_roll + pixel.y * cos_roll; \
+                    pixel.x += x_center.x; \
+                    pixel.y += y_center;

+ 3 - 1
src/kernels/tools/make_burst_kernels.py

@@ -46,9 +46,11 @@ def main():
     allowed_bursts = [2 ** i for i in range(5)]
     in_tmpl = "read_only image2d_t projection_{},"
     common_filename = os.path.join(os.path.dirname(args.filename), 'common.in')
+    defs_filename = os.path.join(os.path.dirname(args.filename), 'definitions.in')
+    defs = open(defs_filename, 'r').read()
     kernel_outer = open(common_filename, 'r').read()
     comp_tmpl, kernel_inner = open(args.filename, 'r').read().split('\n%nl\n')
-    kernels = ''
+    kernels = defs + '\n'
     for burst in args.burst:
         if burst not in allowed_bursts:
             raise ValueError('Burst mode `{}` must be one of `{}`'.format(burst, allowed_bursts))