cmake_minimum_required(VERSION 3.20) project(NeRF.cpp LANGUAGES CXX) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) endif() # Find LibTorch and nlohmann_json in a project-local ./libtorch or the active conda # environment, so neither needs to be passed on the command line. foreach(prefix "${CMAKE_CURRENT_SOURCE_DIR}/libtorch" "$ENV{CONDA_PREFIX}") if(prefix AND EXISTS "${prefix}") list(APPEND CMAKE_PREFIX_PATH "${prefix}") endif() endforeach() # LibTorch's Caffe2 CMake still references CUDA::nvToolsExt, but CUDA 12+ ships NVTX # header-only and dropped that target. An empty stand-in keeps linking working. find_package(CUDAToolkit QUIET) if(NOT TARGET CUDA::nvToolsExt) add_library(CUDA::nvToolsExt INTERFACE IMPORTED) endif() find_package(Torch REQUIRED) find_package(nlohmann_json CONFIG REQUIRED) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") add_executable(NeRF.cpp src/main.cpp src/args.cpp src/model.cpp src/renderer.cpp src/data.cpp src/utils.cpp src/eval.cpp) target_include_directories(NeRF.cpp PRIVATE include) target_link_libraries(NeRF.cpp PRIVATE ${TORCH_LIBRARIES} nlohmann_json::nlohmann_json) # stb_image.h trips -Wstringop-overflow on GCC; it is vendored, so silence it. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set_source_files_properties(src/data.cpp PROPERTIES COMPILE_OPTIONS "-Wno-stringop-overflow") endif()