cmake: add WITH_CGAL / WITH_VIEWER modes, remove unused Boost

Restructures the CMake build into three clearly separated modes:

  (default)        tests only – Eigen + GTest, no heavy deps
  -DWITH_VIEWER=ON builds viewer lib (libigl / GLFW / GLAD)
  -DWITH_CGAL=ON   builds conformallab_core CLI app;
                   implies WITH_VIEWER automatically

Changes:
- code/CMakeLists.txt: viewer and core targets are now guarded by
  option() flags; GTest / tests target is always built
- code/deps/Cmakelists.txt: CGAL, libigl, glfw, glad are only
  extracted when the corresponding mode is enabled; Eigen always
- Remove Boost (211 MB tarball, 0 usages in the codebase – CGAL 6.x
  does not require Boost for Simple_cartesian / Surface_mesh / basic IO)
- Remove code/src/main.cpp (dead file, not referenced in CMake)

All 16 C++ tests pass in tests-only mode (verified locally).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Tarik Moussa
2026-05-09 21:42:43 +02:00
parent 5337a9e5a7
commit cd7b7a8fd8
4 changed files with 99 additions and 98 deletions

View File

@@ -1,13 +1,31 @@
cmake_minimum_required(VERSION 3.20)
# Automatisch Projektname aus Parent-Ordner
set(PROJECT_NAME "conformallab_core")
project(${PROJECT_NAME} LANGUAGES C CXX)
message(STATUS "Configuring ${PROJECT_NAME}...")
# Build-Setup
# ── 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)
@@ -18,20 +36,18 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
endif()
# Compiler-Warnings & Optimierungen
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
add_compile_options(-Wall -Wextra -Wpedantic)
# AddressSanitizer nur im Debug (nicht für Tests, da gtest_discover_tests
# die Binary zur Buildzeit ausführt und ASan dabei hängt)
# 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()
# ----- Testing (Google Test via FetchContent) -----
# ── GTest (always tests are always built) ────────────────────────────────────
include(FetchContent)
include(CTest)
enable_testing()
@@ -45,38 +61,44 @@ 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)
add_subdirectory(deps/glfw-3.4)
# --------- GLAD (global) ---------
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)
# --------- VIEWER Lib (separat → nur bei src/viewer/* Änderung gebaut!) ---------
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)
# --------- Executable ---------
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/boost_1_90_0/
${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-2.6.0/include
)
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
#-------- Compiler-Definitionen ---------
target_compile_definitions(${PROJECT_NAME} PRIVATE CGAL_DISABLE_GMP CGAL_DISABLE_MPFR)
target_link_libraries(${PROJECT_NAME} PRIVATE viewer)
#--------- Output-Ordner ---------
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
# ── 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)
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)
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)