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}
)
