-
Notifications
You must be signed in to change notification settings - Fork 65
/
Copy pathCMakeLists.txt
255 lines (217 loc) · 6.72 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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
set(CMAKE_CXX_STANDARD ${MR_CXX_STANDARD})
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(MRMesh CXX)
option(MRMESH_NO_CLIPBOARD "Disable clipboard support for Linux and Mac" OFF)
option(MRMESH_NO_PDF "Disable PDF support" OFF)
option(MRMESH_NO_CPR "Disable CPR tests" OFF)
option(MRMESH_NO_PYTHON "Disable Python bindings" OFF)
option(MRMESH_NO_DICOM "Disable DICOM image support" OFF)
option(MRMESH_NO_OPENCTM "Disable OpenCTM support" OFF)
option(MRMESH_NO_LABEL "Disable support of label objects" OFF)
option(MRMESH_NO_JPEG "Disable JPEG support" OFF)
option(MRMESH_NO_PNG "Disable PNG support" OFF)
option(MRMESH_NO_TIFF "Disable TIFF support" OFF)
option(MRMESH_NO_VOXEL "Disable voxel support" OFF)
option(MRMESH_NO_GLTF "Disable glTF support" OFF)
option(MRMESH_NO_XML "Disable XML support (affects 3MF support)" OFF)
option(MRMESH_NO_E57 "Disable E57 support" OFF)
option(MRMESH_NO_LAS "Disable LAS/LAZ support" OFF)
option(MRMESH_NO_GTEST "Disable building Google tests" OFF)
option(MRMESH_NO_OPENCASCADE "Disable OpenCASCADE usage" OFF)
option(MRMESH_NO_ZLIB "Disable Zlib usage" OFF)
IF(DEFINED MESHLIB_PYTHON_SUPPORT AND NOT MESHLIB_PYTHON_SUPPORT)
set(MRMESH_NO_PYTHON ON)
ENDIF()
IF(DEFINED BUILD_TESTING AND NOT BUILD_TESTING)
set(MRMESH_NO_GTEST ON)
ENDIF()
file(GLOB SOURCES "*.cpp")
file(GLOB HEADERS "*.h")
add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config_cmake.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config_cmake.h)
set(MRMESH_OPTIONAL_DEPENDENCIES "")
set(MRMESH_OPTIONAL_INCLUDE_DIRS "")
IF(NOT MRMESH_NO_OPENCTM)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES OpenCTM)
ENDIF()
IF(NOT MR_EMSCRIPTEN)
IF(NOT MRMESH_NO_CLIPBOARD)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES clip)
ENDIF()
IF(NOT MRMESH_NO_PDF)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES hpdf)
ENDIF()
IF(NOT MRMESH_NO_CPR)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES cpr)
ENDIF()
IF(NOT MRMESH_NO_PYTHON)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES ${MR_PYTHON_LIB})
ENDIF()
IF(NOT MRMESH_NO_DICOM)
find_package(GDCM CONFIG REQUIRED)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES gdcmIOD gdcmDICT gdcmDSED gdcmMEXD gdcmMSFF)
ENDIF()
IF(NOT MRMESH_NO_LABEL)
find_package(Freetype REQUIRED)
include_directories(${FREETYPE_INCLUDE_DIRS})
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES freetype)
ENDIF()
IF(NOT MRMESH_NO_JPEG)
IF(APPLE)
target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${HOMEBREW_PREFIX}/opt/jpeg-turbo/include>) # @todo
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES ${HOMEBREW_PREFIX}/opt/jpeg-turbo/lib/libturbojpeg.dylib)
ELSE()
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES turbojpeg)
ENDIF()
ENDIF()
IF(NOT MRMESH_NO_PNG)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES png)
ENDIF()
IF(NOT MRMESH_NO_TIFF)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES tiff)
ENDIF()
IF(NOT MRMESH_NO_VOXEL)
IF(APPLE)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES OpenVDB)
ELSE()
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES openvdb)
ENDIF()
ENDIF()
IF(NOT MRMESH_NO_XML)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES tinyxml2)
ENDIF()
IF(NOT MRMESH_NO_E57)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES E57Format)
ENDIF()
IF(NOT MRMESH_NO_LAS)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES lazperf)
ENDIF()
IF(NOT MRMESH_NO_GTEST)
IF(APPLE)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES GTest::gtest)
ELSE()
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES gtest)
ENDIF()
ENDIF()
IF(NOT MRMESH_NO_OPENCASCADE)
find_package(OpenCASCADE REQUIRED
COMPONENTS
# NOTE: the component order is significant
FoundationClasses
ModelingData
ModelingAlgorithms
Visualization
ApplicationFramework
DataExchange
)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES TKMesh TKSTEP)
list(APPEND MRMESH_OPTIONAL_INCLUDE_DIRS ${OpenCASCADE_INCLUDE_DIR})
ENDIF()
IF(NOT MRMESH_NO_ZLIB)
find_package(ZLIB REQUIRED)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES ZLIB::ZLIB)
ENDIF()
ELSE()
target_compile_definitions(${PROJECT_NAME}
PRIVATE
MRMESH_NO_PDF
MRMESH_NO_CPR
MRMESH_NO_PYTHON
MRMESH_NO_DICOM
MRMESH_NO_JPEG
MRMESH_NO_VOXEL
MRMESH_NO_E57
MRMESH_NO_OPENCASCADE
)
IF(NOT MRMESH_NO_LAS)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES lazperf_s)
ENDIF()
IF(NOT MRMESH_NO_ZLIB)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES z)
ENDIF()
ENDIF()
# alternative Eigen include for external project
find_package(Eigen3 NO_MODULE)
if(DEFINED EIGEN3_FOUND)
target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${EIGEN3_INCLUDE_DIRS}>)
list(APPEND MRMESH_OPTIONAL_DEPENDENCIES Eigen3::Eigen)
endif()
IF(NOT MR_EMSCRIPTEN)
find_package(Boost COMPONENTS REQUIRED )
find_package( TBB REQUIRED )
pkg_check_modules(JSONCPP jsoncpp)
include_directories(${JSONCPP_INCLUDE_DIRS})
ELSE()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s USE_BOOST_HEADERS=1 -s USE_FREETYPE=1 -s USE_LIBPNG=1")
ENDIF()
IF(APPLE OR MR_EMSCRIPTEN)
#jpeg-turbo is keg-only, which means it was not symlinked into /opt/homebrew,
#because libjpeg-turbo is not linked to prevent conflicts with the standard libjpeg.
#include_directories(/opt/homebrew/opt/jpeg-turbo/include)
#link_directories(/opt/homebrew/opt/jpeg-turbo/lib)
IF (APPLE)
find_library(COCOA_LIBRARY Cocoa ONLY)
target_compile_definitions(${PROJECT_NAME} PRIVATE _GNU_SOURCE)
target_include_directories(${PROJECT_NAME} PRIVATE
${MRMESH_OPTIONAL_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME} PRIVATE
spdlog
zip
Boost::boost
jsoncpp
fmt
tbb
${MRMESH_OPTIONAL_DEPENDENCIES}
${COCOA_LIBRARY}
)
ELSE()
target_include_directories(${PROJECT_NAME} PRIVATE
${MRMESH_OPTIONAL_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME} PRIVATE
mbedtls
mbedx509
mbedcrypto
zip
freetype
jsoncpp
tbb
${MRMESH_OPTIONAL_DEPENDENCIES}
)
ENDIF()
ELSE()
find_package(tl-expected REQUIRED)
target_include_directories(${PROJECT_NAME} PRIVATE
${MRMESH_OPTIONAL_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME} PRIVATE
tl::expected
fmt
spdlog
zip
Boost::boost
dl
jsoncpp
tbb
${MRMESH_OPTIONAL_DEPENDENCIES}
)
ENDIF()
IF(WIN32 AND MINGW)
target_compile_definitions(${PROJECT_NAME} PRIVATE MRMESH_EXPORT)
ENDIF()
set(CMAKE_INSTALL_PREFIX "/Library/Frameworks")
install(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}
LIBRARY DESTINATION "${MR_MAIN_LIB_DIR}"
ARCHIVE DESTINATION "${MR_MAIN_LIB_DIR}"
RUNTIME DESTINATION "${MR_BIN_DIR}")
install(FILES ${HEADERS} "config_cmake.h"
DESTINATION "${MR_INCLUDE_DIR}/${PROJECT_NAME}")
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake
DESTINATION ${MR_CONFIG_DIR})
install(EXPORT ${PROJECT_NAME}
FILE ${PROJECT_NAME}Targets.cmake
NAMESPACE MeshLib::
DESTINATION ${MR_CONFIG_DIR})