You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

99 lines
2.9 KiB

# ============================================================================
# This file will generate the cmake target `MshIO::MshIO`.
#
# To add MshIO as a dependency:
#
# add_subdirectory(MshIO)
# target_link_libraries(your_target mshio::mshio)
#
# ============================================================================
cmake_minimum_required(VERSION 3.11)
set(CMAKE_CXX_STANDARD 14)
project(MshIO)
option(MSHIO_BUILD_TESTS "Build unit tests" OFF)
option(MSHIO_BUILD_EXAMPLES "Build examples" OFF)
option(MSHIO_EXT_NANOSPLINE "Enable nanospline extension" OFF)
if (NOT SKBUILD)
option(MSHIO_PYTHON "Build python binding" OFF)
else()
set(MSHIO_PYTHON ON CACHE BOOL "Build python binding" FORCE)
endif()
include(FetchContent)
file(GLOB INC_FILES "${PROJECT_SOURCE_DIR}/include/mshio/*.h")
file(GLOB SRC_FILES "${PROJECT_SOURCE_DIR}/src/*.cpp")
add_library(mshio STATIC ${SRC_FILES})
target_include_directories(mshio PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>")
add_library(mshio::mshio ALIAS mshio)
if (MSHIO_EXT_NANOSPLINE)
target_compile_definitions(mshio PUBLIC -DMSHIO_EXT_NANOSPLINE)
endif()
if (MSHIO_PYTHON)
include(cmake/nanobind.cmake)
set(PY_SRC_FILE "${PROJECT_SOURCE_DIR}/python/pymshio.cpp")
nanobind_add_module(pymshio NB_STATIC ${PY_SRC_FILE})
target_link_libraries(pymshio PUBLIC mshio::mshio)
install(TARGETS pymshio LIBRARY DESTINATION .)
add_library(mshio::pymshio ALIAS pymshio)
endif()
if (MSHIO_BUILD_EXAMPLES)
add_executable(msh_inspect ${PROJECT_SOURCE_DIR}/examples/msh_inspect.cpp)
target_link_libraries(msh_inspect PRIVATE mshio::mshio)
endif()
if (MSHIO_BUILD_TESTS)
include(CTest)
enable_testing()
include(cmake/Catch2.cmake)
include(cmake/sanitizer-cmake.cmake)
file(GLOB TEST_FILES "${PROJECT_SOURCE_DIR}/tests/*.cpp")
add_executable(test_MshIO ${TEST_FILES})
target_link_libraries(test_MshIO mshio::mshio Catch2::Catch2)
target_compile_definitions(test_MshIO PRIVATE
MSHIO_DATA_DIR="${PROJECT_SOURCE_DIR}/data")
catch_discover_tests(test_MshIO)
if(NOT MSVC)
target_compile_options(test_MshIO PRIVATE -Wconversion -Wall -Werror)
else()
target_compile_options(test_MshIO PRIVATE "/MP")
endif()
if (SANITIZE_ADDRESS OR
SANITIZE_LINK_STATIC OR
SANITIZE_MEMORY OR
SANITIZE_THREAD OR
SANITIZE_UNDEFINED)
add_sanitizers(test_MshIO)
endif()
endif()
if (NOT MSHIO_PYTHON)
include(GNUInstallDirs)
install(TARGETS mshio
EXPORT mshio_target
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(DIRECTORY include/ DESTINATION include
FILES_MATCHING PATTERN "*.h")
install(EXPORT mshio_target DESTINATION cmake)
endif()