-
-
Notifications
You must be signed in to change notification settings - Fork 988
/
Copy pathOgreConfigTargets.cmake
385 lines (347 loc) · 14.3 KB
/
OgreConfigTargets.cmake
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
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
#-------------------------------------------------------------------
# This file is part of the CMake build system for OGRE
# (Object-oriented Graphics Rendering Engine)
# For the latest info, see http://www.ogre3d.org/
#
# The contents of this file are placed in the public domain. Feel
# free to make use of it in any way you like.
#-------------------------------------------------------------------
# Configure settings and install targets
if(APPLE)
macro(set_xcode_property targ xc_prop_name xc_prop_val)
set_property( TARGET ${targ} PROPERTY XCODE_ATTRIBUTE_${xc_prop_name} ${xc_prop_val} )
endmacro(set_xcode_property)
if(NOT OGRE_BUILD_PLATFORM_ANDROID AND NOT APPLE_IOS)
set(PLATFORM_NAME "macosx")
elseif(APPLE_IOS)
set(PLATFORM_NAME "$(PLATFORM_NAME)")
endif()
endif()
# Default build output paths
if (NOT OGRE_ARCHIVE_OUTPUT)
if(APPLE AND NOT OGRE_BUILD_PLATFORM_ANDROID)
set(OGRE_ARCHIVE_OUTPUT ${PROJECT_BINARY_DIR}/lib/${PLATFORM_NAME})
else()
set(OGRE_ARCHIVE_OUTPUT ${PROJECT_BINARY_DIR}/lib)
endif()
endif ()
if (NOT OGRE_LIBRARY_OUTPUT)
if(APPLE AND NOT OGRE_BUILD_PLATFORM_ANDROID)
set(OGRE_LIBRARY_OUTPUT ${PROJECT_BINARY_DIR}/lib/${PLATFORM_NAME})
else()
set(OGRE_LIBRARY_OUTPUT ${PROJECT_BINARY_DIR}/lib)
endif()
endif ()
if (NOT OGRE_RUNTIME_OUTPUT)
set(OGRE_RUNTIME_OUTPUT ${PROJECT_BINARY_DIR}/bin)
endif ()
if (WIN32)
set(OGRE_RELEASE_PATH "")
set(OGRE_RELWDBG_PATH "")
set(OGRE_DEBUG_PATH "")
set(OGRE_LIB_RELEASE_PATH "")
set(OGRE_LIB_RELWDBG_PATH "")
set(OGRE_LIB_DEBUG_PATH "")
elseif (UNIX)
set(OGRE_RELEASE_PATH "")
set(OGRE_RELWDBG_PATH "")
set(OGRE_DEBUG_PATH "/debug")
if (NOT APPLE)
set(OGRE_DEBUG_PATH "")
endif ()
set(OGRE_LIB_RELEASE_PATH "")
set(OGRE_LIB_RELWDBG_PATH "")
set(OGRE_LIB_DEBUG_PATH "")
if(APPLE AND NOT APPLE_IOS)
set(OGRE_RELEASE_PATH "/${PLATFORM_NAME}")
endif()
if(APPLE AND APPLE_IOS)
set(OGRE_LIB_RELEASE_PATH "/Release")
endif(APPLE AND APPLE_IOS)
endif ()
set(OGRE_SAMPLE_PATH "/OGRE/Samples")
# install targets according to current build type
function(ogre_install_target TARGETNAME SUFFIX EXPORT)
if(EXPORT)
install(TARGETS ${TARGETNAME} EXPORT OgreTargetsRelease
CONFIGURATIONS Release MinSizeRel None ""
BUNDLE DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_RELEASE_PATH}"
RUNTIME DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_RELEASE_PATH}"
LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELEASE_PATH}${SUFFIX}"
ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELEASE_PATH}${SUFFIX}"
FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_RELEASE_PATH}/Release")
install(TARGETS ${TARGETNAME} EXPORT OgreTargetsRelWithDebInfo
CONFIGURATIONS RelWithDebInfo
BUNDLE DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_RELWDBG_PATH}"
RUNTIME DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_RELWDBG_PATH}"
LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}${SUFFIX}"
ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}${SUFFIX}"
FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_RELWDBG_PATH}/RelWithDebInfo")
install(TARGETS ${TARGETNAME} EXPORT OgreTargetsDebug
CONFIGURATIONS Debug
BUNDLE DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_DEBUG_PATH}"
RUNTIME DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_DEBUG_PATH}"
LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}${SUFFIX}"
ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}${SUFFIX}"
FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_DEBUG_PATH}/Debug")
else()
install(TARGETS ${TARGETNAME}
CONFIGURATIONS Release None ""
BUNDLE DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_RELEASE_PATH}"
RUNTIME DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_RELEASE_PATH}"
LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELEASE_PATH}${SUFFIX}"
ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELEASE_PATH}${SUFFIX}"
FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_RELEASE_PATH}/Release")
install(TARGETS ${TARGETNAME}
CONFIGURATIONS RelWithDebInfo
BUNDLE DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_RELWDBG_PATH}"
RUNTIME DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_RELWDBG_PATH}"
LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}${SUFFIX}"
ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}${SUFFIX}"
FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_RELWDBG_PATH}/RelWithDebInfo")
install(TARGETS ${TARGETNAME}
CONFIGURATIONS Debug
BUNDLE DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_DEBUG_PATH}"
RUNTIME DESTINATION "${OGRE_BIN_DIRECTORY}${OGRE_DEBUG_PATH}"
LIBRARY DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}${SUFFIX}"
ARCHIVE DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}${SUFFIX}"
FRAMEWORK DESTINATION "${OGRE_LIB_DIRECTORY}${OGRE_DEBUG_PATH}/Debug")
endif()
endfunction(ogre_install_target)
function(ogre_install_plugin TARGETNAME)
if (OGRE_BUILD_LIBS_AS_FRAMEWORKS)
ogre_install_target(${TARGETNAME} "" TRUE)
else()
install(TARGETS ${TARGETNAME} EXPORT OgreTargetsRelease CONFIGURATIONS MinSizeRel Release None "" DESTINATION ${OGRE_PLUGINS_PATH})
install(TARGETS ${TARGETNAME} EXPORT OgreTargetsRelWithDebInfo CONFIGURATIONS RelWithDebInfo DESTINATION ${OGRE_PLUGINS_PATH})
install(TARGETS ${TARGETNAME} EXPORT OgreTargetsDebug CONFIGURATIONS Debug DESTINATION ${OGRE_PLUGINS_PATH})
endif()
endfunction(ogre_install_plugin)
# setup common target settings
function(ogre_config_common TARGETNAME)
set_target_properties(${TARGETNAME} PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${OGRE_ARCHIVE_OUTPUT}
LIBRARY_OUTPUT_DIRECTORY ${OGRE_LIBRARY_OUTPUT}
RUNTIME_OUTPUT_DIRECTORY ${OGRE_RUNTIME_OUTPUT}
)
if(APPLE_IOS)
set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_THUMB_SUPPORT "NO")
set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_UNROLL_LOOPS "YES")
set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer")
set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES")
set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf$<$<NOT:$<CONFIG:Debug>>:-with-dsym>")
endif(APPLE_IOS)
if(NOT OGRE_STATIC AND (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
set_target_properties(${TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO")
endif()
endfunction(ogre_config_common)
# checks whether the target LIBNAME produces a pdb file
function(ogre_produces_pdb VARNAME LIBNAME)
get_target_property(TYPE ${LIBNAME} TYPE)
if (TYPE STREQUAL "SHARED_LIBRARY" OR TYPE STREQUAL "MODULE_LIBRARY" OR TYPE STREQUAL "EXECUTABLE")
set(${VARNAME} ON PARENT_SCOPE)
else ()
set(${VARNAME} OFF PARENT_SCOPE)
endif ()
endfunction(ogre_produces_pdb)
# setup library build
function(ogre_config_lib LIBNAME EXPORT)
ogre_config_common(${LIBNAME})
if (OGRE_STATIC)
# add static prefix, if compiling static version
set_target_properties(${LIBNAME} PROPERTIES OUTPUT_NAME ${LIBNAME}Static)
else (OGRE_STATIC)
if (MINGW)
# remove lib prefix from DLL outputs
set_target_properties(${LIBNAME} PROPERTIES PREFIX "")
endif ()
endif (OGRE_STATIC)
ogre_install_target(${LIBNAME} "" ${EXPORT})
if (OGRE_INSTALL_PDB)
# install debug pdb files
if (OGRE_STATIC)
install(FILES ${PROJECT_BINARY_DIR}/lib${OGRE_LIB_DEBUG_PATH}/${LIBNAME}Static_d.pdb
DESTINATION ${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}
CONFIGURATIONS Debug
)
install(FILES ${PROJECT_BINARY_DIR}/lib${OGRE_LIB_RELWDBG_PATH}/${LIBNAME}Static.pdb
DESTINATION ${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}
CONFIGURATIONS RelWithDebInfo
)
else ()
ogre_produces_pdb(PRODUCES_PDB ${LIBNAME})
if (PRODUCES_PDB)
install(FILES $<TARGET_PDB_FILE:${LIBNAME}>
DESTINATION bin${OGRE_DEBUG_PATH}
CONFIGURATIONS Debug
)
install(FILES $<TARGET_PDB_FILE:${LIBNAME}>
DESTINATION bin${OGRE_RELWDBG_PATH}
CONFIGURATIONS RelWithDebInfo
)
endif ()
endif ()
endif ()
endfunction(ogre_config_lib)
function(ogre_config_component LIBNAME)
ogre_config_lib(${LIBNAME} TRUE)
if (OGRE_PROJECT_FOLDERS)
set_property(TARGET ${LIBNAME} PROPERTY FOLDER Components)
endif ()
endfunction(ogre_config_component)
function(ogre_config_framework LIBNAME)
if (OGRE_BUILD_LIBS_AS_FRAMEWORKS)
set_target_properties(${LIBNAME} PROPERTIES FRAMEWORK TRUE)
# Set the INSTALL_PATH so that frameworks can be installed in the application package
set_target_properties(${LIBNAME}
PROPERTIES BUILD_WITH_INSTALL_RPATH 1
INSTALL_NAME_DIR "@rpath"
)
set_target_properties(${LIBNAME} PROPERTIES PUBLIC_HEADER "${HEADER_FILES};${PLATFORM_HEADERS};" )
set_target_properties(${LIBNAME} PROPERTIES RESOURCE "${RESOURCE_FILES}")
set_source_files_properties("${RESOURCE_FILES}" PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
set_target_properties(${LIBNAME} PROPERTIES OUTPUT_NAME ${LIBNAME})
endif()
endfunction(ogre_config_framework)
# setup plugin build
function(ogre_config_plugin PLUGINNAME)
ogre_config_common(${PLUGINNAME})
if (OGRE_PROJECT_FOLDERS)
set_property(TARGET ${LIBNAME} PROPERTY FOLDER Plugins)
endif ()
set_target_properties(${PLUGINNAME} PROPERTIES VERSION ${OGRE_SOVERSION})
if (OGRE_STATIC)
# add static prefix, if compiling static version
set_target_properties(${PLUGINNAME} PROPERTIES OUTPUT_NAME ${PLUGINNAME}Static)
if(APPLE_IOS)
set_target_properties(${PLUGINNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_THUMB_SUPPORT "NO")
set_target_properties(${PLUGINNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_UNROLL_LOOPS "YES")
set_target_properties(${PLUGINNAME} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES")
endif(APPLE_IOS)
else (OGRE_STATIC)
if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# disable "lib" prefix on Unix
set_target_properties(${PLUGINNAME} PROPERTIES PREFIX "")
endif (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
endif (OGRE_STATIC)
ogre_install_plugin(${PLUGINNAME})
if (OGRE_INSTALL_PDB)
# install debug pdb files
if (OGRE_STATIC)
install(FILES ${PROJECT_BINARY_DIR}/lib${OGRE_LIB_DEBUG_PATH}/${PLUGINNAME}Static_d.pdb
DESTINATION ${OGRE_LIB_DIRECTORY}${OGRE_LIB_DEBUG_PATH}/opt
CONFIGURATIONS Debug
)
install(FILES ${PROJECT_BINARY_DIR}/lib${OGRE_LIB_RELWDBG_PATH}/${PLUGINNAME}Static.pdb
DESTINATION ${OGRE_LIB_DIRECTORY}${OGRE_LIB_RELWDBG_PATH}/opt
CONFIGURATIONS RelWithDebInfo
)
else ()
ogre_produces_pdb(PRODUCES_PDB ${PLUGINNAME})
if(PRODUCES_PDB)
install(FILES $<TARGET_PDB_FILE:${PLUGINNAME}>
DESTINATION bin${OGRE_DEBUG_PATH}
CONFIGURATIONS Debug
)
install(FILES $<TARGET_PDB_FILE:${PLUGINNAME}>
DESTINATION bin${OGRE_RELWDBG_PATH}
CONFIGURATIONS RelWithDebInfo
)
endif ()
endif ()
endif ()
endfunction(ogre_config_plugin)
# setup Ogre sample build
function(ogre_config_sample_common SAMPLENAME)
ogre_config_common(${SAMPLENAME})
if (OGRE_PROJECT_FOLDERS)
set_property(TARGET ${LIBNAME} PROPERTY FOLDER Samples)
endif ()
if (APPLE)
# On OS X, create .app bundle
set_property(TARGET ${SAMPLENAME} PROPERTY MACOSX_BUNDLE TRUE)
if (NOT APPLE_IOS)
# Add the path where the Ogre framework was found
if(${OGRE_FRAMEWORK_PATH})
set_target_properties(${SAMPLENAME} PROPERTIES
COMPILE_FLAGS "-F${OGRE_FRAMEWORK_PATH}"
LINK_FLAGS "-F${OGRE_FRAMEWORK_PATH}"
)
endif()
endif()
endif (APPLE)
if (NOT OGRE_STATIC)
if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# disable "lib" prefix on Unix
set_target_properties(${SAMPLENAME} PROPERTIES PREFIX "")
endif (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
endif()
if (NOT WIN32)
set_target_properties(${SAMPLENAME} PROPERTIES VERSION ${OGRE_SOVERSION} SOVERSION ${OGRE_SOVERSION})
endif()
if (OGRE_INSTALL_SAMPLES AND NOT OGRE_STATIC)
ogre_install_target(${SAMPLENAME} ${OGRE_SAMPLE_PATH} FALSE)
endif()
endfunction(ogre_config_sample_common)
function(ogre_config_sample_exe SAMPLENAME)
ogre_config_sample_common(${SAMPLENAME})
if (OGRE_INSTALL_PDB AND OGRE_INSTALL_SAMPLES)
# install debug pdb files - no _d on exe
install(FILES $<TARGET_PDB_FILE:${SAMPLENAME}>
DESTINATION bin${OGRE_DEBUG_PATH}
CONFIGURATIONS Debug
)
install(FILES $<TARGET_PDB_FILE:${SAMPLENAME}>
DESTINATION bin${OGRE_RELWDBG_PATH}
CONFIGURATIONS RelWithDebInfo
)
endif ()
endfunction(ogre_config_sample_exe)
function(ogre_config_sample_lib SAMPLENAME)
ogre_config_sample_common(${SAMPLENAME})
if (OGRE_INSTALL_PDB AND OGRE_INSTALL_SAMPLES)
# install debug pdb files - with a _d on lib
ogre_produces_pdb(PRODUCES_PDB ${SAMPLENAME})
if (PRODUCES_PDB)
install(FILES $<TARGET_PDB_FILE:${SAMPLENAME}>
DESTINATION bin${OGRE_DEBUG_PATH}
CONFIGURATIONS Debug
)
install(FILES $<TARGET_PDB_FILE:${SAMPLENAME}>
DESTINATION bin${OGRE_RELWDBG_PATH}
CONFIGURATIONS RelWithDebInfo
)
endif ()
endif ()
if(NOT OGRE_STATIC AND (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
# add GCC visibility flags to shared library build
set_target_properties(${SAMPLENAME} PROPERTIES COMPILE_FLAGS "${OGRE_VISIBILITY_FLAGS}")
endif()
# Add sample to the list of link targets
# Global property so that we can build this up across entire sample tree
# since vars are local to containing scope of directories / functions
get_property(OGRE_SAMPLES_LIST GLOBAL PROPERTY "OGRE_SAMPLES_LIST")
set_property (GLOBAL PROPERTY "OGRE_SAMPLES_LIST" ${OGRE_SAMPLES_LIST} ${SAMPLENAME})
endfunction(ogre_config_sample_lib)
# setup Ogre tool build
function(ogre_config_tool TOOLNAME)
ogre_config_common(${TOOLNAME})
#set _d debug postfix
if (WIN32)
set_property(TARGET ${TOOLNAME} APPEND PROPERTY DEBUG_POSTFIX "_d")
endif ()
if (OGRE_INSTALL_TOOLS)
ogre_install_target(${TOOLNAME} "" FALSE)
if (OGRE_INSTALL_PDB)
# install debug pdb files
install(FILES $<TARGET_PDB_FILE:${TOOLNAME}>
DESTINATION bin${OGRE_DEBUG_PATH}
CONFIGURATIONS Debug
)
install(FILES $<TARGET_PDB_FILE:${TOOLNAME}>
DESTINATION bin${OGRE_RELWDBG_PATH}
CONFIGURATIONS RelWithDebInfo
)
endif ()
endif ()
endfunction(ogre_config_tool)