diff --git a/code/CMakeList.txt b/code/CMakeList.txt new file mode 100644 index 0000000..a08bece --- /dev/null +++ b/code/CMakeList.txt @@ -0,0 +1,80 @@ +cmake_minimum_required(VERSION 3.15) + +# Projektname aus Ordner ableiten +get_filename_component(PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE) +get_filename_component(PROJECT_NAME "${PARENT_DIR}" NAME) +project(${PROJECT_NAME} LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +# Build-Typ +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE) +endif() +message(STATUS "CMake build type: ${CMAKE_BUILD_TYPE}") + +# Compiler-Flags (inkl. M1-Optimierung) +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") + message(STATUS "Using Clang/GCC warning flags") + add_compile_options(-Wall -Wextra -Wpedantic) + + # AddressSanitizer im Debug + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3 -fsanitize=address -fno-omit-frame-pointer") + + # Release-Optimierung (inkl. optional M1) + set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") + + if(APPLE) + execute_process(COMMAND uname -m + OUTPUT_VARIABLE ARCH + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(ARCH STREQUAL "arm64") + # Wenn du lieber generisch bleiben willst: -march=native statt -mcpu=apple-m1 + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mcpu=apple-m1") + endif() + endif() +endif() + +# --------- Abhängigkeiten --------- +include(FetchContent) + +FetchContent_Declare( + Eigen + GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git + GIT_TAG 3.3 + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE +) +set(EIGEN_BUILD_DOC OFF CACHE BOOL "" FORCE) +set(BUILD_TESTING OFF CACHE BOOL "" FORCE) +set(EIGEN_BUILD_PKGCONFIG OFF CACHE BOOL "" FORCE) +FetchContent_MakeAvailable(Eigen) + +find_package(Boost REQUIRED) +find_package(CGAL REQUIRED) + +add_subdirectory(deps/cgal) + + +# --------- Quellen & Executable --------- +set(SRCFILES + ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp +) + + +add_executable(${PROJECT_NAME} ${SRCFILES}) + +target_include_directories(${PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/deps/single_includes +) + +target_link_libraries(${PROJECT_NAME} PRIVATE + CGAL::CGAL + Eigen3::Eigen + ${Boost_LIBRARIES} +)