-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
263 lines (225 loc) · 12.8 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
255
256
257
258
259
260
261
262
# Check for cmake minimum required version (previously working with v2.8)
CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
# ----------------------------------------------------------------------
# Project intialisation
# ----------------------------------------------------------------------
# Project name (this case library's name)
PROJECT(SCICELLXX)
SET(${CMAKE_PROJECT_NAME}_MAJOR_VERSION 0)
SET(${CMAKE_PROJECT_NAME}_MINOR_VERSION 6)
SET(${CMAKE_PROJECT_NAME}_PATCH_LEVEL 0)
# Prints a lot of stuff
#SET(CMAKE_VERBOSE_MAKEFILE TRUE)
# ----------------------------------------------------------------------
# Output requested configuration
# ----------------------------------------------------------------------
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "CMAKE VERSION: " ${CMAKE_VERSION} )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "** GENERAL LIBRARY INFORMATION **" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "SCICELLXX_LIB_TYPE: " ${SCICELLXX_LIB_TYPE} )
MESSAGE( STATUS "SCICELLXX_BUILD_VERSION: " ${SCICELLXX_BUILD_VERSION} )
MESSAGE( STATUS "SCICELLXX_BUILD_DEMOS: " ${SCICELLXX_BUILD_DEMOS} )
MESSAGE( STATUS "PROJECT_NAME: " ${PROJECT_NAME})
MESSAGE( STATUS "PROJECT_MAJOR_VERSION: " ${SCICELLXX_MAJOR_VERSION})
MESSAGE( STATUS "PROJECT_MINOR_VERSION: " ${SCICELLXX_MINOR_VERSION})
MESSAGE( STATUS "PROJECT_PATCH_LEVEL: " ${SCICELLXX_PATCH_LEVEL})
# ----------------------------------------------------------------------
# Read configuration file and extract values of variables
# ----------------------------------------------------------------------
MESSAGE( STATUS "" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "** READ VARIABLES FROM CONFIGURATION FILE: " ${SCICELLXX_CONFIGURATION_FILE} " **")
MESSAGE( STATUS "-----------------------------------------------------------------------" )
file(STRINGS ${SCICELLXX_CONFIGURATION_FILE} ConfigContents)
foreach(NameAndValue ${ConfigContents})
# Strip leading spaces
string(REGEX REPLACE "^[ ]+" "" NameAndValue ${NameAndValue})
# Find variable name
string(REGEX MATCH "^[^=]+" Name ${NameAndValue})
# Find the value
string(REPLACE "${Name}=" "" Value ${NameAndValue})
# Set the variable
set(${Name} "${Value}")
MESSAGE( STATUS ${Name} " : " ${Value})
endforeach()
MESSAGE( STATUS "-----------------------------------------------------------------------" )
# ----------------------------------------------------------------------
# Do we want to compile using Armadillo?
# ----------------------------------------------------------------------
MESSAGE( STATUS "" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "** ARMADILLO'S LIBRARY INFORMATION **" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
IF (SCICELLXX_USES_ARMADILLO)
IF (SCICELLXX_AUTO_FIND_ARMADILLO_PATHS)
# Set the suggested folder where to look for Armadillo's library (where the
# ArmadilloConfig.cmake) file lives
LIST(APPEND CMAKE_PREFIX_PATH ${ARMADILLO_AUTO_FIND_FOLDER})
# Try to find Armadillo to enable Armadillo wrappers
FIND_PACKAGE(Armadillo REQUIRED)
IF (ARMADILLO_FOUND)
MESSAGE( STATUS "FOUND ARMADILLO_INCLUDE_DIRS: " ${ARMADILLO_INCLUDE_DIRS} )
MESSAGE( STATUS "FOUND ARMADILLO_LIBRARIES: " ${ARMADILLO_LIBRARIES} )
INCLUDE_DIRECTORIES(${ARMADILLO_INCLUDE_DIRS})
ENDIF (ARMADILLO_FOUND)
ELSE (SCICELLXX_AUTO_FIND_ARMADILLO_PATHS)
MESSAGE( STATUS "USING YOUR OWN ARMADILLO'S INCLUDE AND LIB PATHS")
MESSAGE( STATUS "ARMADILLO_INCLUDE_DIRS: " ${ARMADILLO_INCLUDE_DIRS} )
MESSAGE( STATUS "ARMADILLO_LIBRARIES: " ${ARMADILLO_LIBRARIES} )
INCLUDE_DIRECTORIES(${ARMADILLO_INCLUDE_DIRS})
ENDIF (SCICELLXX_AUTO_FIND_ARMADILLO_PATHS)
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "** THREADS'S LIBRARY INFORMATION **" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
# Find Threads packages (usually pthread)
# Required by Armadillo
FIND_PACKAGE(Threads REQUIRED)
ENDIF (SCICELLXX_USES_ARMADILLO)
# ----------------------------------------------------------------------
# Do we want to compile using VTK? It should be a must
# ----------------------------------------------------------------------
MESSAGE( STATUS "" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "** VTK'S LIBRARY INFORMATION **" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
IF (SCICELLXX_USES_VTK)
IF (SCICELLXX_AUTO_FIND_VTK_PATHS)
# Set the suggested folder where to look for VTK's library (where the
# VTKConfig.cmake) file lives
LIST(APPEND CMAKE_PREFIX_PATH ${VTK_AUTO_FIND_FOLDER})
# Try to find VTK to enable VTK wrappers
FIND_PACKAGE(VTK REQUIRED)
IF (VTK_FOUND)
MESSAGE( STATUS "FOUND VTK_INCLUDE_DIRS: " ${VTK_INCLUDE_DIRS} )
MESSAGE( STATUS "FOUND VTK_LIBRARIES: " ${VTK_LIBRARIES} )
INCLUDE_DIRECTORIES(${VTK_INCLUDE_DIRS})
ENDIF (VTK_FOUND)
ELSE (SCICELLXX_AUTO_FIND_VTK_PATHS)
MESSAGE( STATUS "USING YOUR OWN VTK'S INCLUDE AND LIB PATHS")
MESSAGE( STATUS "VTK_INCLUDE_DIRS: " ${VTK_INCLUDE_DIRS} )
MESSAGE( STATUS "VTK_LIBRARIES: " ${VTK_LIBRARIES} )
INCLUDE_DIRECTORIES(${VTK_INCLUDE_DIRS})
ENDIF (SCICELLXX_AUTO_FIND_VTK_PATHS)
ENDIF (SCICELLXX_USES_VTK)
MESSAGE( STATUS "-----------------------------------------------------------------------" )
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# Modify compilation variables
# ----------------------------------------------------------------------
IF(${SCICELLXX_BUILD_VERSION} STREQUAL DEBUG)
SET(SCICELLXX_C_FLAGS "-O0 -g -Wall -Wshadow --coverage")
SET(SCICELLXX_CXX_FLAGS "-O0 -g -Wall -Wshadow -std=c++11 --coverage")
ELSEIF(${SCICELLXX_BUILD_VERSION} STREQUAL RELEASE)
SET(SCICELLXX_C_FLAGS "-O3 -Wall -Wshadow -DNDEBUG")
SET(SCICELLXX_CXX_FLAGS "-O3 -Wall -Wshadow -DNDEBUG -std=c++11")
ELSEIF(${SCICELLXX_BUILD_VERSION} STREQUAL PROFILING)
SET(SCICELLXX_C_FLAGS "-O0 -pg -Wall -Wshadow")
SET(SCICELLXX_CXX_FLAGS "-O0 -pg -Wall -Wshadow -std=c++11")
MESSAGE( WARNING "You are compiling with profiling ENABLED, this will SIGNIFICANTLY increase execution times. If you do not want profiling to be ENABLED then choose another version when asked for library version" )
ELSE(${SCICELLXX_BUILD_VERSION} STREQUAL DEBUG)
SET(SCICELLXX_C_FLAGS "-O0 -g -Wall -Wshadow")
SET(SCICELLXX_CXX_FLAGS "-O0 -g -Wall -Wshadow -std=c++11")
ENDIF(${SCICELLXX_BUILD_VERSION} STREQUAL DEBUG)
#IF(${SCICELLXX_BUILD_VERSION} STREQUAL DEBUG)
# SET(SCICELLXX_C_FLAGS "-O0 -g -Wall -Wextra -Wshadow -Wconversion -pedantic")
# SET(SCICELLXX_CXX_FLAGS "-O0 -g -Wall -Wextra -Wshadow -Wconversion -pedantic -std=c++11")
#ELSEIF(${SCICELLXX_BUILD_VERSION} STREQUAL RELEASE)
# SET(SCICELLXX_C_FLAGS "-O3 -Wall -Wextra -Wshadow -Wconversion -pedantic -DNDEBUG")
# SET(SCICELLXX_CXX_FLAGS "-O3 -Wall -Wextra -Wshadow -Wconversion -pedantic -DNDEBUG -std=c++11")
#ELSEIF(${SCICELLXX_BUILD_VERSION} STREQUAL PROFILING)
# SET(SCICELLXX_C_FLAGS "-O0 -pg -Wall -Wshadow -Wconversion -Wextra -pedantic")
# SET(SCICELLXX_CXX_FLAGS "-O0 -pg -Wall -Wshadow -Wconversion -Wextra -pedantic -std=c++11")
# MESSAGE( WARNING "You are compiling with profiling ENABLED, this will SIGNIFICANTLY increase execution times. If you do not want profiling to be ENABLED then choose another version when asked for library version" )
#ELSE(${SCICELLXX_BUILD_VERSION} STREQUAL DEBUG)
# SET(SCICELLXX_C_FLAGS "-O0 -g -Wall -Wextra -Wshadow -Wconversion -pedantic")
# SET(SCICELLXX_CXX_FLAGS "-O0 -g -Wall -Wextra -Wshadow -Wconversion -pedantic -std=c++11")
#ENDIF(${SCICELLXX_BUILD_VERSION} STREQUAL DEBUG)
# Use this if you require to add more libraries (do not forget to
# uncomment the respective line below to set linker variables)
#SET(SCICELLXX_LINKER_FLAGS "-lmath")
# ----------------------------------------------------------------------
# Append extra definitions based on configuration files
# ----------------------------------------------------------------------
SET(SCICELLXX_RANGE_CHECK_DEFINITION "-DSCICELLXX_RANGE_CHECK")
IF (SCICELLXX_RANGE_CHECK)
SET(SCICELLXX_CXX_FLAGS "${SCICELLXX_CXX_FLAGS} ${SCICELLXX_RANGE_CHECK_DEFINITION}" )
ENDIF (SCICELLXX_RANGE_CHECK)
SET(SCICELLXX_USES_DOUBLE_PRECISION_DEFINITION "-DTYPEDEF_REAL_IS_DOUBLE")
IF (SCICELLXX_USES_DOUBLE_PRECISION)
SET(SCICELLXX_CXX_FLAGS "${SCICELLXX_CXX_FLAGS} ${SCICELLXX_USES_DOUBLE_PRECISION_DEFINITION}" )
ENDIF (SCICELLXX_USES_DOUBLE_PRECISION)
SET(SCICELLXX_ARMADILLO_DEFINE "-DSCICELLXX_USES_ARMADILLO")
IF (SCICELLXX_USES_ARMADILLO)
SET(SCICELLXX_CXX_FLAGS "${SCICELLXX_CXX_FLAGS} ${SCICELLXX_ARMADILLO_DEFINE}" )
ENDIF (SCICELLXX_USES_ARMADILLO)
SET(SCICELLXX_VTK_DEFINE "-DSCICELLXX_USES_VTK")
IF (SCICELLXX_USES_VTK)
SET(SCICELLXX_CXX_FLAGS "${SCICELLXX_CXX_FLAGS} ${SCICELLXX_VTK_DEFINE}" )
ENDIF (SCICELLXX_USES_VTK)
SET(SCICELLXX_PANIC_MODE_DEFINE "-DSCICELLXX_PANIC_MODE")
IF (SCICELLXX_PANIC_MODE)
SET(SCICELLXX_CXX_FLAGS "${SCICELLXX_CXX_FLAGS} ${SCICELLXX_PANIC_MODE_DEFINE}" )
ENDIF (SCICELLXX_PANIC_MODE)
# ----------------------------------------------------------------------
# Set modified compilation variables
# ----------------------------------------------------------------------
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SCICELLXX_C_FLAGS}" )
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SCICELLXX_CXX_FLAGS}" )
# Uncomment this line if you added extra libraries
#SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )
# ----------------------------------------------------------------------
# Include testing (this function already calls enable_testing())
# ----------------------------------------------------------------------
INCLUDE(CTest)
# ----------------------------------------------------------------------
# Output configuration
# ----------------------------------------------------------------------
MESSAGE( STATUS "" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "** GENERAL COMPILATION FLAGS **" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
# Output compilers versions
MESSAGE( STATUS "CMAKE_C_COMPILER: " ${CMAKE_C_COMPILER} )
MESSAGE( STATUS "CMAKE_CXX_COMPILER: " ${CMAKE_CXX_COMPILER} )
# Output configuration flags
# The flags passed to the C-compiler
MESSAGE( STATUS "CMAKE_C_FLAGS: " ${CMAKE_C_FLAGS} )
# The flags passed to the C++ compiler
MESSAGE( STATUS "CMAKE_CXX_FLAGS: " ${CMAKE_CXX_FLAGS} )
MESSAGE( STATUS "CMAKE_EXE_LINKER_FLAGS: " ${CMAKE_EXE_LINKER_FLAGS} )
# Output some extra info.
MESSAGE( STATUS "CMAKE_VERBOSE_MAKEFILE: " ${CMAKE_VERBOSE_MAKEFILE} )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
# The VARIABLE holding the names of the external libraries
SET(LIB_external_src_lib 0)
# Add external source files sub-directories
ADD_SUBDIRECTORY(external_src)
# The VARIABLE holding the names of the src libraries
SET(LIB_src_lib 0)
# Add sub-directories with source files
ADD_SUBDIRECTORY(src)
# Create a VARIABLE to store all scicellxx libraries and dependencies
SET(LIB_scicellxx_lib ${LIB_src_lib} ${LIB_external_src_lib})
# Check whether scicellxx is using Armadillo
IF (SCICELLXX_USES_ARMADILLO)
LIST(APPEND LIB_scicellxx_lib ${ARMADILLO_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
ENDIF (SCICELLXX_USES_ARMADILLO)
# Check whether scicellxx is using VTK
IF (SCICELLXX_USES_VTK)
LIST(APPEND LIB_scicellxx_lib ${VTK_LIBRARIES})
ENDIF (SCICELLXX_USES_VTK)
# Add private folders (note that any source code in here is not
# compiled but only added to the make list)
ADD_SUBDIRECTORY(private)
# Once all source code has been compiled add sub-directories for demos
ADD_SUBDIRECTORY(demos)
MESSAGE( STATUS "" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "-----------------------------------------------------------------------" )
MESSAGE( STATUS "" )