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:
@@ -1,13 +1,31 @@
|
|||||||
cmake_minimum_required(VERSION 3.20)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
# Automatisch Projektname aus Parent-Ordner
|
|
||||||
|
|
||||||
set(PROJECT_NAME "conformallab_core")
|
set(PROJECT_NAME "conformallab_core")
|
||||||
|
|
||||||
project(${PROJECT_NAME} LANGUAGES C CXX)
|
project(${PROJECT_NAME} LANGUAGES C CXX)
|
||||||
|
|
||||||
message(STATUS "Configuring ${PROJECT_NAME}...")
|
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 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
@@ -18,20 +36,18 @@ if(NOT CMAKE_BUILD_TYPE)
|
|||||||
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Compiler-Warnings & Optimierungen
|
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
|
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
|
||||||
add_compile_options(-Wall -Wextra -Wpedantic)
|
add_compile_options(-Wall -Wextra -Wpedantic)
|
||||||
|
|
||||||
# AddressSanitizer nur im Debug (nicht für Tests, da gtest_discover_tests
|
# AddressSanitizer only in Debug (gtest_discover_tests runs the binary at
|
||||||
# die Binary zur Buildzeit ausführt und ASan dabei hängt)
|
# configure time and hangs with ASan enabled).
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT BUILD_TESTING)
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT BUILD_TESTING)
|
||||||
add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
|
add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
|
||||||
add_link_options(-fsanitize=address)
|
add_link_options(-fsanitize=address)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# ── GTest (always – tests are always built) ────────────────────────────────────
|
||||||
# ----- Testing (Google Test via FetchContent) -----
|
|
||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
include(CTest)
|
include(CTest)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
@@ -45,38 +61,44 @@ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
|||||||
set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
|
set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
|
||||||
set(BUILD_GMOCK OFF CACHE BOOL "" FORCE)
|
set(BUILD_GMOCK OFF CACHE BOOL "" FORCE)
|
||||||
FetchContent_MakeAvailable(googletest)
|
FetchContent_MakeAvailable(googletest)
|
||||||
# --------------------------------------------------
|
|
||||||
|
|
||||||
|
# ── External deps (lazy tarball extraction) ────────────────────────────────────
|
||||||
add_subdirectory(deps)
|
add_subdirectory(deps)
|
||||||
add_subdirectory(deps/glfw-3.4)
|
|
||||||
|
|
||||||
# --------- GLAD (global) ---------
|
# ── Viewer library (optional) ──────────────────────────────────────────────────
|
||||||
add_library(glad STATIC ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/src/glad.c)
|
if(WITH_VIEWER)
|
||||||
target_include_directories(glad PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/include)
|
add_subdirectory(deps/glfw-3.4)
|
||||||
# --------- 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)
|
|
||||||
|
|
||||||
|
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)
|
add_subdirectory(tests)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,16 @@
|
|||||||
# deps/CMakeLists.txt
|
# deps/CMakeLists.txt
|
||||||
function(setup_dependency NAME SUBDIR)
|
#
|
||||||
|
# Lazy tarball extraction – a dependency is only extracted when its directory
|
||||||
|
# does not yet exist. Extraction happens at cmake configure time.
|
||||||
|
#
|
||||||
|
# Which deps are extracted depends on the active build mode:
|
||||||
|
#
|
||||||
|
# (default) Eigen only → tests-only build
|
||||||
|
# WITH_VIEWER=ON + Eigen, libigl, libigl-glad, glfw
|
||||||
|
# WITH_CGAL=ON + Eigen, CGAL (WITH_VIEWER is implied by WITH_CGAL)
|
||||||
|
#
|
||||||
|
|
||||||
|
function(setup_dependency NAME SUBDIR)
|
||||||
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${NAME}")
|
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${NAME}")
|
||||||
file(MAKE_DIRECTORY "${NAME}")
|
file(MAKE_DIRECTORY "${NAME}")
|
||||||
file(GLOB TARBALL "${CMAKE_CURRENT_SOURCE_DIR}/tarballs/${NAME}.tar.*")
|
file(GLOB TARBALL "${CMAKE_CURRENT_SOURCE_DIR}/tarballs/${NAME}.tar.*")
|
||||||
@@ -7,20 +18,21 @@ function(setup_dependency NAME SUBDIR)
|
|||||||
if(NOT TARBALL)
|
if(NOT TARBALL)
|
||||||
message(FATAL_ERROR "❌ No '${NAME}*.tar.*' in deps/tarballs/")
|
message(FATAL_ERROR "❌ No '${NAME}*.tar.*' in deps/tarballs/")
|
||||||
else()
|
else()
|
||||||
message(STATUS "${CMAKE_COMMAND} ${TARBALL}" )
|
message(STATUS "${CMAKE_COMMAND} ${TARBALL}")
|
||||||
|
|
||||||
if(SUBDIR STREQUAL "")
|
if(SUBDIR STREQUAL "")
|
||||||
execute_process(COMMAND "${CMAKE_COMMAND}" -E tar xf "${TARBALL}" RESULT_VARIABLE TAR_STATUS WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" )
|
execute_process(
|
||||||
message(STATUS "Extracting ${NAME}... Output: ${TAR_OUTPUT} Status: ${TAR_STATUS}")
|
COMMAND "${CMAKE_COMMAND}" -E tar xf "${TARBALL}"
|
||||||
if(NOT TAR_STATUS EQUAL 0)
|
RESULT_VARIABLE TAR_STATUS
|
||||||
message(FATAL_ERROR "❌ Extract failed: ${NAME}")
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
execute_process(COMMAND "${CMAKE_COMMAND}" -E tar xf "${TARBALL}" "${NAME}/${SUBDIR}" RESULT_VARIABLE TAR_STATUS WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" )
|
execute_process(
|
||||||
message(STATUS "Extracting ${NAME}... Output: ${TAR_OUTPUT} Status: ${TAR_STATUS}")
|
COMMAND "${CMAKE_COMMAND}" -E tar xf "${TARBALL}" "${NAME}/${SUBDIR}"
|
||||||
if(NOT TAR_STATUS EQUAL 0)
|
RESULT_VARIABLE TAR_STATUS
|
||||||
message(FATAL_ERROR "❌ Extract failed: ${NAME}")
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
endif()
|
endif()
|
||||||
|
message(STATUS "Extracting ${NAME}... Status: ${TAR_STATUS}")
|
||||||
|
if(NOT TAR_STATUS EQUAL 0)
|
||||||
|
message(FATAL_ERROR "❌ Extract failed: ${NAME}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
@@ -28,10 +40,17 @@ function(setup_dependency NAME SUBDIR)
|
|||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
setup_dependency("CGAL-6.1.1" "include" )
|
# ── Always required ────────────────────────────────────────────────────────────
|
||||||
setup_dependency("eigen-3.4.0" "Eigen" )
|
setup_dependency("eigen-3.4.0" "Eigen")
|
||||||
setup_dependency("boost_1_90_0" "boost" )
|
|
||||||
setup_dependency("libigl-2.6.0" "include" )
|
|
||||||
setup_dependency("libigl-glad" "" )
|
|
||||||
setup_dependency("glfw-3.4" "" )
|
|
||||||
|
|
||||||
|
# ── Viewer mode ────────────────────────────────────────────────────────────────
|
||||||
|
if(WITH_VIEWER)
|
||||||
|
setup_dependency("libigl-2.6.0" "include")
|
||||||
|
setup_dependency("libigl-glad" "")
|
||||||
|
setup_dependency("glfw-3.4" "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ── CGAL mode ─────────────────────────────────────────────────────────────────
|
||||||
|
if(WITH_CGAL)
|
||||||
|
setup_dependency("CGAL-6.1.1" "include")
|
||||||
|
endif()
|
||||||
|
|||||||
Binary file not shown.
@@ -1,40 +0,0 @@
|
|||||||
#include <iostream>
|
|
||||||
#include <CGAL/Simple_cartesian.h>
|
|
||||||
|
|
||||||
typedef CGAL::Simple_cartesian<double> Kernel;
|
|
||||||
typedef Kernel::Point_2 Point_2;
|
|
||||||
typedef Kernel::Segment_2 Segment_2;
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
Point_2 p(1,1), q(10,10);
|
|
||||||
|
|
||||||
std::cout << "p = " << p << std::endl;
|
|
||||||
std::cout << "q = " << q.x() << " " << q.y() << std::endl;
|
|
||||||
|
|
||||||
std::cout << "sqdist(p,q) = "
|
|
||||||
<< CGAL::squared_distance(p,q) << std::endl;
|
|
||||||
|
|
||||||
Segment_2 s(p,q);
|
|
||||||
Point_2 m(5, 9);
|
|
||||||
|
|
||||||
std::cout << "m = " << m << std::endl;
|
|
||||||
std::cout << "sqdist(Segment_2(p,q), m) = "
|
|
||||||
<< CGAL::squared_distance(s,m) << std::endl;
|
|
||||||
|
|
||||||
std::cout << "p, q, and m ";
|
|
||||||
switch (CGAL::orientation(p,q,m)){
|
|
||||||
case CGAL::COLLINEAR:
|
|
||||||
std::cout << "are collinear\n";
|
|
||||||
break;
|
|
||||||
case CGAL::LEFT_TURN:
|
|
||||||
std::cout << "make a left turn\n";
|
|
||||||
break;
|
|
||||||
case CGAL::RIGHT_TURN:
|
|
||||||
std::cout << "make a right turn\n";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::cout << " midpoint(p,q) = " << CGAL::midpoint(p,q) << std::endl;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user