Spaces:
Build error
Build error
| # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. | |
| # SPDX-License-Identifier: Apache-2.0 | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| cmake_minimum_required(VERSION 3.18) | |
| project(gen3c-gui | |
| VERSION 1.0 | |
| DESCRIPTION "Gen3C Graphical User Interface" | |
| LANGUAGES C CXX CUDA | |
| ) | |
| set(NGP_VERSION "${CMAKE_PROJECT_VERSION}") | |
| if (NOT NGP_DEPLOY) | |
| set(NGP_VERSION "${NGP_VERSION}dev") | |
| endif() | |
| option(NGP_BUILD_EXECUTABLE "Build Gen3C executable?" OFF) | |
| option(NGP_BUILD_WITH_GUI "Build with GUI support (requires GLFW and GLEW)?" ON) | |
| option(NGP_BUILD_WITH_PYTHON_BINDINGS "Build bindings that allow instrumenting Gen3C with Python?" ON) | |
| option(NGP_BUILD_WITH_VULKAN "Build with Vulkan to enable DLSS support?" OFF) | |
| set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) | |
| ############################################################################### | |
| # Build type and C++ compiler setup | |
| ############################################################################### | |
| # Set a default configuration if none was specified | |
| if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) | |
| message(STATUS "No release type specified. Setting to 'Release'.") | |
| set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) | |
| set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo") | |
| endif() | |
| if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/glfw/CMakeLists.txt") | |
| message(FATAL_ERROR | |
| "Some Gen3C dependencies are missing. " | |
| "If you forgot the \"--recursive\" flag when cloning this project, " | |
| "this can be fixed by calling \"git submodule update --init --recursive\"." | |
| ) | |
| endif() | |
| if (APPLE) | |
| set(CMAKE_MACOSX_RPATH ON) | |
| endif() | |
| if (CMAKE_EXPORT_COMPILE_COMMANDS) | |
| set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) | |
| set(CMAKE_CUDA_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES}) | |
| endif() | |
| if (MSVC) | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_CRT_SECURE_NO_WARNINGS") | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP24") | |
| else() | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") | |
| endif() | |
| set(CMAKE_CXX_STANDARD 14) | |
| set(CMAKE_CXX_EXTENSIONS OFF) | |
| ############################################################################### | |
| # CUDA compiler setup | |
| ############################################################################### | |
| set(CMAKE_CUDA_STANDARD 14) | |
| set(CMAKE_CUDA_STANDARD_REQUIRED ON) | |
| set(CMAKE_CUDA_EXTENSIONS OFF) | |
| set(CUDA_LINK_LIBRARIES_KEYWORD PUBLIC) | |
| set(CMAKE_CUDA_RUNTIME_LIBRARY Shared) | |
| if (MSVC) | |
| list(APPEND CUDA_NVCC_FLAGS "-Xcompiler=/bigobj") | |
| else() | |
| list(APPEND CUDA_NVCC_FLAGS "-Xcompiler=-Wno-float-conversion") | |
| list(APPEND CUDA_NVCC_FLAGS "-Xcompiler=-fno-strict-aliasing") | |
| list(APPEND CUDA_NVCC_FLAGS "-Xcompiler=-fPIC") | |
| endif() | |
| list(APPEND CUDA_NVCC_FLAGS "--extended-lambda") | |
| list(APPEND CUDA_NVCC_FLAGS "--expt-relaxed-constexpr") | |
| list(APPEND CUDA_NVCC_FLAGS "--use_fast_math") | |
| # Figure out CUDA version | |
| if(CMAKE_CUDA_COMPILER_LOADED) | |
| if (CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA" AND CMAKE_CUDA_COMPILER_VERSION MATCHES "^([0-9]+\\.[0-9]+)") | |
| set(CUDA_VERSION "${CMAKE_MATCH_1}") | |
| endif() | |
| endif() | |
| # Adapted from the CMake source code at https://github.com/Kitware/CMake/blob/master/Modules/FindCUDA/select_compute_arch.cmake | |
| # Simplified to return a semicolon-separated list of the compute capabilities of installed devices | |
| function(TCNN_AUTODETECT_CUDA_ARCHITECTURES OUT_VARIABLE) | |
| if (NOT TCNN_AUTODETECT_CUDA_ARCHITECTURES_OUTPUT) | |
| if (CMAKE_CUDA_COMPILER_LOADED) # CUDA as a language | |
| set(file "${PROJECT_BINARY_DIR}/detect_tcnn_cuda_architectures.cu") | |
| else() | |
| set(file "${PROJECT_BINARY_DIR}/detect_tcnn_cuda_architectures.cpp") | |
| endif() | |
| file(WRITE ${file} "" | |
| "#include <cuda_runtime.h>\n" | |
| "#include <cstdio>\n" | |
| "int main() {\n" | |
| " int count = 0;\n" | |
| " if (cudaSuccess != cudaGetDeviceCount(&count)) return -1;\n" | |
| " if (count == 0) return -1;\n" | |
| " for (int device = 0; device < count; ++device) {\n" | |
| " cudaDeviceProp prop;\n" | |
| " if (cudaSuccess == cudaGetDeviceProperties(&prop, device)) {\n" | |
| " std::printf(\"%d%d\", prop.major, prop.minor);\n" | |
| " if (device < count - 1) std::printf(\";\");\n" | |
| " }\n" | |
| " }\n" | |
| " return 0;\n" | |
| "}\n" | |
| ) | |
| try_run(run_result compile_result ${PROJECT_BINARY_DIR} ${file} RUN_OUTPUT_VARIABLE compute_capabilities) | |
| if (run_result EQUAL 0) | |
| # If the user has multiple GPUs with the same compute capability installed, list that capability only once. | |
| list(REMOVE_DUPLICATES compute_capabilities) | |
| set(TCNN_AUTODETECT_CUDA_ARCHITECTURES_OUTPUT ${compute_capabilities} CACHE INTERNAL "Returned GPU architectures from detect_gpus tool" FORCE) | |
| endif() | |
| endif() | |
| if (NOT TCNN_AUTODETECT_CUDA_ARCHITECTURES_OUTPUT) | |
| message(STATUS "Automatic GPU detection failed. Building for Turing and Ampere as a best guess.") | |
| set(${OUT_VARIABLE} "75;86" PARENT_SCOPE) | |
| else() | |
| set(${OUT_VARIABLE} ${TCNN_AUTODETECT_CUDA_ARCHITECTURES_OUTPUT} PARENT_SCOPE) | |
| endif() | |
| endfunction() | |
| set(TCNN_CUDA_ARCHITECTURES "" CACHE STRING "Build tiny-cuda-nn for a specific GPU architecture.") | |
| if (DEFINED ENV{TCNN_CUDA_ARCHITECTURES}) | |
| message(STATUS "Obtained CUDA architectures from environment variable TCNN_CUDA_ARCHITECTURES=$ENV{TCNN_CUDA_ARCHITECTURES}") | |
| set(CMAKE_CUDA_ARCHITECTURES $ENV{TCNN_CUDA_ARCHITECTURES}) | |
| elseif (TCNN_CUDA_ARCHITECTURES) | |
| message(STATUS "Obtained CUDA architectures from CMake variable TCNN_CUDA_ARCHITECTURES=${TCNN_CUDA_ARCHITECTURES}") | |
| set(CMAKE_CUDA_ARCHITECTURES ${TCNN_CUDA_ARCHITECTURES}) | |
| else() | |
| message(STATUS "Obtained CUDA architectures automatically from installed GPUs") | |
| TCNN_AUTODETECT_CUDA_ARCHITECTURES(CMAKE_CUDA_ARCHITECTURES) | |
| endif() | |
| # If the CUDA version does not support the chosen architecture, target | |
| # the latest supported one instead. | |
| if (CUDA_VERSION VERSION_LESS 11.0) | |
| set(LATEST_SUPPORTED_CUDA_ARCHITECTURE 75) | |
| elseif (CUDA_VERSION VERSION_LESS 11.1) | |
| set(LATEST_SUPPORTED_CUDA_ARCHITECTURE 80) | |
| elseif (CUDA_VERSION VERSION_LESS 11.8) | |
| set(LATEST_SUPPORTED_CUDA_ARCHITECTURE 86) | |
| else() | |
| set(LATEST_SUPPORTED_CUDA_ARCHITECTURE 90) | |
| endif() | |
| if (CUDA_VERSION VERSION_GREATER_EQUAL 12.0) | |
| set(EARLIEST_SUPPORTED_CUDA_ARCHITECTURE 50) | |
| else() | |
| set(EARLIEST_SUPPORTED_CUDA_ARCHITECTURE 20) | |
| endif() | |
| foreach (CUDA_CC IN LISTS CMAKE_CUDA_ARCHITECTURES) | |
| if (CUDA_CC GREATER ${LATEST_SUPPORTED_CUDA_ARCHITECTURE}) | |
| message(WARNING "CUDA version ${CUDA_VERSION} is too low for detected architecture ${CUDA_CC}. Targeting the highest supported architecture ${LATEST_SUPPORTED_CUDA_ARCHITECTURE} instead.") | |
| list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES ${CUDA_CC}) | |
| if (NOT CMAKE_CUDA_ARCHITECTURES) | |
| list(APPEND CMAKE_CUDA_ARCHITECTURES ${LATEST_SUPPORTED_CUDA_ARCHITECTURE}) | |
| endif() | |
| endif() | |
| if (CUDA_CC LESS ${EARLIEST_SUPPORTED_CUDA_ARCHITECTURE}) | |
| message(ERROR "CUDA version ${CUDA_VERSION} no longer supports detected architecture ${CUDA_CC}. Targeting the lowest supported architecture ${EARLIEST_SUPPORTED_CUDA_ARCHITECTURE} instead.") | |
| list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES ${CUDA_CC}) | |
| if (NOT CMAKE_CUDA_ARCHITECTURES) | |
| list(APPEND CMAKE_CUDA_ARCHITECTURES ${EARLIEST_SUPPORTED_CUDA_ARCHITECTURE}) | |
| endif() | |
| endif() | |
| endforeach(CUDA_CC) | |
| if (NOT CMAKE_CUDA_ARCHITECTURES) | |
| list(APPEND CMAKE_CUDA_ARCHITECTURES ${LATEST_SUPPORTED_CUDA_ARCHITECTURE}) | |
| endif() | |
| # Sort the list to obtain lowest architecture that must be compiled for. | |
| list(SORT CMAKE_CUDA_ARCHITECTURES COMPARE NATURAL ORDER ASCENDING) | |
| list(GET CMAKE_CUDA_ARCHITECTURES 0 MIN_GPU_ARCH) | |
| string(REPLACE "-virtual" "" MIN_GPU_ARCH "${MIN_GPU_ARCH}") | |
| message(STATUS "Targeting CUDA architectures: ${CMAKE_CUDA_ARCHITECTURES}") | |
| if (CUDA_VERSION VERSION_LESS 10.2) | |
| message(FATAL_ERROR "CUDA version too low. tiny-cuda-nn require CUDA 10.2 or higher.") | |
| endif() | |
| list(APPEND NGP_DEFINITIONS -DTCNN_MIN_GPU_ARCH=${MIN_GPU_ARCH}) | |
| list(APPEND NGP_LIBRARIES cuda) | |
| ############################################################################### | |
| # Dependencies | |
| ############################################################################### | |
| add_subdirectory("dependencies/fmt") | |
| list(APPEND NGP_LIBRARIES fmt) | |
| list(APPEND NGP_INCLUDES "dependencies/fmt/include") | |
| if (NGP_BUILD_WITH_GUI) | |
| find_package(Vulkan) | |
| if (Vulkan_FOUND AND NGP_BUILD_WITH_VULKAN) | |
| set(NGP_VULKAN ON) | |
| list(APPEND NGP_DEFINITIONS -DNGP_VULKAN -DGLFW_INCLUDE_VULKAN) | |
| list(APPEND NGP_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}") | |
| list(APPEND NGP_LIBRARIES ${Vulkan_LIBRARIES}) | |
| list(APPEND GUI_SOURCES src/dlss.cu) | |
| # DLSS depends on vulkan, so appears here | |
| list(APPEND NGP_INCLUDE_DIRECTORIES "dependencies/dlss/include") | |
| if (MSVC) | |
| list(APPEND NGP_LINK_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/dlss/lib/Windows_x86_64/x86_64") | |
| list(APPEND NGP_LIBRARIES "$<IF:$<CONFIG:Debug>,nvsdk_ngx_d_dbg,nvsdk_ngx_d>") | |
| else() | |
| list(APPEND NGP_LINK_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/dlss/lib/Linux_x86_64") | |
| list(APPEND NGP_LIBRARIES nvsdk_ngx) | |
| endif() | |
| else() | |
| set(NGP_VULKAN OFF) | |
| if (NGP_BUILD_WITH_VULKAN) | |
| message(WARNING | |
| "Vulkan was not found. Gen3C GUI will still compile and run correctly, but DLSS will not be supported." | |
| ) | |
| endif() | |
| endif() | |
| # OpenXR | |
| if (WIN32) | |
| list(APPEND NGP_DEFINITIONS -DXR_USE_PLATFORM_WIN32 -DGLFW_EXPOSE_NATIVE_WGL) | |
| elseif (UNIX AND NOT APPLE) | |
| list(APPEND NGP_DEFINITIONS -DGLFW_EXPOSE_NATIVE_GLX) | |
| if (JK_USE_WAYLAND) | |
| set(PRESENTATION_BACKEND wayland CACHE STRING " " FORCE) | |
| set(BUILD_WITH_XLIB_HEADERS OFF CACHE BOOL " " FORCE) | |
| set(BUILD_WITH_XCB_HEADERS OFF CACHE BOOL " " FORCE) | |
| set(BUILD_WITH_WAYLAND_HEADERS ON CACHE BOOL " " FORCE) | |
| list(APPEND NGP_DEFINITIONS -DGLFW_EXPOSE_NATIVE_WAYLAND -DXR_USE_PLATFORM_WAYLAND) | |
| else() | |
| set(PRESENTATION_BACKEND xlib CACHE STRING " " FORCE) | |
| set(BUILD_WITH_XLIB_HEADERS ON CACHE BOOL " " FORCE) | |
| set(BUILD_WITH_XCB_HEADERS OFF CACHE BOOL " " FORCE) | |
| set(BUILD_WITH_WAYLAND_HEADERS OFF CACHE BOOL " " FORCE) | |
| list(APPEND NGP_DEFINITIONS -DGLFW_EXPOSE_NATIVE_X11 -DXR_USE_PLATFORM_XLIB) | |
| endif() | |
| else() | |
| message(FATAL_ERROR "No OpenXR platform set for this OS") | |
| endif() | |
| add_subdirectory(dependencies/OpenXR-SDK) | |
| list(APPEND NGP_INCLUDE_DIRECTORIES "dependencies/OpenXR-SDK/include" "dependencies/OpenXR-SDK/src/common") | |
| list(APPEND NGP_LIBRARIES openxr_loader) | |
| list(APPEND GUI_SOURCES src/openxr_hmd.cu) | |
| # OpenGL | |
| find_package(OpenGL REQUIRED) | |
| # GLFW | |
| set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL " " FORCE) | |
| set(GLFW_BUILD_TESTS OFF CACHE BOOL " " FORCE) | |
| set(GLFW_BUILD_DOCS OFF CACHE BOOL " " FORCE) | |
| set(GLFW_BUILD_INSTALL OFF CACHE BOOL " " FORCE) | |
| set(GLFW_INSTALL OFF CACHE BOOL " " FORCE) | |
| set(GLFW_USE_CHDIR OFF CACHE BOOL " " FORCE) | |
| set(GLFW_VULKAN_STATIC OFF CACHE BOOL " " FORCE) | |
| set(BUILD_SHARED_LIBS ON CACHE BOOL " " FORCE) | |
| add_subdirectory(dependencies/glfw) | |
| set_target_properties(glfw PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1) | |
| mark_as_advanced( | |
| GLFW_BUILD_DOCS GLFW_BUILD_EXAMPLES GLFW_BUILD_INSTALL GLFW_BUILD_TESTS | |
| GLFW_DOCUMENT_INTERNALS GLFW_INSTALL GLFW_USE_CHDIR GLFW_USE_MENUBAR | |
| GLFW_USE_OSMESA GLFW_VULKAN_STATIC GLFW_USE_RETINA GLFW_USE_MIR | |
| BUILD_SHARED_LIBS USE_MSVC_RUNTIME_LIBRARY_DLL | |
| ) | |
| list(APPEND NGP_INCLUDE_DIRECTORIES "dependencies/glfw/include" "dependencies/imgui") | |
| if (MSVC) | |
| list(APPEND NGP_INCLUDE_DIRECTORIES "dependencies/gl3w") | |
| list(APPEND GUI_SOURCES "dependencies/gl3w/GL/gl3w.c") | |
| list(APPEND NGP_LIBRARIES opengl32 $<TARGET_OBJECTS:glfw_objects>) | |
| else() | |
| find_package(GLEW REQUIRED) | |
| list(APPEND NGP_INCLUDE_DIRECTORIES ${GLEW_INCLUDE_DIRS}) | |
| list(APPEND NGP_LIBRARIES GL ${GLEW_LIBRARIES} $<TARGET_OBJECTS:glfw_objects>) | |
| endif() | |
| list(APPEND GUI_SOURCES | |
| dependencies/imguizmo/ImGuizmo.cpp | |
| dependencies/imgui/imgui.cpp | |
| dependencies/imgui/backends/imgui_impl_glfw.cpp | |
| dependencies/imgui/backends/imgui_impl_opengl3.cpp | |
| dependencies/imgui/imgui_draw.cpp | |
| dependencies/imgui/imgui_tables.cpp | |
| dependencies/imgui/imgui_widgets.cpp | |
| dependencies/imgui/misc/cpp/imgui_stdlib.cpp | |
| ) | |
| list(APPEND NGP_DEFINITIONS -DNGP_GUI) | |
| endif(NGP_BUILD_WITH_GUI) | |
| list(APPEND NGP_INCLUDE_DIRECTORIES | |
| "dependencies" | |
| "dependencies/filesystem" | |
| "dependencies/tinylogger" | |
| ) | |
| find_package(OpenMP) | |
| if (OPENMP_FOUND) | |
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") | |
| endif() | |
| if (NGP_BUILD_WITH_PYTHON_BINDINGS) | |
| find_package(Python 3.7 COMPONENTS Interpreter Development) | |
| if (Python_FOUND) | |
| add_subdirectory("dependencies/pybind11") | |
| endif() | |
| endif() | |
| # Compile zlib (only on Windows) | |
| if (WIN32) | |
| set(ZLIB_USE_STATIC_LIBS ON CACHE BOOL " " FORCE) | |
| set(ZLIB_BUILD_STATIC_LIBS ON CACHE BOOL " " FORCE) | |
| set(ZLIB_BUILD_SHARED_LIBS OFF CACHE BOOL " " FORCE) | |
| set(SKIP_INSTALL_ALL ON CACHE BOOL " " FORCE) | |
| add_subdirectory("dependencies/zlib") | |
| set_property(TARGET zlibstatic PROPERTY FOLDER "dependencies") | |
| set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/zlib" CACHE PATH " " FORCE) | |
| set(ZLIB_LIBRARY zlibstatic) | |
| include_directories(${ZLIB_INCLUDE_DIR} "${CMAKE_CURRENT_BINARY_DIR}/dependencies/zlib") | |
| list(APPEND NGP_LIBRARIES zlibstatic) | |
| endif() | |
| ############################################################################### | |
| # Program | |
| ############################################################################### | |
| list(APPEND NGP_DEFINITIONS -DNGP_VERSION="${NGP_VERSION}") | |
| list(APPEND NGP_INCLUDE_DIRECTORIES "include") | |
| if (NOT MSVC) | |
| list(APPEND NGP_LIBRARIES ${CMAKE_DL_LIBS}) | |
| endif() | |
| list(APPEND NGP_SOURCES | |
| ${GUI_SOURCES} | |
| src/tiny-cuda-nn/common_host.cu | |
| src/camera_path.cu | |
| src/common_host.cu | |
| src/render_buffer.cu | |
| src/testbed.cu | |
| src/thread_pool.cpp | |
| ) | |
| set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) | |
| set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}) | |
| set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR}) | |
| set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR}) | |
| set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}) | |
| get_filename_component(CUDA_COMPILER_BIN "${CMAKE_CUDA_COMPILER}" DIRECTORY) | |
| get_filename_component(CUDA_DIR "${CUDA_COMPILER_BIN}" DIRECTORY) | |
| set(CUDA_INCLUDE "${CUDA_DIR}/include") | |
| add_library(ngp STATIC ${NGP_SOURCES}) | |
| set_target_properties(ngp PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON CUDA_SEPARABLE_COMPILATION ON) | |
| target_compile_definitions(ngp PUBLIC ${NGP_DEFINITIONS}) | |
| target_compile_options(ngp PUBLIC $<$<COMPILE_LANGUAGE:CUDA>:${CUDA_NVCC_FLAGS}>) | |
| target_include_directories(ngp PUBLIC ${NGP_INCLUDE_DIRECTORIES}) | |
| target_link_directories(ngp PUBLIC ${NGP_LINK_DIRECTORIES}) | |
| target_link_libraries(ngp PUBLIC ${NGP_LIBRARIES}) | |
| # Copy shared libraries to the binary directory as needed | |
| if (NGP_VULKAN) | |
| set(NGX_BUILD_DIR "$<IF:$<CONFIG:Debug>,dev,rel>") | |
| if (MSVC) | |
| set(NGX_SHARED_LIB "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/dlss/lib/Windows_x86_64/${NGX_BUILD_DIR}/nvngx_dlss.dll") | |
| else() | |
| set(NGX_SHARED_LIB "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/dlss/lib/Linux_x86_64/${NGX_BUILD_DIR}/libnvidia-ngx-dlss.so.*") | |
| endif() | |
| add_custom_command(TARGET ngp POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${NGX_SHARED_LIB}" "${CMAKE_CURRENT_BINARY_DIR}" COMMAND_EXPAND_LISTS) | |
| endif() | |
| if (MSVC) | |
| file(GLOB CUDA_DLLS "${CUDA_COMPILER_BIN}/cudart64*.dll") | |
| if (CUDA_DLLS) | |
| add_custom_command(TARGET ngp POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CUDA_DLLS} "${CMAKE_CURRENT_BINARY_DIR}" COMMAND_EXPAND_LISTS) | |
| endif() | |
| endif() | |
| if (NGP_BUILD_EXECUTABLE) | |
| add_executable(gen3c-gui src/main.cu) | |
| target_link_libraries(gen3c-gui PRIVATE ngp) | |
| # Link the executable to the project directory and copy over DLLs such that gen3c-gui can be invoked without going into the build folder. | |
| set(NGP_BINARY_FILE "\"${CMAKE_CURRENT_SOURCE_DIR}/$<TARGET_FILE_NAME:gen3c-gui>\"") | |
| if (MSVC) | |
| add_custom_command(TARGET gen3c-gui POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:gen3c-gui> ${CMAKE_CURRENT_SOURCE_DIR}) | |
| file(GLOB NGP_REQUIRED_DLLS "${CUDA_COMPILER_BIN}/cudart64*.dll") | |
| if (NGP_VULKAN) | |
| list(APPEND NGP_REQUIRED_DLLS "${NGX_SHARED_LIB}") | |
| endif() | |
| if (NGP_REQUIRED_DLLS) | |
| add_custom_command(TARGET gen3c-gui POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${NGP_REQUIRED_DLLS} ${CMAKE_CURRENT_SOURCE_DIR} COMMAND_EXPAND_LISTS) | |
| endif() | |
| else() | |
| add_custom_command(TARGET gen3c-gui POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE:gen3c-gui> "${NGP_BINARY_FILE}") | |
| if (NGP_VULKAN) | |
| add_custom_command(TARGET gen3c-gui POST_BUILD COMMAND "ln" -s -f "${NGX_SHARED_LIB}" "${CMAKE_CURRENT_SOURCE_DIR}/") | |
| endif() | |
| endif() | |
| endif(NGP_BUILD_EXECUTABLE) | |
| if (Python_FOUND) | |
| add_library(pyngp SHARED src/python_api.cu) | |
| set_target_properties(pyngp PROPERTIES CXX_VISIBILITY_PRESET "hidden" CUDA_VISIBILITY_PRESET "hidden") | |
| target_link_libraries(pyngp PRIVATE ngp PUBLIC ${PYTHON_LIBRARIES} pybind11::module) | |
| target_compile_definitions(pyngp PUBLIC -DNGP_PYTHON) | |
| pybind11_extension(pyngp) | |
| endif() | |