105 lines
3.6 KiB
CMake
105 lines
3.6 KiB
CMake
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/SearchArchive/SearchArchive.cpp
|
|
src/SearchArchive/SearchArchive.h
|
|
src/OnlineSurrogate/OnlineSurrogate.cpp
|
|
src/OnlineSurrogate/OnlineSurrogate.h
|
|
src/TrainingArchive/TrainingArchive.cpp
|
|
src/TrainingArchive/TrainingArchive.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}/src/SearchArchive"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/OnlineSurrogate"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/TrainingArchive"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/projects/Szilassi"
|
|
"${EIGEN_ROOT}"
|
|
)
|
|
|
|
if(MSVC)
|
|
target_compile_options(neighborly_core PRIVATE /W3 /permissive- /EHsc /utf-8)
|
|
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)
|
|
if(MSVC)
|
|
target_compile_options(neighborly_main PRIVATE /utf-8)
|
|
endif()
|
|
|
|
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()
|
|
|
|
include(CTest)
|
|
if(BUILD_TESTING)
|
|
add_executable(training_archive_selftest
|
|
tests/TrainingArchiveSelfTest/TrainingArchiveSelfTest.cpp
|
|
)
|
|
target_link_libraries(training_archive_selftest PRIVATE neighborly_core)
|
|
if(MSVC)
|
|
target_compile_options(training_archive_selftest PRIVATE /utf-8)
|
|
endif()
|
|
add_test(NAME training_archive_selftest COMMAND training_archive_selftest)
|
|
set_tests_properties(training_archive_selftest PROPERTIES
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
)
|
|
endif()
|