Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 16 additions & 18 deletions GPU/GPUTracking/Base/cuda/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -84,23 +84,29 @@ add_custom_target(${MODULE}_CUDA_SRC_CHK ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}

add_custom_command(
OUTPUT ${GPU_RTC_BIN}.command
COMMAND echo -n "${CMAKE_CUDA_COMPILER} ${GPU_RTC_FLAGS_SEPARATED} ${GPU_RTC_DEFINES} -fatbin" > ${GPU_RTC_BIN}.command
COMMAND_EXPAND_LISTS
VERBATIM
COMMAND echo -n "${CMAKE_CUDA_COMPILER} -forward-unknown-to-host-compiler ${GPU_RTC_DEFINES} ${GPU_RTC_FLAGS_SEPARATED} -x cu -fatbin" > ${GPU_RTC_BIN}.command
COMMAND_EXPAND_LISTS VERBATIM
COMMENT "Preparing CUDA RTC command file ${GPU_RTC_BIN}.command"
)
create_binary_resource(${GPU_RTC_BIN}.command ${GPU_RTC_BIN}.command.o)

add_custom_command(
OUTPUT ${GPU_RTC_BIN}.command.arch
COMMAND echo -n "${GPU_RTC_FLAGS_ARCH}" > ${GPU_RTC_BIN}.command.arch
COMMAND_EXPAND_LISTS
VERBATIM
COMMENT "Preparing CUDA RTC ARCH file ${GPU_RTC_BIN}.command.arch"
COMMAND_EXPAND_LISTS VERBATIM
COMMENT "Preparing CUDA RTC ARCH command file ${GPU_RTC_BIN}.command.arch"
)
create_binary_resource(${GPU_RTC_BIN}.command.arch ${GPU_RTC_BIN}.command.arch.o)

set(SRCS ${SRCS} ${GPU_RTC_BIN}.src.o ${GPU_RTC_BIN}.command.o ${GPU_RTC_BIN}.command.arch.o)
add_custom_command(
OUTPUT ${GPU_RTC_BIN}.command.no_fast_math
COMMAND echo -n "${GPUCA_CUDA_NO_FAST_MATH_FLAGS}" > ${GPU_RTC_BIN}.command.no_fast_math
COMMAND_EXPAND_LISTS VERBATIM
COMMENT "Preparing CUDA RTC NO_FAST_MATH command file ${GPU_RTC_BIN}.command.arch"
)
create_binary_resource(${GPU_RTC_BIN}.command.no_fast_math ${GPU_RTC_BIN}.command.no_fast_math.o)

set(SRCS ${SRCS} ${GPU_RTC_BIN}.src.o ${GPU_RTC_BIN}.command.o ${GPU_RTC_BIN}.command.arch.o ${GPU_RTC_BIN}.command.no_fast_math.o)
# -------------------------------- End RTC -------------------------------------------------------

if(ALIGPU_BUILD_TYPE STREQUAL "O2")
Expand All @@ -116,20 +122,21 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2")
${CMAKE_CURRENT_SOURCE_DIR}
TARGETVARNAME targetName)

target_compile_definitions(${targetName} PUBLIC $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)

install(FILES ${HDRS} DESTINATION include/GPU)
endif()

if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
set(targetName "${MODULE}")
set(TMP_BASELIB GPUTracking)
add_library(${MODULE} SHARED ${SRCS})
add_library(O2::${MODULE} ALIAS ${MODULE})
target_link_libraries(${MODULE} PUBLIC ${TMP_BASELIB})
install(TARGETS GPUTrackingCUDA)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
endif()

target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)

# Setting target architecture and adding GPU libraries
target_link_libraries(${targetName} PRIVATE cuda cudart nvrtc)
set_target_cuda_arch(${targetName})
Expand Down Expand Up @@ -164,15 +171,6 @@ elseif(GPUCA_CUDA_COMPILE_MODE STREQUAL "perkernel")
target_sources(${targetName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o)
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingCUDAKernelModules.o PROPERTIES EXTERNAL_OBJECT true GENERATED true)

