forked from F2I-Consulting/fetpapi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
298 lines (247 loc) · 10.9 KB
/
CMakeLists.txt
File metadata and controls
298 lines (247 loc) · 10.9 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
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
cmake_minimum_required(VERSION 3.5)
project(Fetpapi)
set (LIBRARY_NAME Fetpapi)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
IF (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set (CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/install CACHE PATH "${LIBRARY_NAME} install prefix" FORCE)
ENDIF (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
# required to define CMAKE_INSTALL_BINDIR, CMAKE_INSTALL_LIBDIR and CMAKE_INSTALL_INCLUDEDIR
include(GNUInstallDirs)
# ============================================================================
# Lib type (shared/static)
# ============================================================================
set (BUILD_SHARED_LIBS ON CACHE BOOL "Build shared lib")
if (BUILD_SHARED_LIBS)
set (LIB_TYPE SHARED)
else (BUILD_SHARED_LIBS)
set (LIB_TYPE STATIC)
endif (BUILD_SHARED_LIBS)
add_library (${LIBRARY_NAME} ${LIB_TYPE} "")
if (WIN32)
if (NOT BUILD_SHARED_LIBS)
target_compile_definitions(${LIBRARY_NAME} PRIVATE FETPAPI_STATIC)
endif ()
endif (WIN32)
# ============================================================================
# some useful variables
# ============================================================================
set (WITH_FESAPI OFF CACHE BOOL "Build Fetpapi with Fesapi support.")
set (WITH_ETP_SSL OFF CACHE BOOL "Build Fesapi with ETP SSL support.")
# ============================================================================
# checking for required dependencies
# ============================================================================
find_package (Threads)
# avro DEPENDENCY
set (AVRO_INCLUDE_DIR AVRO_INCLUDE_DIR-NOTFOUND CACHE PATH "Path to the directory which contains the avro header files")
if (NOT IS_DIRECTORY ${AVRO_INCLUDE_DIR})
message(WARNING "The Avro include dir (AVRO_INCLUDE_DIR variable) does not look to be a valid directory. Please modify it.")
endif ()
set (AVRO_LIBRARY_RELEASE AVRO_LIBRARY_RELEASE-NOTFOUND CACHE FILEPATH "Path to the file which contains the avro library release")
if (NOT EXISTS ${AVRO_LIBRARY_RELEASE})
message(WARNING "The avro library (AVRO_LIBRARY_RELEASE variable) does not look to be a valid file. Please modify it.")
endif ()
set (AVRO_LIBRARY_DEBUG AVRO_LIBRARY_DEBUG-NOTFOUND CACHE FILEPATH "Path to the file which contains the AVRO library DEBUG")
if (NOT EXISTS ${AVRO_LIBRARY_DEBUG})
message(WARNING "The AVRO library (AVRO_LIBRARY_DEBUG variable) does not look to be a valid file. Please modify it.")
endif ()
if (WITH_FESAPI)
set (FESAPI_INCLUDE_DIR FESAPI_INCLUDE_DIR-NOTFOUND CACHE PATH "Path to the directory which contains the fesapi header files")
if (NOT IS_DIRECTORY ${FESAPI_INCLUDE_DIR})
message(WARNING "The Fesapi include dir (FESAPI_INCLUDE_DIR variable) does not look to be a valid directory. Please modify it.")
endif ()
set (FESAPI_LIBRARY_RELEASE FESAPI_LIBRARY_RELEASE-NOTFOUND CACHE FILEPATH "Path to the file which contains the fesapi library release")
if (NOT EXISTS ${FESAPI_LIBRARY_RELEASE})
message(WARNING "The fesapi library (FESAPI_LIBRARY_RELEASE variable) does not look to be a valid file. Please modify it.")
endif ()
set (FESAPI_LIBRARY_DEBUG FESAPI_LIBRARY_DEBUG-NOTFOUND CACHE FILEPATH "Path to the file which contains the fesapi library DEBUG")
if (NOT EXISTS ${FESAPI_LIBRARY_DEBUG})
message(WARNING "The fesapi library (FESAPI_LIBRARY_DEBUG variable) does not look to be a valid file. Please modify it.")
endif ()
endif (WITH_FESAPI)
# Boost DEPENDENCY
find_package(Boost 1.66.0 REQUIRED system)
if (WIN32 AND (Boost_VERSION_MAJOR EQUAL 1) AND (Boost_VERSION_MINOR LESS 74) AND (Boost_VERSION_MINOR GREATER 71))
message(WARNING "You may experience min/max issue with this boost version : See https://github.com/boostorg/beast/issues/1980")
endif ()
if (WIN32)
target_link_libraries (${LIBRARY_NAME} PRIVATE bcrypt.lib)
set_target_properties(${LIBRARY_NAME} PROPERTIES
#PDB_NAME ${CPP_LIBRARY_NAME}${CMAKE_DEBUG_POSTFIX}.${Fesapi_VERSION}
LINK_FLAGS "/INCREMENTAL:NO /OPT:REF"
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
#SUFFIX .${Fesapi_VERSION}.dll
#IMPORT_SUFFIX .${Fesapi_VERSION}.lib
#VERSION ${Fesapi_VERSION_MAJOR}.${Fesapi_VERSION_MINOR}
)
ELSEIF (UNIX)
set_target_properties(${LIBRARY_NAME} PROPERTIES
COMPILE_FLAGS "-fPIC"
#VERSION ${Fesapi_VERSION}
#SOVERSION ${Fesapi_VERSION_MAJOR}.${Fesapi_VERSION_MINOR}
)
endif (WIN32)
target_compile_definitions(${LIBRARY_NAME} PRIVATE BOOST_ALL_NO_LIB)
target_link_libraries (${LIBRARY_NAME} PRIVATE ${Boost_SYSTEM_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
if (WIN32)
if (EXISTS ${AVRO_LIBRARY_RELEASE} AND EXISTS ${AVRO_LIBRARY_DEBUG})
target_link_libraries (${LIBRARY_NAME} PRIVATE optimized ${AVRO_LIBRARY_RELEASE} debug ${AVRO_LIBRARY_DEBUG})
elseif (EXISTS ${AVRO_LIBRARY_RELEASE})
target_link_libraries (${LIBRARY_NAME} PRIVATE ${AVRO_LIBRARY_RELEASE})
elseif (EXISTS ${AVRO_LIBRARY_DEBUG})
target_link_libraries (${LIBRARY_NAME} PRIVATE ${AVRO_LIBRARY_DEBUG})
endif ()
else (WIN32)
target_link_libraries (${LIBRARY_NAME} PRIVATE ${AVRO_LIBRARY_RELEASE})
endif (WIN32)
if (WITH_ETP_SSL)
target_compile_definitions(${LIBRARY_NAME} PRIVATE WITH_ETP_SSL)
if (NOT TARGET OpenSSL::SSL OR NOT TARGET OpenSSL::Crypto)
find_package(OpenSSL REQUIRED)
endif()
target_link_libraries(${LIBRARY_NAME} PRIVATE OpenSSL::SSL OpenSSL::Crypto)
endif ()
if (WITH_FESAPI)
if (WIN32)
if (EXISTS ${FESAPI_LIBRARY_RELEASE} AND EXISTS ${FESAPI_LIBRARY_DEBUG})
target_link_libraries (${LIBRARY_NAME} PRIVATE optimized ${FESAPI_LIBRARY_RELEASE} debug ${FESAPI_LIBRARY_DEBUG})
elseif (EXISTS ${FESAPI_LIBRARY_RELEASE})
target_link_libraries (${LIBRARY_NAME} PRIVATE ${FESAPI_LIBRARY_RELEASE})
elseif (EXISTS ${FESAPI_LIBRARY_DEBUG})
target_link_libraries (${LIBRARY_NAME} PRIVATE ${FESAPI_LIBRARY_DEBUG})
endif ()
else (WIN32)
target_link_libraries (${LIBRARY_NAME} PRIVATE ${FESAPI_LIBRARY_RELEASE})
endif (WIN32)
endif (WITH_FESAPI)
# ============================================================================
# SWIG wrapping
# ============================================================================
set (WITH_JAVA_WRAPPING OFF CACHE BOOL "Compile the swig cpp generated file for Java wrappers.")
set (WITH_DOTNET_WRAPPING OFF CACHE BOOL "Compile the swig cpp generated file for .NET wrappers.")
set (WITH_PYTHON_WRAPPING OFF CACHE BOOL "Compile the swig cpp generated file for Python wrappers.")
if (WITH_JAVA_WRAPPING)
include(${CMAKE_SOURCE_DIR}/java/CMakeLists.txt)
endif (WITH_JAVA_WRAPPING)
if (WITH_DOTNET_WRAPPING)
include(${CMAKE_SOURCE_DIR}/cs/CMakeLists.txt)
endif (WITH_DOTNET_WRAPPING)
if (WITH_PYTHON_WRAPPING)
include(${CMAKE_SOURCE_DIR}/python/CMakeLists.txt)
endif (WITH_PYTHON_WRAPPING)
# ============================================================================
# Getting source files
# ============================================================================
# Namespaces definitions
set (FETPAPI_ETP_NS etp CACHE STRING "Namespace for etp objects")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/nsDefinitions.h ${CMAKE_CURRENT_SOURCE_DIR}/src/nsDefinitions.h) # Overwrite if different
file (GLOB FETPAPI_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/etp/*.cpp)
file (GLOB FETPAPI_PROTOCOL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/etp/ProtocolHandlers/*.cpp)
file (GLOB FETPAPI_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/etp/*.h)
file (GLOB FETPAPI_PROTOCOL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/etp/ProtocolHandlers/*.h)
file (GLOB FETPAPI_TOOLS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/tools/*.cpp)
file (GLOB FETPAPI_TOOLS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/tools/*.h)
set (ALL_SOURCES_AND_HEADERS
${ALL_SOURCES_AND_HEADERS}
${FETPAPI_SOURCES}
${FETPAPI_PROTOCOL_SOURCES}
${FETPAPI_HEADERS}
${FETPAPI_PROTOCOL_HEADERS}
${FETPAPI_TOOLS_HEADERS}
${FETPAPI_TOOLS_SOURCES}
)
if (WITH_ETP_SSL)
file (GLOB FETPAPI_SSL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/etp/ssl/*.cpp)
file (GLOB FETPAPI_SSL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/etp/ssl/*.h)
set (ALL_SOURCES_AND_HEADERS
${ALL_SOURCES_AND_HEADERS}
${FETPAPI_SSL_SOURCES}
${FETPAPI_SSL_HEADERS}
)
endif (WITH_ETP_SSL)
if (WITH_FESAPI)
file (GLOB FETPAPI_FESAPI_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/etp/fesapi/*.cpp)
file (GLOB FETPAPI_FESAPI_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/etp/fesapi/*.h)
set (ALL_SOURCES_AND_HEADERS
${ALL_SOURCES_AND_HEADERS}
${FETPAPI_FESAPI_SOURCES}
${FETPAPI_FESAPI_HEADERS}
)
target_include_directories(${LIBRARY_NAME} PRIVATE ${HDF5_C_INCLUDE_DIR} ${FESAPI_INCLUDE_DIR})
endif (WITH_FESAPI)
target_sources(${LIBRARY_NAME} PRIVATE ${ALL_SOURCES_AND_HEADERS})
target_include_directories(${LIBRARY_NAME} PRIVATE ${AVRO_INCLUDE_DIR} ${Boost_INCLUDE_DIR})
if (WITH_ETP_SSL)
target_include_directories(${LIBRARY_NAME} PRIVATE ${OPENSSL_INCLUDE_DIR})
endif ()
target_include_directories(${LIBRARY_NAME} INTERFACE
$<INSTALL_INTERFACE:include>
)
# organizing sources and headers in the Visual Studio Project
if (WIN32)
source_group ("tools" FILES ${FETPAPI_TOOLS_SOURCES} ${FETPAPI_TOOLS_HEADERS})
set (ETP_PREFIX "etp")
source_group ("${ETP_PREFIX}" FILES ${FETPAPI_SOURCES} ${FETPAPI_HEADERS})
source_group ("${ETP_PREFIX}\\ProtocolHandlers" FILES ${FETPAPI_PROTOCOL_SOURCES} ${FETPAPI_PROTOCOL_HEADERS})
if (WITH_ETP_SSL)
source_group ("${ETP_PREFIX}\\ssl" FILES ${FETPAPI_SSL_SOURCES} ${FETPAPI_SSL_HEADERS})
endif ()
if (WITH_FESAPI)
source_group ("${ETP_PREFIX}\\fesapi" FILES ${FETPAPI_FESAPI_SOURCES} ${FETPAPI_FESAPI_HEADERS})
endif (WITH_FESAPI)
endif (WIN32)
# ============================================================================
# Install Fetpapi library
# ============================================================================
install(TARGETS ${LIBRARY_NAME}
EXPORT Fetpapi-export
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(EXPORT Fetpapi-export
FILE
FetpapiTargets.cmake
NAMESPACE
Fetpapi::
DESTINATION
${CMAKE_INSTALL_LIBDIR}/cmake/Fetpapi
)
INSTALL (
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/nsDefinitions.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/fetpapi
COMPONENT fetpapi_headers
)
INSTALL (
FILES ${FETPAPI_HEADERS}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/fetpapi/etp
COMPONENT fetpapi_headers
)
INSTALL (
FILES ${FETPAPI_PROTOCOL_HEADERS}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/fetpapi/etp/ProtocolHandlers
COMPONENT fetpapi_headers
)
INSTALL (
FILES ${FETPAPI_TOOLS_HEADERS}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/fetpapi/tools
COMPONENT fetpapi_headers
)
if (WITH_ETP_SSL)
INSTALL (
FILES ${FETPAPI_SSL_HEADERS}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/fetpapi/etp/ssl
COMPONENT fetpapi_headers
)
endif (WITH_ETP_SSL)
if (WITH_FESAPI)
INSTALL (
FILES ${FETPAPI_FESAPI_HEADERS}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/fetpapi/etp/fesapi
COMPONENT fetpapi_headers
)
endif (WITH_FESAPI)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FetpapiConfig.cmake
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Fetpapi")