Raw File
cmake_minimum_required(VERSION 3.16)

# The project name
set(PROJ_NAME SchematLib)

# Setup the project
project(${PROJ_NAME} LANGUAGES C CXX)

option(SCHEMATLIB_CREATE_FORMAT_TARGET "Create format target" OFF)

# Sources
file(GLOB_RECURSE SRC CONFIGURE_DEPENDS src/**/*.cpp src/*.cpp)

file(GLOB_RECURSE HEADERS CONFIGURE_DEPENDS include/**/*.h include/**/*.cpp)

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SRC} ${HEADERS})

message(STATUS "[SchematLib] Toolchain: ${CMAKE_TOOLCHAIN_FILE}")

include(FetchContent)
include(cmake/InstallDependency.cmake)

# Set downloaded dependency install directory
set(_DEPENDENCY_DIRECTORY ${CMAKE_BINARY_DIR}/dependencies)
# Add dependencies
find_package(Boost 1.75 REQUIRED COMPONENTS serialization date_time timer graph)

# Add the dependency directory to our prefix path for find_package in config mode.
list(APPEND CMAKE_PREFIX_PATH ${_DEPENDENCY_DIRECTORY})

## Geometry Core++ library
FetchContent_Declare(
  gcpp-lib
  GIT_REPOSITORY https://gitlab.tue.nl/20184217/gcpp-lib.git
  GIT_TAG        783a869a2bd34d2f45fee910803d81a41e948a41 # Master 
)
INSTALL_DEPENDENCY(
    FETCHCONTENT_NAME gcpp-lib
    INSTALL_DIRECTORY ${_DEPENDENCY_DIRECTORY}
)
find_package(GeometryCore++Lib CONFIG REQUIRED)

# Movetk
# todo(bram): currently pulling custom fork, change this when movetk becomes more stable.
FetchContent_Declare(
  movetk
  GIT_REPOSITORY https://github.com/bacusters/movetk.git
  GIT_TAG        2627444624d5197be8e0630c2eef4d7b28b0abb3
)
INSTALL_DEPENDENCY(
    CLEAN
    FETCHCONTENT_NAME movetk
    INSTALL_DIRECTORY ${_DEPENDENCY_DIRECTORY}
)
find_package(movetk CONFIG REQUIRED)

# TODO: fix a version
find_package(CGAL CONFIG REQUIRED)
find_package(GMP REQUIRED)

#Add the library
add_library(${PROJ_NAME} ${SRC} ${HEADERS})

# Enable C++17
target_compile_features(${PROJ_NAME} PUBLIC cxx_std_17)

target_compile_definitions(${PROJ_NAME} PUBLIC _USE_MATH_DEFINES)

#Include appropriate directories
target_include_directories(${PROJ_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)

# Link libraries
target_link_libraries(${PROJ_NAME} PUBLIC GeometryCore++Lib::GeometryCore++Lib movetk CGAL::CGAL ${GMP_LIBRARY} Boost::boost)

#add_subdirectory(SchematLibCommon)

if(SCHEMATLIB_CREATE_FORMAT_TARGET)
find_program(CLANG_FORMAT_EXEC clang-format)
add_custom_target(${PROJ_NAME}_format
	COMMAND ${CLANG_FORMAT_EXEC} --style=file -i ${SRC} ${HEADERS}
)
endif()

# option(SCHEMATLIB_BUILD_UI "Build UI" OFF)
# if(SCHEMATLIB_BUILD_UI)
#     add_subdirectory(SchematLibUI)
# endif()

# option(SCHEMATLIB_BUILD_CLI "Build CLI" OFF)
# if(SCHEMATLIB_BUILD_CLI)
#     add_subdirectory(SchematLibCLI)
# endif()
back to top