1212# file gpu_param_header_generator.cmake
1313# author Gabriele Cimador
1414
15- function (generate_macros json_content output types arch_list arch_list_output)
16- foreach (arch IN LISTS arch_list)
15+ function (generate_gpu_param_header GPU_ARCH OUT_HEADER OUT_HEADER_DEVICE)
16+ if (GPU_ARCH STREQUAL "AUTO" )
17+ detect_gpu_arch("ALL" )
18+ else ()
19+ set (TARGET_ARCH ${GPU_ARCH} )
20+ endif ()
21+ file (READ "${GPU_PARAM_JSON} " JSON_CONTENT)
22+ string (REPLACE "," ";" ARCH_LIST "${TARGET_ARCH} " )
23+
24+ # Types
25+ set (TYPES CORE LB PAR)
26+ set (ARCH_LIST_EXT "${ARCH_LIST} ;default;default_cpu" )
27+ list (FIND ARCH_LIST "ALL" do_all_architectures)
28+ # Per architecture definitions
29+ foreach (arch IN LISTS ARCH_LIST_EXT)
1730 set (OUTPUT_TMP_${arch} "" )
1831 endforeach ()
19- set (arch_list_output_tmp )
20- list ( FIND arch_list "ALL" do_all_architectures)
21- foreach (TYPE IN LISTS types )
22- string (JSON n_params LENGTH "${json_content } " "${TYPE} " )
32+ set (JSON_ARCHITECTURES )
33+
34+ foreach (TYPE IN LISTS TYPES )
35+ string (JSON n_params LENGTH "${JSON_CONTENT } " "${TYPE} " )
2336 math (EXPR last "${n_params} - 1" )
2437 foreach (i RANGE 0 ${last} )
25- string (JSON param_name MEMBER "${json_content } " "${TYPE} " "${i} " )
38+ string (JSON param_name MEMBER "${JSON_CONTENT } " "${TYPE} " "${i} " )
2639 string (JSON n_archs LENGTH "${JSON_CONTENT} " "${TYPE} " "${param_name} " )
2740 math (EXPR last_arch "${n_archs} - 1" )
2841 foreach (iArch RANGE 0 ${last_arch} )
@@ -31,12 +44,12 @@ function(generate_macros json_content output types arch_list arch_list_output)
3144 message (FATAL_ERROR "Bogus entry ${param_name} for ${arch} " )
3245 endif ()
3346 if (do_all_architectures GREATER -1)
34- if (arch_list_output AND NOT arch MATCHES ^default)
35- list (APPEND arch_list_output_tmp "${arch} " )
47+ if (NOT arch MATCHES ^default)
48+ list (APPEND JSON_ARCHITECTURES "${arch} " )
3649 endif ()
3750 set (list_idx 0)
3851 else ()
39- list (FIND arch_list "${arch} " list_idx)
52+ list (FIND ARCH_LIST_EXT "${arch} " list_idx)
4053 endif ()
4154 if (list_idx GREATER -1)
4255 string (JSON param_values GET "${JSON_CONTENT} " "${TYPE} " "${param_name} " "${arch} " )
@@ -62,60 +75,47 @@ function(generate_macros json_content output types arch_list arch_list_output)
6275 endforeach ()
6376 endforeach ()
6477 endforeach ()
65- foreach (arch IN LISTS arch_list)
66- set (${output} _${arch} "${OUTPUT_TMP_${arch} }" PARENT_SCOPE)
67- endforeach ()
68- if (arch_list_output)
69- list (REMOVE_DUPLICATES arch_list_output_tmp)
70- list (SORT arch_list_output_tmp)
71- set (${arch_list_output} "${arch_list_output_tmp} " PARENT_SCOPE)
72- endif ()
73- endfunction ()
7478
75- function (generate_gpu_param_header GPU_ARCH OUT_HEADER)
76- set (TARGET_ARCH "UNKNOWN" )
77- if (GPU_ARCH STREQUAL "AUTO" )
78- detect_gpu_arch("ALL" )
79- else ()
80- set (TARGET_ARCH ${GPU_ARCH} )
79+ list (REMOVE_DUPLICATES JSON_ARCHITECTURES)
80+ list (SORT JSON_ARCHITECTURES)
81+ if (ARGC GREATER 3)
82+ set (${ARGV3} "${JSON_ARCHITECTURES} " PARENT_SCOPE)
8183 endif ()
82- file (READ "${GPU_PARAM_JSON} " JSON_CONTENT)
84+ if (do_all_architectures GREATER -1)
85+ set (ARCH_LIST ${JSON_ARCHITECTURES} )
86+ endif ()
87+
88+ get_filename_component (DEVICE_HEADER_FILE "${OUT_HEADER_DEVICE} " NAME )
89+
8390 set (TMP_HEADER "#ifndef GPUDEFPARAMETERSDEFAULTS_H\n #define GPUDEFPARAMETERSDEFAULTS_H\n\n " )
91+ set (TMP_HEADER_DEVICE "#ifndef GPUDEFPARAMETERSDEFAULTSDEVICE_H\n #define GPUDEFPARAMETERSDEFAULTSDEVICE_H\n\n " )
8492 string (APPEND TMP_HEADER "// This file is auto-generated from gpu_params.json. Do not edit directly.\n " )
85- string (REPLACE "," ";" ARCH_LIST " ${TARGET_ARCH} " )
86- string (APPEND TMP_HEADER "// Architectures: ${TARGET_ARCH} \n\n " )
93+ string (APPEND TMP_HEADER_DEVICE "// This file is auto-generated from gpu_params.json. Do not edit directly. \n " )
94+ string (APPEND TMP_HEADER_DEVICE "// Architectures: ${TARGET_ARCH} \n\n " )
8795 string (APPEND TMP_HEADER "#if defined(GPUCA_GPUCODE) && !defined(GPUCA_GPUCODE_GENRTC) && !defined(GPUCA_GPUCODE_NO_LAUNCH_BOUNDS) // Avoid including for RTC generation besides normal include protection.\n\n " )
96+ string (APPEND TMP_HEADER "#include \" ${DEVICE_HEADER_FILE} \"\n " )
8897
89- # Types
90- set (TYPES CORE LB PAR)
91- # Per architecture definitions
92- generate_macros("${JSON_CONTENT} " TMP_OUTPUT "${TYPES} " "${ARCH_LIST} ;default;default_cpu" "JSON_ARCHITECTURES" )
93- list (FIND ARCH_LIST "ALL" do_all_architectures)
94- if (ARGC GREATER 2)
95- set (${ARGV2} "${JSON_ARCHITECTURES} " PARENT_SCOPE)
96- endif ()
97- if (do_all_architectures GREATER -1)
98- set (ARCH_LIST ${JSON_ARCHITECTURES} )
99- endif ()
100- string (APPEND TMP_HEADER "#if 0\n " )
98+ string (APPEND TMP_HEADER_DEVICE "#if 0\n " )
10199 foreach (ARCH IN LISTS ARCH_LIST)
102- string (APPEND TMP_HEADER "\n #elif defined(GPUCA_GPUTYPE_${ARCH} )\n " )
103- string (APPEND TMP_HEADER ${TMP_OUTPUT_ ${ARCH} })
100+ string (APPEND TMP_HEADER_DEVICE "\n #elif defined(GPUCA_GPUTYPE_${ARCH} )\n " )
101+ string (APPEND TMP_HEADER_DEVICE ${OUTPUT_TMP_ ${ARCH} })
104102 endforeach ()
105- string (APPEND TMP_HEADER "#else\n #error GPU TYPE NOT SET\n #endif\n " )
103+ string (APPEND TMP_HEADER_DEVICE "#else\n #error GPU TYPE NOT SET\n #endif\n " )
106104
107105 # Default parameters
108106 string (APPEND TMP_HEADER "\n // Default parameters if not defined for the target architecture\n\n " )
109- string (APPEND TMP_HEADER ${TMP_OUTPUT_default } )
107+ string (APPEND TMP_HEADER ${OUTPUT_TMP_default } )
110108 string (APPEND TMP_HEADER "#endif // defined(GPUCA_GPUCODE) && !defined(GPUCA_GPUCODE_GENRTC) && !defined(GPUCA_GPUCODE_NO_LAUNCH_BOUNDS)\n\n " )
111109
112110 # CPU fallback
113111 string (APPEND TMP_HEADER "#ifndef GPUCA_GPUCODE_GENRTC // Defaults for non-LB parameters also for CPU fallback\n\n " )
114- string (APPEND TMP_HEADER ${TMP_OUTPUT_default_cpu } )
112+ string (APPEND TMP_HEADER ${OUTPUT_TMP_default_cpu } )
115113 string (APPEND TMP_HEADER "\n #endif // GPUCA_GPUCODE_GENRTC\n " )
116114
117115 string (APPEND TMP_HEADER "\n #endif // GPUDEFPARAMETERSDEFAULTS_H\n " )
116+ string (APPEND TMP_HEADER_DEVICE "\n #endif // GPUDEFPARAMETERSDEFAULTSDEVICE_H\n " )
118117 file (GENERATE OUTPUT "${OUT_HEADER} " CONTENT "${TMP_HEADER} " )
119- message (STATUS "Generated ${OUT_HEADER} " )
120- add_custom_target (GPU_PARAM_HEADER_${GPU_ARCH} _ALL ALL DEPENDS ${OUT_HEADER} ${CMAKE_CURRENT_SOURCE_DIR} /cmake/gpu_param_header_generator.cmake ${GPU_PARAM_JSON} )
118+ file (GENERATE OUTPUT "${OUT_HEADER_DEVICE} " CONTENT "${TMP_HEADER_DEVICE} " )
119+ message (STATUS "Generated ${OUT_HEADER} and ${OUT_HEADER_DEVICE} " )
120+ add_custom_target (GPU_PARAM_HEADER_TARGET ALL DEPENDS ${OUT_HEADER} ${OUT_HEADER_DEVICE} ${GPU_PARAM_JSON} )
121121endfunction ()
0 commit comments