-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
137 lines (116 loc) · 4.06 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
cmake_minimum_required(VERSION 3.10.0)
set(CMAKE_MODULE_PATH
"${CMAKE_SOURCE_DIR}/cmake"
${CMAKE_MODULE_PATH})
set(CMAKE_VERBOSE_MAKEFILE true)
project(wtlib LANGUAGES CXX)
set(wtlib_VERSION_MAJOR 0)
set(wtlib_VERSION_MINOR 1)
set(wtlib_VERSION_PATCH 0)
set(wtlib_VERSION "${wtlib_VERSION_MAJOR}.${wtlib_VERSION_MINOR}.${wtlib_VERSION_PATCH}")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED true)
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
add_definitions("-frounding-math")
endif()
include(CheckCXXSourceCompiles)
include(GNUInstallDirs)
# Find CGAL lib
find_package(CGAL REQUIRED
COMPONENTS Core)
# Find Boost program_options lib
find_package(Boost REQUIRED
COMPONENTS program_options)
# Resolve CGAL incompatibility issues.
include(CheckCGALAPI)
include_directories(
src/include
${CGAL_INCLUDE_DIRS}
)
option(ENABLE_ASAN "Enable address sanitizer" OFF)
option(ENABLE_COVERAGE "Enable code coverage tests" OFF)
option(ENABLE_CUSTOM_MESH "Enable custom mesh" ON)
option(ENABLE_TEST "Enable test" OFF)
option(ENABLE_UNORDERED_MAP "Enable unordered map" ON)
option(DISABLE_ROUNDING_CHECK "Disable rounding check" OFF)
option(BUILD_DEMO "Build demo" ON)
if (ENABLE_COVERAGE)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline -fno-elide-constructors ${CMAKE_CXX_FLAGS_DEBUG}")
set(ENABLE_TEST ON)
include(CodeCoverage)
APPEND_COVERAGE_COMPILER_FLAGS()
message(STATUS "Check code coverage: ON")
endif()
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif ()
if (NOT CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "release")
endif()
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
message(STATUS "Install directory: ${CMAKE_INSTALL_PREFIX}")
if (ENABLE_ASAN)
message(STATUS "Address Sanitizer: ON")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address")
else ()
message(STATUS "Address Sanitizer: OFF")
endif (ENABLE_ASAN)
if (ENABLE_CUSTOM_MESH)
add_definitions(-DWTLIB_USE_CUSTOM_MESH)
message(STATUS "Custom mesh: ON")
else ()
remove_definitions(-DWTLIB_USE_CUSTOM_MESH)
message(STATUS "Custom mesh: OFF")
endif()
if (DISABLE_ROUNDING_CHECK)
add_definitions(-DCGAL_DISABLE_ROUNDING_MATH_CHECK)
message(STATUS "Rounding math check: OFF")
else()
message(STATUS "Rounding math check: ON")
endif()
if (ENABLE_UNORDERED_MAP)
add_definitions(-DWTLIB_USE_UNORDERED_MAP)
message(STATUS "Lookup table implementation: std::unordered_map")
else ()
remove_definitions(-DWTLIB_USE_UNORDERED_MAP)
message(STATUS "Lookup table implementation: std::map")
endif()
if (ENABLE_TEST)
message(STATUS "Build tests: ON")
add_subdirectory(src/test)
endif (ENABLE_TEST)
if (ENABLE_COVERAGE)
set(COVERAGE_LCOV_EXCLUDES '${CMAKE_CURRENT_BINARY_DIR}/*')
setup_target_for_coverage_lcov(
NAME coverage
EXECUTABLE ${CMAKE_CURRENT_SOURCE_DIR}/bin/wtt_run_tests
EXECUTABLE_ARGS ${CMAKE_CURRENT_BINARY_DIR}/src ${CODE_COVERAGE_DEPENDENCY}
LCOV_ARGS -q -rc lcov_branch_coverage=1 --no-external -d ${CMAKE_CURRENT_SOURCE_DIR}/src/include
GENHTML_ARGS --legend --branch-coverage --no-prefix
DEPENDENCIES ${CODE_COVERAGE_DEPENDENCY})
else()
message(STATUS "Check code coverage: OFF")
endif()
add_subdirectory(src/include)
add_subdirectory(src/app)
if (BUILD_DEMO)
add_subdirectory(src/wtt-demo)
endif()
add_subdirectory(bin)
# Install CMake config
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/wtlib-config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/wtlib-config.cmake"
@ONLY
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/wtlib-config.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/wtlib
)
# Install data files
install(FILES ${CMAKE_SOURCE_DIR}/data/sorted_subdivision_meshes/bunny.off
${CMAKE_SOURCE_DIR}/data/sorted_subdivision_meshes/dragon.off
${CMAKE_SOURCE_DIR}/data/sorted_subdivision_meshes/gargoyle-7.off
${CMAKE_SOURCE_DIR}/data/sorted_subdivision_meshes/torusknot-3.off
${CMAKE_SOURCE_DIR}/data/sorted_subdivision_meshes/vase-8.off
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/wtlib/sample-meshes)