1
-
2
- # This is an internal function and should not be used
3
- # Usage:
1
+ # This is an internal function and should not be used Usage:
4
2
# make_target_impl(target compile_flags sources requirements is_library SHARED)
5
3
#
4
+ # cmake-format: off
6
5
# Example:
7
6
# make_target_impl(fileio "-fPIC"
8
7
# "asyncurl.cpp;sysutils.cpp"
11
10
#
12
11
# This generates a target library/binary with the given name. The optional
13
12
# compile_flags are appended to the target compile flags. "-fPIC" is ALWAYS
14
- # added for libraries. "sources" is a list listing all the library/binary
15
- # source files. "requirements" is a list listing all the libraries, and
16
- # builtins this target depends on. IS_LIBRARY must be "TRUE" or "FALSE"
13
+ # added for libraries. "sources" is a list listing all the library/binary source
14
+ # files. "requirements" is a list listing all the libraries, and builtins this
15
+ # target depends on. IS_LIBRARY must be "TRUE" or "FALSE"
17
16
#
18
17
# if DYNAMIC is true, a dynamic library is built.
19
18
#
20
- # Boost, pthread is always added as a default dependency.
21
- # when possible.
22
- macro (make_target_impl NAME FLAGS REQUIREMENTS IS_LIBRARY SHARED SHARED_ALL_DEFINED OBJECT)
19
+ # Boost, pthread is always added as a default dependency. when possible.
20
+ # cmake-format: on
21
+
22
+ macro (
23
+ make_target_impl
24
+ NAME
25
+ FLAGS
26
+ REQUIREMENTS
27
+ IS_LIBRARY
28
+ SHARED
29
+ SHARED_ALL_DEFINED
30
+ OBJECT)
23
31
# create the target
24
- if (${IS_LIBRARY} )
32
+ if (${IS_LIBRARY} )
25
33
message (STATUS "Adding Library: ${NAME} " )
26
34
else ()
27
35
message (STATUS "Adding Executable: ${NAME} " )
@@ -33,46 +41,56 @@ macro(make_target_impl NAME FLAGS REQUIREMENTS IS_LIBRARY SHARED SHARED_ALL_DEFI
33
41
34
42
# add a custom property to the target listing its dependencies
35
43
if (NOT ${FLAGS} STREQUAL "" )
36
- set_property (TARGET ${NAME} APPEND_STRING PROPERTY COMPILE_FLAGS " ${FLAGS} " )
44
+ set_property (TARGET ${NAME} APPEND_STRING PROPERTY COMPILE_FLAGS
45
+ " ${FLAGS} " )
37
46
endif ()
38
- if (${IS_LIBRARY} )
39
- if (NOT WIN32 )
40
- #windows is always fPIC
47
+ if (${IS_LIBRARY} )
48
+ if (NOT WIN32 )
49
+ # windows is always fPIC
41
50
set_property (TARGET ${NAME} APPEND_STRING PROPERTY COMPILE_FLAGS " -fPIC" )
42
51
endif ()
43
- if (APPLE )
44
- if (${SHARED} )
45
- if (NOT ${SHARED_ALL_DEFINED} )
46
- set_property (TARGET ${NAME} APPEND_STRING PROPERTY LINK_FLAGS " -undefined dynamic_lookup" )
52
+ if (APPLE )
53
+ if (${SHARED} )
54
+ if (NOT ${SHARED_ALL_DEFINED} )
55
+ set_property (TARGET ${NAME} APPEND_STRING
56
+ PROPERTY LINK_FLAGS " -undefined dynamic_lookup" )
47
57
endif ()
48
58
endif ()
49
59
endif ()
50
60
endif ()
51
61
52
- if (${IS_LIBRARY} )
62
+ if (${IS_LIBRARY} )
53
63
if (${SHARED} )
54
64
target_link_libraries (${NAME} PRIVATE ${REQUIREMENTS} )
55
65
elseif (${OBJECT} )
56
66
# TODO we can link the requirements from here when target_link_libraries
57
- # works with OBJECT library targets (requires CMake 3.12)
58
- # See https://gitlab.kitware.com/cmake/cmake/issues/14778
59
- # For now, do nothing.
67
+ # works with OBJECT library targets (requires CMake 3.12) See
68
+ # https://gitlab.kitware.com/cmake/cmake/issues/14778 For now, do nothing.
60
69
else ()
61
70
target_link_libraries (${NAME} PUBLIC ${REQUIREMENTS} )
62
71
endif ()
63
72
else ()
64
73
target_link_libraries (${NAME} PUBLIC ${REQUIREMENTS} )
65
74
endif ()
66
-
67
- # Ensure dependencies are tracked in order to make sure compilation order matters.
68
- add_dependencies (${NAME} "${REQUIREMENTS} " )
69
-
75
+
76
+ # Ensure dependencies are tracked in order to make sure compilation order
77
+ # matters.
78
+ if (REQUIREMENTS)
79
+ add_dependencies (${NAME} ${REQUIREMENTS} )
80
+ endif ()
81
+
70
82
# make sure dependencies are always built first
71
- add_dependencies ( ${NAME} " ${_TC_EXTERNAL_DEPENDENCIES} " )
72
- add_dependencies (${NAME} external_dependencies )
73
- endmacro ()
83
+ if (TC_EXTERNAL_DEPENDENCIES )
84
+ add_dependencies (${NAME} ${TC_EXTERNAL_DEPENDENCIES} )
85
+ endif ()
74
86
87
+ if (external_dependencies)
88
+ add_dependencies (${NAME} external_dependencies)
89
+ endif ()
90
+
91
+ endmacro ()
75
92
93
+ # cmake-format: off
76
94
# This is an external function
77
95
# Usage:
78
96
# make_library(NAME target
@@ -116,15 +134,24 @@ endmacro()
116
134
#
117
135
# Boost, pthread is always added as a default dependency.
118
136
# when possible.
137
+ # cmake-format: on
138
+
119
139
macro (make_library NAME )
120
140
set (options SHARED EXTERNAL_VISIBILITY SHARED_ALL_DEFINED DEAD_STRIP OBJECT)
121
- set (one_value_args COMPILE_FLAGS OUTPUT_NAME EXPORT_LINUX_MAP_FILE EXPORT_OSX_MAP_FILE)
141
+ set (one_value_args COMPILE_FLAGS OUTPUT_NAME EXPORT_LINUX_MAP_FILE
142
+ EXPORT_OSX_MAP_FILE)
122
143
set (multi_value_args
123
- SOURCES REQUIRES MAC_REQUIRES LINUX_REQUIRES
124
- COMPILE_FLAGS_EXTRA COMPILE_FLAGS_EXTRA_CLANG COMPILE_FLAGS_EXTRA_GCC)
125
- CMAKE_PARSE_ARGUMENTS (make_library "${options} " "${one_value_args} " "${multi_value_args} " ${ARGN} )
144
+ SOURCES
145
+ REQUIRES
146
+ MAC_REQUIRES
147
+ LINUX_REQUIRES
148
+ COMPILE_FLAGS_EXTRA
149
+ COMPILE_FLAGS_EXTRA_CLANG
150
+ COMPILE_FLAGS_EXTRA_GCC)
151
+ cmake_parse_arguments (make_library "${options} " "${one_value_args} "
152
+ "${multi_value_args} " ${ARGN} )
126
153
if (NOT make_library_SOURCES)
127
- MESSAGE (FATAL_ERROR "make_library call with no sources" )
154
+ message (FATAL_ERROR "make_library call with no sources" )
128
155
endif ()
129
156
130
157
if (TC_DISABLE_OBJECT_BUILDS)
@@ -143,91 +170,113 @@ macro(make_library NAME)
143
170
endforeach ()
144
171
endif ()
145
172
146
- if (APPLE )
147
- if (make_library_MAC_REQUIRES)
148
- set (make_library_REQUIRES ${make_library_REQUIRES} ${make_library_MAC_REQUIRES} )
173
+ if (APPLE )
174
+ if (make_library_MAC_REQUIRES)
175
+ set (make_library_REQUIRES ${make_library_REQUIRES}
176
+ ${make_library_MAC_REQUIRES} )
149
177
endif ()
150
178
else ()
151
- if (make_library_LINUX_REQUIRES)
152
- set (make_library_REQUIRES ${make_library_REQUIRES} ${make_library_LINUX_REQUIRES} )
179
+ if (make_library_LINUX_REQUIRES)
180
+ set (make_library_REQUIRES ${make_library_REQUIRES}
181
+ ${make_library_LINUX_REQUIRES} )
153
182
endif ()
154
183
endif ()
155
184
156
- if (${make_library_SHARED} )
185
+ if (${make_library_SHARED} )
157
186
add_library (${NAME} SHARED ${make_library_SOURCES} )
158
187
elseif (${make_library_OBJECT} )
159
188
add_library (${NAME} OBJECT ${make_library_SOURCES} )
160
189
else ()
161
190
add_library (${NAME} STATIC ${make_library_SOURCES} )
162
191
endif ()
163
192
164
- make_target_impl("${NAME} " "${make_library_COMPILE_FLAGS} "
165
- "${make_library_REQUIRES} " TRUE "${make_library_SHARED} " "${make_library_SHARED_ALL_DEFINED} " "${make_library_OBJECT} " )
193
+ make_target_impl(
194
+ "${NAME} "
195
+ "${make_library_COMPILE_FLAGS} "
196
+ "${make_library_REQUIRES} "
197
+ TRUE
198
+ "${make_library_SHARED} "
199
+ "${make_library_SHARED_ALL_DEFINED} "
200
+ "${make_library_OBJECT} " )
166
201
167
- if (make_library_OUTPUT_NAME )
168
- message (STATUS "make_library ${NAME} ===> ${make_library_OUTPUT_NAME} " )
169
- set_target_properties (${NAME} PROPERTIES OUTPUT_NAME ${make_library_OUTPUT_NAME} )
202
+ if (make_library_OUTPUT_NAME )
203
+ message (STATUS "make_library ${NAME} ===> ${make_library_OUTPUT_NAME} " )
204
+ set_target_properties (${NAME} PROPERTIES OUTPUT_NAME
205
+ ${make_library_OUTPUT_NAME} )
170
206
endif ()
171
207
172
- if (make_library_COMPILE_FLAGS_EXTRA)
208
+ if (make_library_COMPILE_FLAGS_EXTRA)
173
209
target_compile_options (${NAME} PRIVATE ${make_library_COMPILE_FLAGS_EXTRA} )
174
210
endif ()
175
211
176
- if (CLANG)
177
- if (make_library_COMPILE_FLAGS_EXTRA_CLANG)
178
- target_compile_options (${NAME} PRIVATE ${make_library_COMPILE_FLAGS_EXTRA_CLANG} )
212
+ if (CLANG)
213
+ if (make_library_COMPILE_FLAGS_EXTRA_CLANG)
214
+ target_compile_options (${NAME}
215
+ PRIVATE ${make_library_COMPILE_FLAGS_EXTRA_CLANG} )
179
216
endif ()
180
217
endif ()
181
218
182
- if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "GNU" )
183
- if (make_library_COMPILE_FLAGS_EXTRA_GCC)
184
- target_compile_options (${NAME} PRIVATE ${make_library_COMPILE_FLAGS_EXTRA_GCC} )
219
+ if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "GNU" )
220
+ if (make_library_COMPILE_FLAGS_EXTRA_GCC)
221
+ target_compile_options (${NAME}
222
+ PRIVATE ${make_library_COMPILE_FLAGS_EXTRA_GCC} )
185
223
endif ()
186
224
endif ()
187
225
188
- if (${make_library_EXTERNAL_VISIBILITY} OR ${make_library_OBJECT} )
226
+ if (${make_library_EXTERNAL_VISIBILITY} OR ${make_library_OBJECT} )
189
227
# do nothing
190
228
message (STATUS "External Visibility: " ${NAME} )
191
229
target_compile_options (${NAME} PRIVATE "-fvisibility=default" )
192
- target_compile_options (${NAME} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fvisibility-inlines-hidden>)
230
+ target_compile_options (
231
+ ${NAME} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fvisibility-inlines-hidden>)
193
232
else ()
194
233
target_compile_options (${NAME} PRIVATE "-fvisibility=hidden" )
195
- target_compile_options (${NAME} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fvisibility-inlines-hidden>)
234
+ target_compile_options (
235
+ ${NAME} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fvisibility-inlines-hidden>)
196
236
endif ()
197
237
198
238
if (NOT CLANG)
199
- if (NOT WIN32 )
200
- # set_property(TARGET ${NAME} APPEND_STRING PROPERTY LINK_FLAGS " -static-libstdc++ ")
239
+ if (NOT WIN32 )
240
+ # set_property(TARGET ${NAME} APPEND_STRING PROPERTY LINK_FLAGS " -static-
241
+ # libstdc++ ")
201
242
endif ()
202
243
endif ()
203
244
204
245
if (APPLE )
205
- if (make_library_EXPORT_OSX_MAP_FILE)
206
- set_property (TARGET ${NAME} APPEND PROPERTY LINK_DEPENDS "${make_library_EXPORT_OSX_MAP_FILE} " )
207
- set_property (TARGET ${NAME} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-exported_symbols_list,${make_library_EXPORT_OSX_MAP_FILE} " )
208
- endif ()
246
+ if (make_library_EXPORT_OSX_MAP_FILE)
247
+ set_property (TARGET ${NAME} APPEND
248
+ PROPERTY LINK_DEPENDS "${make_library_EXPORT_OSX_MAP_FILE} " )
249
+ set_property (
250
+ TARGET ${NAME} APPEND_STRING
251
+ PROPERTY
252
+ LINK_FLAGS
253
+ " -Wl,-exported_symbols_list,${make_library_EXPORT_OSX_MAP_FILE} " )
254
+ endif ()
209
255
210
- if (make_library_DEAD_STRIP)
211
- set_property (TARGET ${NAME} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-dead_strip" )
212
- endif ()
256
+ if (make_library_DEAD_STRIP)
257
+ set_property (TARGET ${NAME} APPEND_STRING PROPERTY LINK_FLAGS
258
+ " -Wl,-dead_strip" )
259
+ endif ()
213
260
214
- else ()
215
- if (make_library_EXPORT_LINUX_MAP_FILE)
216
- set_property (TARGET ${NAME} APPEND PROPERTY LINK_DEPENDS "${make_library_EXPORT_LINUX_MAP_FILE} " )
217
- set_property (TARGET ${NAME} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--version-script=${make_library_EXPORT_LINUX_MAP_FILE} " )
261
+ else ()
262
+ if (make_library_EXPORT_LINUX_MAP_FILE)
263
+ set_property (
264
+ TARGET ${NAME} APPEND PROPERTY LINK_DEPENDS
265
+ "${make_library_EXPORT_LINUX_MAP_FILE} " )
266
+ set_property (
267
+ TARGET ${NAME} APPEND_STRING
268
+ PROPERTY LINK_FLAGS
269
+ " -Wl,--version-script=${make_library_EXPORT_LINUX_MAP_FILE} " )
270
+ endif ()
218
271
endif ()
219
- endif ()
220
272
221
273
endmacro ()
222
274
223
- # Creates an empty library to use as a dependency placeholder.
224
- #
225
- # Usage:
226
- # make_empty_library(NAME)
227
- #
275
+ # Creates an empty library to use as a dependency placeholder.
276
+ #
277
+ # Usage: make_empty_library(NAME)
228
278
#
229
279
# will automatically include all recursive dependencies.
230
280
macro (make_empty_library NAME )
231
281
add_library (${NAME} INTERFACE )
232
282
endmacro ()
233
-
0 commit comments