-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
248 lines (199 loc) · 10.1 KB
/
CMakeLists.txt
File metadata and controls
248 lines (199 loc) · 10.1 KB
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
cmake_minimum_required(VERSION 3.26)
cmake_policy(SET CMP0002 NEW)
cmake_policy(SET CMP0054 NEW)
cmake_policy(SET CMP0079 NEW)
cmake_policy(SET CMP0077 NEW)
cmake_policy(SET CMP0080 NEW) # ``BundleUtilities`` cannot be included at configure time.
# resolves symlinks before collapsing ../ components.
if(CMAKE_VERSION VERSION_GREATER "3.28.0")
cmake_policy(SET CMP0152 NEW)
endif()
include(${CMAKE_CURRENT_LIST_DIR}/cmake/Utility.cmake)
# ------------------------------------------------------------------------------
# is building unit tests enabled
# ------------------------------------------------------------------------------
option(EbsdLib_BUILD_TESTS "Enable building tests" ON)
enable_vcpkg_manifest_feature(TEST_VAR EbsdLib_BUILD_TESTS FEATURE "tests")
# ------------------------------------------------------------------------------
# are multithreading algorithms enabled
# ------------------------------------------------------------------------------
option(EbsdLib_ENABLE_MULTICORE "Enable multicore support" ON)
enable_vcpkg_manifest_feature(TEST_VAR EbsdLib_ENABLE_MULTICORE FEATURE "parallel")
option(EbsdLib_DISABLE_MSVC_WARNINGS ON)
option(BUILD_SHARED_LIBS "Build Shared Libs" ON)
# Extra Variables that need to be set before all the configured files are generated.
option(EbsdLib_ENABLE_HDF5 "Enable HDF5 Support in the EbsdLibProj" ON)
option(EbsdLib_BUILD_H5SUPPORT "Build H5Support Library" OFF)
# set project's name
project(EbsdLibProj VERSION 2.4.0)
# Request C++17 standard, using new CMake variables.
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
#--------------------------------------------------------------------------------------------------
# Always write out the compile_commands.json file to help out things like QtCreator and VS Code
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# ---------- Setup output Directories -------------------------
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
${PROJECT_BINARY_DIR}/Bin
CACHE PATH
"Single Directory for all Libraries"
)
# --------- Setup the Executable output Directory -------------
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
${PROJECT_BINARY_DIR}/Bin
CACHE PATH
"Single Directory for all Executables."
)
# --------- Setup the Executable output Directory -------------
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
${PROJECT_BINARY_DIR}/Bin
CACHE PATH
"Single Directory for all static libraries."
)
get_filename_component(EbsdLib_PARENT ${EbsdLibProj_SOURCE_DIR} DIRECTORY CACHE)
#-------------------------------------------------------------------------------
# Find the HDF5 Library as we need that.
#-------------------------------------------------------------------------------
if(EbsdLib_ENABLE_HDF5)
if(EbsdLib_BUILD_H5SUPPORT)
if(NOT TARGET H5Support::H5Support)
#------------------------------------------------------------------------------
# If the developer has set another H5Support directory then use that, otherwise look
# for the H5Support directory at the same level as the EBSDLib directory
if("${H5Support_SOURCE_DIR}" STREQUAL "")
if(EXISTS "${EbsdLib_PARENT}/H5Support")
set(H5Support_SOURCE_DIR "${EbsdLib_PARENT}/H5Support")
elseif(EXISTS "${EbsdLib_SOURCE_DIR}/H5Support")
set(H5Support_SOURCE_DIR "${EbsdLib_SOURCE_DIR}/H5Support")
else()
message(FATAL_ERROR "H5Support_SOURCE_DIR was not set. Where is the H5Support project directory. Please set the H5Support_SOURCE_DIR variable to the CMP directory.")
endif()
message(STATUS "H5Support_SOURCE_DIR: ${H5Support_SOURCE_DIR}")
endif()
set(H5Support_INCLUDE_QT_API OFF)
add_subdirectory("${H5Support_SOURCE_DIR}" "${EbsdLibProj_BINARY_DIR}/H5Support")
endif()
else()
find_package(H5Support REQUIRED)
endif()
endif()
mark_as_advanced(EbsdLib_ENABLE_HDF5)
#-------------------------------------------------------------------------------
# Find the Eigen Library as we need that.
#-------------------------------------------------------------------------------
find_package(Eigen3 REQUIRED)
if(EIGEN3_FOUND)
message(STATUS "Eigen3 Location: ${EIGEN3_ROOT_DIR}")
message(STATUS "Eigen3 Version: ${EIGEN3_VERSION_STRING}")
set(EBSD_USE_EIGEN "1" CACHE INTERNAL "")
else()
message(WARNING "The Eigen Library is required for some algorithms to execute. These algorithms will be disabled.")
endif()
# -----------------------------------------------------------------------
# Find FMT library
# -----------------------------------------------------------------------
find_package(fmt CONFIG REQUIRED)
#-------------------------------------------------------------------------------
# Determine if we need the ghcFilesystem library
#-------------------------------------------------------------------------------
set(EbsdLib_USE_GHC_FILESYSTEM OFF)
if(APPLE)
execute_process(COMMAND uname -v OUTPUT_VARIABLE DARWIN_VERSION)
string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION})
if(DARWIN_VERSION VERSION_LESS 19)
message(STATUS "The current macOS System is too old to compile and will fail. Please set the EbsdLib_USE_GHC_FILESYSTEM=ON variable to allow Ebsdlib to compile")
endif()
message(STATUS "EbsdLib: DARWIN_VERSION ${DARWIN_VERSION}")
message(STATUS "EbsdLib: CMAKE_OSX_DEPLOYMENT_TARGET: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
if(NOT "${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "" )
if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.15)
message(STATUS "EbsdLib: CMAKE_OSX_DEPLOYMENT_TARGET less than 10.15. Enabling EbsdLib_USE_GHC_FILESYSTEM")
set(EbsdLib_USE_GHC_FILESYSTEM ON)
endif()
endif()
endif()
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" AND ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)
set(EbsdLib_USE_GHC_FILESYSTEM ON)
endif()
message(STATUS "EbsdLib: EbsdLib_USE_GHC_FILESYSTEM: ${EbsdLib_USE_GHC_FILESYSTEM}")
if(EbsdLib_USE_GHC_FILESYSTEM)
find_package(ghcFilesystem REQUIRED NAMES ghc_filesystem ghcFilesystem)
endif()
# ------------------------------------------------------------------------------
# are multithreading algorithms enabled
# ------------------------------------------------------------------------------
if(EbsdLib_ENABLE_MULTICORE) # If TBB already exists no need to look for it (e.g. EbsdLib is added as a subdirectory in DREAM3D)
find_package(TBB CONFIG REQUIRED)
get_target_property(tbb_dll_path TBB::tbb IMPORTED_LOCATION_RELEASE)
get_filename_component(tbb_dll_path "${tbb_dll_path}" DIRECTORY)
get_property(EbsdLib_EXTRA_LIBRARY_DIRS GLOBAL PROPERTY EbsdLib_EXTRA_LIBRARY_DIRS)
set_property(GLOBAL PROPERTY EbsdLib_EXTRA_LIBRARY_DIRS ${EbsdLib_EXTRA_LIBRARY_DIRS} ${tbb_dll_path})
set(EbsdLib_USE_PARALLEL_ALGORITHMS ON)
endif()
include(${EbsdLibProj_SOURCE_DIR}/Source/EbsdLib/SourceList.cmake)
# ------------------------------------------------------------------------------
# Check if a different Data_Archive web site is being used.
# The alternate would be for the internal build bots that can download from a
# local webserver
# ------------------------------------------------------------------------------
if("${DATA_ARCHIVE_WEB_SITE}" STREQUAL "")
set(DATA_ARCHIVE_WEB_SITE "https://github.com/bluequartzsoftware/ebsdlib/releases/download/Data_Archive/")
endif()
file(TO_CMAKE_PATH "${EBSDLIB_DATA_DIR}" EBSDLIB_DATA_DIR_NORM)
# -----------------------------------------------------------------------
# This section creates a global file that holds the commands to copy data
# files, test data files, pipelines into a single cmake file that gets
# generated. This reduces the many copy targets to a single target.
# -----------------------------------------------------------------------
set_property(GLOBAL PROPERTY FETCH_FILE_INDEX 0)
set(FETCH_FILE_PATH "${EbsdLibProj_BINARY_DIR}/EbsdLibProj_fetch_remote_files.cmake")
set_property(GLOBAL PROPERTY FETCH_FILE_PATH "${FETCH_FILE_PATH}")
file(WRITE ${FETCH_FILE_PATH} "# -----------------------------------------------------------------------
# This file is programmatically generated from the CMake file ${CMAKE_CURRENT_LIST_FILE}
# This file has the commands to download each of the test files.
# The WORKING_DIRECTORY is set to the following CMake code:
# ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/$<$<CONFIG:Debug>:Debug>$<$<CONFIG:Release>:Release>
# -----------------------------------------------------------------------\n
cmake_policy(SET CMP0012 NEW)
cmake_policy(SET CMP0054 NEW)
# The ``FindPythonInterp`` and ``FindPythonLibs`` modules are removed.
# if(CMAKE_VERSION VERSION_GREATER \"3.27.0\")
# cmake_policy(SET CMP0148 NEW)
# endif()
# resolves symlinks before collapsing ../ components.
if(CMAKE_VERSION VERSION_GREATER \"3.28.0\")
cmake_policy(SET CMP0152 NEW)
endif()
set(CONFIG \${CMAKE_CONFIG})
set(LOG_FILE \"${EbsdLibProj_BINARY_DIR}/EbsdLibProj_fetch_remote_files.log\")\n
FILE(WRITE \"\${LOG_FILE}\" \"Featch File Log Start\n\")\n
")
message(STATUS "FETCH_FILE_PATH: ${FETCH_FILE_PATH}")
set(TEST_WORKING_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
if(CMAKE_GENERATOR MATCHES "Visual Studio")
set(TEST_WORKING_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/$<$<CONFIG:Debug>:Debug>$<$<CONFIG:Release>:Release>")
endif()
if(EBSDLIB_DOWNLOAD_TEST_FILES)
add_custom_target(EbsdLib_Fetch_Remote_Data_Files ALL
COMMAND "${CMAKE_COMMAND}" -DCMAKE_CONFIG=$<CONFIG> -P "${FETCH_FILE_PATH}"
COMMENT "Downloading EbsdLib Test Data Files"
# WORKING_DIRECTORY "${TEST_WORKING_DIR}"
)
set_target_properties(EbsdLib_Fetch_Remote_Data_Files PROPERTIES FOLDER ZZ_FETCH_TEST_FILES)
endif()
# ------------------------------------------------------------------------------
# Build Unit Test
# ------------------------------------------------------------------------------
if(EbsdLib_BUILD_TESTS)
enable_testing()
include(${EbsdLibProj_SOURCE_DIR}/Source/Test/CMakeLists.txt)
endif()
option(EbsdLib_BUILD_TOOLS "Build example applications" ON)
if(EbsdLib_BUILD_TOOLS)
include(${EbsdLibProj_SOURCE_DIR}/Source/Apps/SourceList.cmake)
endif()
# -----------------------------------------------------------------------
# Include the packaging Cmake codes
# -----------------------------------------------------------------------
include(${EbsdLibProj_SOURCE_DIR}/cmake/Packaging.cmake)