CGAL 6.x still unconditionally includes boost/config.hpp in its
config.h, so Boost headers are required even with CGAL_DISABLE_GMP/MPFR.
Use system Boost via find_package instead of the removed 211 MB tarball.
Tests-only mode remains completely dependency-free.
Install: brew install boost (macOS)
apt install libboost-dev (Debian/Ubuntu)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
111 lines
5.0 KiB
CMake
111 lines
5.0 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
||
|
||
set(PROJECT_NAME "conformallab_core")
|
||
project(${PROJECT_NAME} LANGUAGES C CXX)
|
||
|
||
message(STATUS "Configuring ${PROJECT_NAME}...")
|
||
|
||
# ── Build modes ────────────────────────────────────────────────────────────────
|
||
#
|
||
# Default (CI / tests-only): only Eigen + GTest are required.
|
||
#
|
||
# -DWITH_CGAL=ON builds the conformallab_core CLI app (needs CGAL).
|
||
# Automatically enables WITH_VIEWER because the app uses
|
||
# the viewer library for mesh visualisation.
|
||
#
|
||
# -DWITH_VIEWER=ON builds the viewer library standalone (libigl/GLFW/GLAD).
|
||
#
|
||
# ──────────────────────────────────────────────────────────────────────────────
|
||
option(WITH_CGAL "Build conformallab_core app (requires CGAL + Viewer)" OFF)
|
||
option(WITH_VIEWER "Build viewer library (libigl / GLFW / GLAD)" OFF)
|
||
|
||
# The CLI app always needs the viewer; enable it implicitly.
|
||
if(WITH_CGAL AND NOT WITH_VIEWER)
|
||
message(STATUS "WITH_CGAL implies WITH_VIEWER – enabling automatically.")
|
||
set(WITH_VIEWER ON CACHE BOOL "" FORCE)
|
||
endif()
|
||
|
||
# ── Standard settings ──────────────────────────────────────────────────────────
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||
|
||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||
|
||
if(NOT CMAKE_BUILD_TYPE)
|
||
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
|
||
endif()
|
||
|
||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
|
||
add_compile_options(-Wall -Wextra -Wpedantic)
|
||
|
||
# AddressSanitizer only in Debug (gtest_discover_tests runs the binary at
|
||
# configure time and hangs with ASan enabled).
|
||
if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT BUILD_TESTING)
|
||
add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
|
||
add_link_options(-fsanitize=address)
|
||
endif()
|
||
endif()
|
||
|
||
# ── GTest (always – tests are always built) ────────────────────────────────────
|
||
include(FetchContent)
|
||
include(CTest)
|
||
enable_testing()
|
||
|
||
FetchContent_Declare(
|
||
googletest
|
||
GIT_REPOSITORY https://github.com/google/googletest.git
|
||
GIT_TAG v1.14.0
|
||
)
|
||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||
set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
|
||
set(BUILD_GMOCK OFF CACHE BOOL "" FORCE)
|
||
FetchContent_MakeAvailable(googletest)
|
||
|
||
# ── External deps (lazy tarball extraction) ────────────────────────────────────
|
||
add_subdirectory(deps)
|
||
|
||
# ── Viewer library (optional) ──────────────────────────────────────────────────
|
||
if(WITH_VIEWER)
|
||
add_subdirectory(deps/glfw-3.4)
|
||
|
||
add_library(glad STATIC
|
||
${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/src/glad.c)
|
||
target_include_directories(glad PUBLIC
|
||
${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/include)
|
||
|
||
add_library(viewer STATIC src/viewer/simple_viewer.cpp)
|
||
target_include_directories(viewer PUBLIC
|
||
${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-2.6.0/include
|
||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||
${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/include
|
||
${CMAKE_CURRENT_SOURCE_DIR}/deps/eigen-3.4.0/)
|
||
target_link_libraries(viewer PUBLIC glad glfw)
|
||
endif()
|
||
|
||
# ── Core CLI app (optional, requires CGAL + Viewer) ───────────────────────────
|
||
if(WITH_CGAL)
|
||
# CGAL 6.x still needs Boost.Config headers unconditionally.
|
||
# Install via: brew install boost (macOS)
|
||
# apt install libboost-dev (Debian/Ubuntu)
|
||
find_package(Boost REQUIRED)
|
||
|
||
add_executable(${PROJECT_NAME} src/apps/v0/conformallab_cli.cpp)
|
||
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE
|
||
${CMAKE_CURRENT_SOURCE_DIR}/deps/single_includes
|
||
${CMAKE_CURRENT_SOURCE_DIR}/deps/eigen-3.4.0/
|
||
${CMAKE_CURRENT_SOURCE_DIR}/deps/CGAL-6.1.1/include
|
||
${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-2.6.0/include
|
||
${Boost_INCLUDE_DIRS})
|
||
target_include_directories(${PROJECT_NAME} PRIVATE
|
||
${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||
CGAL_DISABLE_GMP CGAL_DISABLE_MPFR)
|
||
target_link_libraries(${PROJECT_NAME} PRIVATE viewer)
|
||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
||
endif()
|
||
|
||
# ── Tests (always) ────────────────────────────────────────────────────────────
|
||
add_subdirectory(tests)
|