cmake_minimum_required(VERSION 3.20) project(NeighborlyPolyhedra LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) option(SZILASSI_ENABLE_CUDA "Build the FP32 CUDA global-search backend" ON) set(EIGEN_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/external/eigen-3.4.0" CACHE PATH "Eigen include root") if(NOT EXISTS "${EIGEN_ROOT}/Eigen/Dense") message(FATAL_ERROR "Eigen not found at ${EIGEN_ROOT}. Download Eigen 3.4.0 into external/eigen-3.4.0 or pass -DEIGEN_ROOT=...") endif() add_library(neighborly_core src/Checkpoint/GlobalCheckpoint.cpp src/Checkpoint/GlobalCheckpoint.h src/NeighborlyCore/plane.h src/NeighborlyCore/precise_geometry.h src/NeighborlyCore/util.cpp src/NeighborlyCore/util.h src/NeighborlyCore/wide_real.h projects/Szilassi/solver.cpp projects/Szilassi/solver.h ) include(CheckLanguage) if(SZILASSI_ENABLE_CUDA) check_language(CUDA) endif() if(SZILASSI_ENABLE_CUDA AND CMAKE_CUDA_COMPILER) enable_language(CUDA) add_library(neighborly_cuda src/CudaSearch/cuda_search.cu) set_target_properties(neighborly_cuda PROPERTIES CUDA_ARCHITECTURES "89-real;120-real;120-virtual" CUDA_STANDARD 17 CUDA_STANDARD_REQUIRED ON ) target_compile_definitions(neighborly_cuda PUBLIC SZILASSI_HAS_CUDA=1) else() add_library(neighborly_cuda src/CudaSearch/cuda_search_stub.cpp) message(STATUS "CUDA Toolkit not found: building a diagnostic stub backend") endif() target_include_directories(neighborly_cuda PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src/CudaSearch" ) target_include_directories(neighborly_core PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src/NeighborlyCore" "${CMAKE_CURRENT_SOURCE_DIR}/src/Checkpoint" "${CMAKE_CURRENT_SOURCE_DIR}/projects/Szilassi" "${EIGEN_ROOT}" ) if(MSVC) target_compile_options(neighborly_core PRIVATE /W3 /permissive- /EHsc) target_compile_definitions(neighborly_core PUBLIC NOMINMAX _CRT_SECURE_NO_WARNINGS) else() target_compile_options(neighborly_core PRIVATE -Wall -Wextra) endif() add_executable(neighborly_main projects/Szilassi/main.cpp) target_link_libraries(neighborly_main PRIVATE neighborly_core neighborly_cuda) add_executable(verify_cpp projects/VerifyCpp/verify_cpp.cpp) target_link_libraries(verify_cpp PRIVATE neighborly_core) add_executable(polyhedron_gui WIN32 projects/PolyhedronGui/launcher_gui.cpp) if(MSVC) target_compile_definitions(polyhedron_gui PRIVATE UNICODE _UNICODE NOMINMAX) target_compile_options(polyhedron_gui PRIVATE /utf-8) target_link_libraries(polyhedron_gui PRIVATE shell32) endif()