# Disable all non-deterministic floating point to make TPC track model encoding / decoding precise
set_source_files_properties(${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCCompressionKernels_step0attached.cu
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCCompressionKernels_step1unattached.cu
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCDecompressionKernels_step0attached.cu
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCDecompressionKernels_step1unattached.cu
TARGET_DIRECTORY ${targetName}
PROPERTIES
COMPILE_FLAGS "${GPUCA_CUDA_NO_FAST_MATH_FLAGS}"
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
elseif(GPUCA_CUDA_COMPILE_MODE STREQUAL "rdc")
message(FATAL_ERROR "CUDA RDC compilation of GPUReconstruction ios not yet working!")
target_compile_definitions(${targetName} PRIVATE GPUCA_KERNEL_COMPILE_MODE=2)
Expand Down
3 changes: 3 additions & 0 deletions GPU/GPUTracking/Base/cuda/GPUReconstructionCUDAGenRTC.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ using namespace o2::gpu;
QGET_LD_BINARY_SYMBOLS(GPUReconstructionCUDArtc_src);
QGET_LD_BINARY_SYMBOLS(GPUReconstructionCUDArtc_command);
QGET_LD_BINARY_SYMBOLS(GPUReconstructionCUDArtc_command_arch);
QGET_LD_BINARY_SYMBOLS(GPUReconstructionCUDArtc_command_no_fast_math);

int32_t GPUReconstructionCUDA::genRTC(std::string& filename, uint32_t& nCompile)
{
std::string rtcparam = std::string("#define GPUCA_RTC_CODE\n") +
std::string(mProcessingSettings.rtc.optSpecialCode ? "#define GPUCA_RTC_SPECIAL_CODE(...) __VA_ARGS__\n" : "#define GPUCA_RTC_SPECIAL_CODE(...)\n") +
std::string(mProcessingSettings.rtc.deterministic ? "#define GPUCA_DETERMINISTIC_CODE(det, indet) det\n" : "#define GPUCA_DETERMINISTIC_CODE(det, indet) indet\n") +
GPUParamRTC::generateRTCCode(param(), mProcessingSettings.rtc.optConstexpr);
if (filename == "") {
filename = "/tmp/o2cagpu_rtc_";
Expand All @@ -52,6 +54,7 @@ int32_t GPUReconstructionCUDA::genRTC(std::string& filename, uint32_t& nCompile)
std::string baseCommand = (mProcessingSettings.RTCprependCommand != "" ? (mProcessingSettings.RTCprependCommand + " ") : "");
baseCommand += (getenv("O2_GPU_RTC_OVERRIDE_CMD") ? std::string(getenv("O2_GPU_RTC_OVERRIDE_CMD")) : std::string(_binary_GPUReconstructionCUDArtc_command_start, _binary_GPUReconstructionCUDArtc_command_len));
baseCommand += std::string(" ") + (mProcessingSettings.RTCoverrideArchitecture != "" ? mProcessingSettings.RTCoverrideArchitecture : std::string(_binary_GPUReconstructionCUDArtc_command_arch_start, _binary_GPUReconstructionCUDArtc_command_arch_len));
baseCommand += mProcessingSettings.rtc.deterministic ? (std::string(" ") + std::string(_binary_GPUReconstructionCUDArtc_command_no_fast_math_start, _binary_GPUReconstructionCUDArtc_command_no_fast_math_len)) : std::string("");

char shasource[21], shaparam[21], shacmd[21], shakernels[21];
if (mProcessingSettings.rtc.cacheOutput) {
Expand Down
2 changes: 2 additions & 0 deletions GPU/GPUTracking/Base/cuda/GPUReconstructionCUDArtc.cu
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#define GPUCA_GPUCODE_GENRTC
#define GPUCA_GPUCODE_COMPILEKERNELS
#define GPUCA_RTC_SPECIAL_CODE(...) GPUCA_RTC_SPECIAL_CODE(__VA_ARGS__)
#define GPUCA_DETERMINISTIC_CODE(...) GPUCA_DETERMINISTIC_CODE(__VA_ARGS__)
// GPUReconstructionCUDAIncludesHost.h auto-prependended without preprocessor running
#include "GPUReconstructionCUDADef.h"
#include "GPUReconstructionIncludesDeviceAll.h"

Expand Down
34 changes: 16 additions & 18 deletions GPU/GPUTracking/Base/hip/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,23 +122,29 @@ add_custom_target(${MODULE}_HIP_SRC_CHK ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/

add_custom_command(
OUTPUT ${GPU_RTC_BIN}.command
COMMAND echo -n "${CMAKE_HIP_COMPILER} ${GPU_RTC_FLAGS_SEPARATED} ${GPU_RTC_DEFINES} -x hip --cuda-device-only" > ${GPU_RTC_BIN}.command
COMMAND_EXPAND_LISTS
VERBATIM
COMMAND echo -n "${CMAKE_HIP_COMPILER} ${GPU_RTC_DEFINES} ${GPU_RTC_FLAGS_SEPARATED} -x hip --cuda-device-only" > ${GPU_RTC_BIN}.command
COMMAND_EXPAND_LISTS VERBATIM
COMMENT "Preparing HIP RTC command file ${GPU_RTC_BIN}.command"
)
create_binary_resource(${GPU_RTC_BIN}.command ${GPU_RTC_BIN}.command.o)

add_custom_command(
OUTPUT ${GPU_RTC_BIN}.command.arch
COMMAND echo -n "${GPU_RTC_FLAGS_ARCH}" > ${GPU_RTC_BIN}.command.arch
COMMAND_EXPAND_LISTS
VERBATIM
COMMENT "Preparing HIP RTC ARCH file ${GPU_RTC_BIN}.command.arch"
COMMAND_EXPAND_LISTS VERBATIM
COMMENT "Preparing HIP RTC ARCH command file ${GPU_RTC_BIN}.command.arch"
)
create_binary_resource(${GPU_RTC_BIN}.command.arch ${GPU_RTC_BIN}.command.arch.o)

set(SRCS ${SRCS} ${GPU_RTC_BIN}.src.o ${GPU_RTC_BIN}.command.o ${GPU_RTC_BIN}.command.arch.o)
add_custom_command(
OUTPUT ${GPU_RTC_BIN}.command.no_fast_math
COMMAND echo -n "${GPUCA_CXX_NO_FAST_MATH_FLAGS}" > ${GPU_RTC_BIN}.command.no_fast_math
COMMAND_EXPAND_LISTS VERBATIM
COMMENT "Preparing HIP RTC NO_FAST_MATH command file ${GPU_RTC_BIN}.command.no_fast_math"
)
create_binary_resource(${GPU_RTC_BIN}.command.no_fast_math ${GPU_RTC_BIN}.command.no_fast_math.o)

set(SRCS ${SRCS} ${GPU_RTC_BIN}.src.o ${GPU_RTC_BIN}.command.o ${GPU_RTC_BIN}.command.arch.o ${GPU_RTC_BIN}.command.no_fast_math.o)
# -------------------------------- End RTC -------------------------------------------------------

if(ALIGPU_BUILD_TYPE STREQUAL "O2")
Expand All @@ -154,8 +160,6 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2")
${GPUCA_HIP_SOURCE_DIR}
TARGETVARNAME targetName)

target_compile_definitions(${targetName} PUBLIC $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)

install(FILES ${HDRS} DESTINATION include/GPU)

# o2_add_test(GPUsortHIP NAME test_GPUsortHIP
Expand All @@ -169,11 +173,14 @@ if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
set(targetName "${MODULE}")
set(TMP_BASELIB GPUTracking)
add_library(${MODULE} SHARED ${SRCS})
add_library(O2::${MODULE} ALIAS ${MODULE})
target_link_libraries(${MODULE} PUBLIC ${TMP_BASELIB})
install(TARGETS GPUTrackingHIP)
include_directories(${GPUCA_HIP_SOURCE_DIR})
endif()

target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)

add_library(${MODULE}_CXX OBJECT ${SRCS_CXX}) # Adding a C++ library for the .cxx code of the HIP library, such that it does not link to HIP libraries, and CMake HIP Language doesn't add HIP compile flags.
target_compile_definitions(${MODULE}_CXX PRIVATE $<TARGET_PROPERTY:${TMP_BASELIB},COMPILE_DEFINITIONS>)
target_include_directories(${MODULE}_CXX PRIVATE $<TARGET_PROPERTY:${TMP_BASELIB},INCLUDE_DIRECTORIES>)
Expand Down Expand Up @@ -222,15 +229,6 @@ elseif(GPUCA_HIP_COMPILE_MODE STREQUAL "perkernel")
target_sources(${targetName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o)
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/GPUTrackingHIPKernelModules.o PROPERTIES EXTERNAL_OBJECT true GENERATED true)

# Disable all non-deterministic floating point to make TPC track model encoding / decoding precise
set_source_files_properties(${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCCompressionKernels_step0attached.hip
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCCompressionKernels_step1unattached.hip
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCDecompressionKernels_step0attached.hip
${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_GPUTPCDecompressionKernels_step1unattached.hip
TARGET_DIRECTORY ${targetName}
PROPERTIES
COMPILE_FLAGS "${GPUCA_CXX_NO_FAST_MATH_FLAGS}"
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
elseif(GPUCA_HIP_COMPILE_MODE STREQUAL "rdc")
message(FATAL_ERROR "HIP RDC compilation of GPUReconstruction ios not yet working!")
target_compile_definitions(${targetName} PRIVATE GPUCA_KERNEL_COMPILE_MODE=2)
Expand Down
26 changes: 15 additions & 11 deletions GPU/GPUTracking/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -372,16 +372,6 @@ if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
endif()
endif()

# Disable all non-deterministic floating point to make TPC track model encoding / decoding precise
set_source_files_properties(DataCompression/GPUTPCCompressionTrackModel.cxx
DataCompression/GPUTPCCompressionKernels.cxx
DataCompression/TPCClusterDecompressor.cxx
DataCompression/GPUTPCDecompressionKernels.cxx
TARGET_DIRECTORY ${targetName}
PROPERTIES
COMPILE_FLAGS "${GPUCA_CXX_NO_FAST_MATH_FLAGS}"
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")

# GPUReconstructionLibrary needs to know which GPU backends are enabled for proper error messages
configure_file(Base/GPUReconstructionAvailableBackends.template.h ${CMAKE_CURRENT_BINARY_DIR}/GPUReconstructionAvailableBackends.h)
set_source_files_properties(Base/GPUReconstructionLibrary.cxx
Expand Down Expand Up @@ -423,5 +413,19 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2" OR ALIGPU_BUILD_TYPE STREQUAL "Standalone")
endif()

if(GPUCA_DETERMINISTIC_MODE GREATER_EQUAL ${GPUCA_DETERMINISTIC_MODE_MAP_GPU})
target_compile_definitions(${targetName} PUBLIC GPUCA_DETERMINISTIC_MODE)
target_compile_definitions(${targetName} PRIVATE GPUCA_DETERMINISTIC_MODE)
endif()

# Disable all non-deterministic floating point to make TPC track model encoding / decoding precise
set_source_files_properties(DataCompression/GPUTPCCompressionTrackModel.cxx
DataCompression/GPUTPCCompressionKernels.cxx
DataCompression/TPCClusterDecompressor.cxx
DataCompression/GPUTPCDecompressionKernels.cxx
TARGET_DIRECTORY ${targetName}
PROPERTIES
COMPILE_FLAGS "${GPUCA_CXX_NO_FAST_MATH_FLAGS}"
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
o2_gpu_kernel_set_deterministic(GPUTPCCompressionKernels_step0attached
GPUTPCCompressionKernels_step1unattached
GPUTPCDecompressionKernels_step0attached
GPUTPCDecompressionKernels_step1unattached)
1 change: 1 addition & 0 deletions GPU/GPUTracking/Definitions/GPUSettingsList.h
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ BeginSubConfig(GPUSettingsProcessingRTC, rtc, configStandalone.proc, "RTC", 0, "
AddOption(cacheOutput, bool, false, "", 0, "Cache RTC compilation results")
AddOption(optConstexpr, bool, true, "", 0, "Replace constant variables by static constexpr expressions")
AddOption(optSpecialCode, int8_t, -1, "", 0, "Insert GPUCA_RTC_SPECIAL_CODE special code during RTC")
AddOption(deterministic, bool, false, "", 0, "Compile RTC in deterministic mode, with NO_FAST_MATH flags and GPUCA_DETERMINISTIC_MODE define")
AddOption(compilePerKernel, bool, true, "", 0, "Run one RTC compilation per kernel")
AddOption(enable, bool, false, "", 0, "Use RTC to optimize GPU code")
AddOption(runTest, int32_t, 0, "", 0, "Do not run the actual benchmark, but just test RTC compilation (1 full test, 2 test only compilation)")
Expand Down
3 changes: 1 addition & 2 deletions GPU/GPUTracking/Standalone/Benchmark/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,9 @@ if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
add_executable(ca ${SRCS})
set(targetName ca)
target_link_libraries(${targetName} PUBLIC GPUTracking)

endif()

target_compile_definitions(${targetName} PUBLIC $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)
target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)

if(ROOT_FOUND)
target_sources(${targetName} PRIVATE ../../qa/genEvents.cxx)
Expand Down
23 changes: 23 additions & 0 deletions GPU/GPUTracking/cmake/kernel_helpers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,26 @@ function(o2_gpu_kernel_file_list list)
list(REMOVE_DUPLICATES TMP_FILE_LIST)
set_property(TARGET O2_GPU_KERNELS PROPERTY O2_GPU_KERNELS_FILE_LIST_${list} "${TMP_FILE_LIST}")
endfunction()

function(o2_gpu_kernel_set_deterministic)
if(NOT GPUCA_DETERMINISTIC_MODE GREATER_EQUAL ${GPUCA_DETERMINISTIC_MODE_MAP_GPU})
list(LENGTH ARGV n)
math(EXPR n "${n} - 1")
foreach(i RANGE 0 ${n})
if(CUDA_ENABLED AND (NOT DEFINED GPUCA_CUDA_COMPILE_MODE OR GPUCA_CUDA_COMPILE_MODE STREQUAL "perkernel"))
set_source_files_properties("${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_${ARGV${i}}.cu"
TARGET_DIRECTORY O2::GPUTrackingCUDA
PROPERTIES
COMPILE_FLAGS "${GPUCA_CUDA_NO_FAST_MATH_FLAGS}"
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
endif()
if(HIP_ENABLED AND (NOT DEFINED GPUCA_HIP_COMPILE_MODE OR GPUCA_HIP_COMPILE_MODE STREQUAL "perkernel"))
set_source_files_properties("${O2_GPU_KERNEL_WRAPPER_FOLDER}/krnl_${ARGV${i}}.hip"
TARGET_DIRECTORY O2::GPUTrackingHIP
PROPERTIES
COMPILE_FLAGS "${GPUCA_CXX_NO_FAST_MATH_FLAGS}"
COMPILE_DEFINITIONS "GPUCA_DETERMINISTIC_MODE")
endif()
endforeach()
endif()
endfunction()
3 changes: 2 additions & 1 deletion GPU/GPUTracking/display/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ if(ALIGPU_BUILD_TYPE STREQUAL "O2")
PUBLIC_INCLUDE_DIRECTORIES .
SOURCES ${SRCS} ${SRCS_NO_H})

target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)
target_compile_definitions(${targetName} PRIVATE GPUCA_BUILD_EVENT_DISPLAY_GLFW GPUCA_DISPLAY_GL3W GPUCA_DISPLAY_OPENGL_CORE)

install(FILES ${HDRS} ${HDRS_INSTALL} DESTINATION include/GPU)
Expand All @@ -158,6 +157,8 @@ if(ALIGPU_BUILD_TYPE STREQUAL "Standalone")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/setinclude.sh PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE DESTINATION displayTrackFilter)
endif()

target_compile_definitions(${targetName} PRIVATE $<TARGET_PROPERTY:O2::GPUTracking,COMPILE_DEFINITIONS>)

message(STATUS "Building GPU Event Display (Vulkan ${GPUCA_EVENT_DISPLAY_VULKAN}, Wayland ${GPUCA_EVENT_DISPLAY_WAYLAND}, Freetype ${GPUCA_EVENT_DISPLAY_FREETYPE}, Fontconfig ${Fontconfig_FOUND}, Qt ${GPUCA_EVENT_DISPLAY_QT})")
target_link_libraries(${targetName} PUBLIC ${GLFW_LIBRARIES} OpenGL::GL)
target_include_directories(${targetName} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
Expand Down
12 changes: 6 additions & 6 deletions GPU/GPUTracking/utils/qconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -250,12 +250,12 @@ enum qConfigRetVal { qcrOK = 0,
#define AddVariable(name, type, default) out << qon_mxstr(type) << " " << qon_mxstr(name) << ";\n";
#define AddOptionArray(name, type, count, default, optname, optnameshort, help, ...) out << qon_mxstr(type) << " " << qon_mxstr(name) << "[" << qon_mxstr(count) << "];\n";
#define AddOptionVec(name, type, optname, optnameshort, help, ...) out << "std::vector<" << qon_mxstr(type) << "> " << qon_mxstr(name) << ";\n";
#define AddVariableRTC(name, type, default) \
if (useConstexpr) { \
out << "static constexpr " << qon_mxstr(type) << " " << qon_mxstr(name) << " = " << qConfig::print_type(std::get<const qConfigCurrentType*>(tSrc)->name) << ";\n"; \
out << qon_mxstr(type) << " " << qon_mxstr(qon_mxcat(_dummy_, name)) << ";\n"; \
} else { \
AddOption(name, type, default, optname, optnameshort, help); \
#define AddVariableRTC(name, type, default) \
if (useConstexpr) { \
out << "static constexpr " << qon_mxstr(type) << " " << qon_mxstr(name) << " = " << qConfig::print_type(std::get<const qConfigCurrentType*>(tSrc)->name, true) << ";\n"; \
out << qon_mxstr(type) << " " << qon_mxstr(qon_mxcat(_dummy_, name)) << ";\n"; \
} else { \
AddOption(name, type, default, optname, optnameshort, help); \
}
#define AddOptionRTC(name, type, default, optname, optnameshort, help, ...) AddVariableRTC(name, type, default)
#define AddOptionArrayRTC(name, type, count, default, optname, optnameshort, help, ...) \
Expand Down
Loading