1- project (ViennaRay-GPU)
2-
3- option (VIENNARAY_ENABLE_OPTIXIR_SUPPORT
4- "Enable support for generating OptiX-IR targeted input files" ON )
5-
6- if (CUDA_VERSION VERSION_LESS 11.7)
7- if (VIENNARAY_ENABLE_OPTIXIR_SUPPORT)
8- message (
9- SEND_ERROR "VIENNARAY_ENABLE_OPTIXIR_SUPPORT is not supported in CUDA versions less than 11.7"
10- )
11- endif ()
12- endif ()
13-
14- if (VIENNARAY_ENABLE_OPTIXIR_SUPPORT)
15- option (VIENNARAY_GENERATE_OPTIXIR "Generate Optix-IR OptiX shaders" ON )
16- option (VIENNARAY_GENERATE_PTX "Generate PTX OptiX shaders" OFF )
17- else ()
18- option (VIENNARAY_GENERATE_OPTIXIR "Generate Optix-IR OptiX shaders" OFF )
19- option (VIENNARAY_GENERATE_PTX "Generate PTX OptiX shaders" ON )
20- endif ()
21-
221#### Set variables
23- set (VIENNARAY_GPU_INCLUDE
24- "${PROJECT_SOURCE_DIR} /include"
25- CACHE STRING "ViennaRay GPU headers." )
262set (VIENNARAY_CUDA_KERNELS
27- "${PROJECT_SOURCE_DIR} /kernels/normKernels.cu"
3+ "${PROJECT_SOURCE_DIR} /gpu/ kernels/normKernels.cu"
284 CACHE STRING "ViennaRay CUDA kernel source files." )
295set (VIENNARAY_PIPELINE_DIR
30- "${PROJECT_SOURCE_DIR} /pipelines"
6+ "${PROJECT_SOURCE_DIR} /gpu/ pipelines"
317 CACHE STRING "ViennaRay pipeline directory." )
32- include ("../cmake/generate_ptx.cmake" )
8+
9+ # Incldue directories for PTX and optix-ir compilation (force cache to update with new entries)
10+ if (NOT VIENNARAY_PASSED_FIRST_CONFIGURE)
11+ set (VIENNACORE_NVCC_INCLUDE_DIRS
12+ ${VIENNACORE_NVCC_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR} /include/viennaray/gpu
13+ CACHE STRING "PTX include directories" FORCE )
14+ if (VIENNARAY_GPU_DOUBLE_PRECISION)
15+ set (VIENNACORE_NVCC_DEFINES
16+ ${VIENNACORE_NVCC_DEFINES} "VIENNARAY_GPU_DOUBLE_PRECISION=1"
17+ CACHE STRING "PTX compile definitions" FORCE )
18+ endif ()
19+ endif ()
20+
21+ # Add the general pipelines and callable wrapper
22+ viennacore_add_optixir (GeneralPipelineDisk ${VIENNARAY_PIPELINE_DIR} /GeneralPipelineDisk.cu )
23+ viennacore_add_optixir (GeneralPipelineTriangle ${VIENNARAY_PIPELINE_DIR} /GeneralPipelineTriangle.cu )
24+ viennacore_add_optixir (GeneralPipelineLine ${VIENNARAY_PIPELINE_DIR} /GeneralPipelineLine.cu )
25+ viennacore_add_optixir (ViennaRayCallableWrapper ${VIENNARAY_PIPELINE_DIR} /CallableWrapper.cu )
26+
27+ # Add the norm kernels
28+ viennacore_add_ptx (normKernels ${VIENNARAY_CUDA_KERNELS} )
29+
30+ # CMake target to collect all GPU dependencies for tests and examples
31+ set (VIENNARAY_GPU_DEPENDENCIES
32+ GeneralPipelineDisk GeneralPipelineTriangle GeneralPipelineLine normKernels
33+ CACHE STRING "ViennaRay GPU dependencies." )
34+ # Install PTX files
35+ install (DIRECTORY "${VIENNACORE_NVCC_PTX_DIR} /" DESTINATION "lib/ptx" )
3336
3437if (VIENNARAY_BUILD_EXAMPLES)
3538 message (STATUS "[ViennaRay] Adding GPU Examples" )
@@ -40,3 +43,7 @@ if(VIENNARAY_BUILD_TESTS)
4043 message (STATUS "[ViennaRay] Adding GPU Tests" )
4144 add_subdirectory (tests )
4245endif ()
46+
47+ set (VIENNARAY_PASSED_FIRST_CONFIGURE
48+ ON
49+ CACHE INTERNAL "Indicates whether the first configure has been passed." )
0 commit comments