-
Notifications
You must be signed in to change notification settings - Fork 104
/
CMakeLists.txt
217 lines (198 loc) · 8.45 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
#
# This file is part of Corrade.
#
# Copyright © 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,
# 2017, 2018, 2019 Vladimír Vondruš <mosra@centrum.cz>
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
#
if(WITH_UTILITY)
set(CorradeUtility_SRCS
Debug.cpp
Directory.cpp
Configuration.cpp
ConfigurationValue.cpp
MurmurHash2.cpp
Sha1.cpp
System.cpp)
set(CorradeUtility_GracefulAssert_SRCS
Arguments.cpp
ConfigurationGroup.cpp
Format.cpp
Resource.cpp
String.cpp
Unicode.cpp)
set(CorradeUtility_HEADERS
Arguments.h
AbstractHash.h
Assert.h
Configuration.h
ConfigurationGroup.h
ConfigurationValue.h
Debug.h
Directory.h
Endianness.h
Format.h
Macros.h
MurmurHash2.h
Resource.h
Sha1.h
String.h
StlForwardArray.h
StlForwardString.h
StlForwardTuple.h
StlForwardVector.h
StlMath.h
System.h
TypeTraits.h
Unicode.h
utilities.h
Utility.h
VisibilityMacros.h
visibility.h)
set(CorradeUtility_PRIVATE_HEADERS )
# Unix-specific / non-RT-Windows-specific functionality. Also Emscripten.
if(CORRADE_TARGET_UNIX OR (CORRADE_TARGET_WINDOWS AND NOT CORRADE_TARGET_WINDOWS_RT) OR CORRADE_TARGET_EMSCRIPTEN)
list(APPEND CorradeUtility_SRCS
FileWatcher.cpp
Tweakable.cpp
TweakableParser.cpp)
list(APPEND CorradeUtility_HEADERS
FileWatcher.h
Tweakable.h
TweakableParser.h)
list(APPEND CorradeUtility_PRIVATE_HEADERS
Implementation/tweakable.h)
endif()
# Android-specific functionality
if(CORRADE_TARGET_ANDROID)
list(APPEND CorradeUtility_SRCS AndroidLogStreamBuffer.cpp)
list(APPEND CorradeUtility_HEADERS AndroidLogStreamBuffer.h)
if(CORRADE_BUILD_DEPRECATED)
list(APPEND CorradeUtility_HEADERS AndroidStreamBuffer.h)
endif()
endif()
# Objects shared between main and test library
add_library(CorradeUtilityObjects OBJECT
${CorradeUtility_SRCS}
${CorradeUtility_HEADERS}
${CorradeUtility_PRIVATE_HEADERS})
target_include_directories(CorradeUtilityObjects PUBLIC $<TARGET_PROPERTY:CorradeUtility,INTERFACE_INCLUDE_DIRECTORIES>)
if(NOT BUILD_STATIC)
target_compile_definitions(CorradeUtilityObjects PRIVATE "-DCorradeUtilityObjects_EXPORTS")
endif()
if(NOT BUILD_STATIC OR BUILD_STATIC_PIC)
set_target_properties(CorradeUtilityObjects PROPERTIES POSITION_INDEPENDENT_CODE ON)
endif()
set_target_properties(CorradeUtilityObjects PROPERTIES FOLDER "Corrade/Utility")
# Main Utility library
add_library(CorradeUtility ${SHARED_OR_STATIC}
$<TARGET_OBJECTS:CorradeUtilityObjects>
${CorradeUtility_GracefulAssert_SRCS})
target_include_directories(CorradeUtility PUBLIC
${PROJECT_SOURCE_DIR}/src
${PROJECT_BINARY_DIR}/src)
# Require (at least) C++11 for users
set_property(TARGET CorradeUtility PROPERTY
INTERFACE_CORRADE_CXX_STANDARD 11)
set_property(TARGET CorradeUtility APPEND PROPERTY
COMPATIBLE_INTERFACE_NUMBER_MAX CORRADE_CXX_STANDARD)
set_target_properties(CorradeUtility PROPERTIES
DEBUG_POSTFIX "-d"
FOLDER "Corrade/Utility")
if(NOT BUILD_STATIC)
set_target_properties(CorradeUtility PROPERTIES VERSION ${CORRADE_LIBRARY_VERSION} SOVERSION ${CORRADE_LIBRARY_SOVERSION})
elseif(BUILD_STATIC_PIC)
set_target_properties(CorradeUtility PROPERTIES POSITION_INDEPENDENT_CODE ON)
endif()
# AndroidLogStreamBuffer class needs to be linked to log library
if(CORRADE_TARGET_ANDROID)
target_link_libraries(CorradeUtility log)
endif()
install(TARGETS CorradeUtility
RUNTIME DESTINATION ${CORRADE_BINARY_INSTALL_DIR}
LIBRARY DESTINATION ${CORRADE_LIBRARY_INSTALL_DIR}
ARCHIVE DESTINATION ${CORRADE_LIBRARY_INSTALL_DIR})
install(FILES ${CorradeUtility_HEADERS} DESTINATION ${CORRADE_INCLUDE_INSTALL_DIR}/Utility)
if(BUILD_TESTS)
# Library with graceful assert for testing
add_library(CorradeUtilityTestLib ${SHARED_OR_STATIC} ${CorradeUtility_GracefulAssert_SRCS})
target_compile_definitions(CorradeUtilityTestLib PRIVATE "CORRADE_GRACEFUL_ASSERT")
set_target_properties(CorradeUtilityTestLib PROPERTIES
DEBUG_POSTFIX "-d"
FOLDER "Corrade/Utility")
if(BUILD_STATIC_PIC)
set_target_properties(CorradeUtilityTestLib PROPERTIES POSITION_INDEPENDENT_CODE ON)
endif()
target_link_libraries(CorradeUtilityTestLib CorradeUtility)
# On Windows we need to install first and then run the tests to avoid "DLL
# not found" hell, thus we need to install this too
if(CORRADE_TARGET_WINDOWS AND NOT CMAKE_CROSSCOMPILING AND NOT BUILD_STATIC)
install(TARGETS CorradeUtilityTestLib
RUNTIME DESTINATION ${CORRADE_BINARY_INSTALL_DIR}
LIBRARY DESTINATION ${CORRADE_LIBRARY_INSTALL_DIR}
ARCHIVE DESTINATION ${CORRADE_LIBRARY_INSTALL_DIR})
endif()
add_subdirectory(Test)
endif()
# Corrade::Utility and Corrade::rc target alias for superprojects
add_library(Corrade::Utility ALIAS CorradeUtility)
endif()
# TODO: In the future it might be possible to not require external corrade-rc
# when generating WinRT targets by setting
# set_target_properties(corrade-rc PROPERTIES VS_WINRT_COMPONENT OFF)
# Then the condition would be if(NOT CMAKE_CROSSCOMPILING OR CORRADE_TARGET_WINDOWS_RT)
# and similar change would be in UseCorrade.cmake. More info in this thread:
# https://cmake.org/pipermail/cmake-developers/2015-January/024242.html
if(NOT CMAKE_CROSSCOMPILING)
# Sources for standalone corrade-rc
set(CorradeUtilityRc_SRCS
Arguments.cpp
Debug.cpp
Directory.cpp
Configuration.cpp
ConfigurationGroup.cpp
Resource.cpp
String.cpp)
if(CORRADE_TARGET_WINDOWS)
# Needed for dealing with the design failure that's called "Unicode WINAPI"
list(APPEND CorradeUtilityRc_SRCS Unicode.cpp)
endif()
# Having a tool used during a build depend on a shared library brings a lot
# of annoyances especially for CMake and RPATH beginners (and Windows users
# as there is no RPATH), so I'm making it dependency-less here by compiling
# everything the executable needs directly inside. In case the library is
# already built as static, there's no need to do any extra work -- just
# link it.
if(NOT BUILD_STATIC OR NOT WITH_UTILITY)
add_executable(corrade-rc rc.cpp ${CorradeUtilityRc_SRCS})
# Same as Utility, but since we can't depend on it, we can't use its
# INTERFACE_INCLUDE_DIRECTORIES
target_include_directories(corrade-rc PRIVATE
${PROJECT_SOURCE_DIR}/src
${PROJECT_BINARY_DIR}/src)
target_compile_definitions(corrade-rc PRIVATE "CORRADE_BUILD_STATIC")
else()
add_executable(corrade-rc rc.cpp)
target_link_libraries(corrade-rc CorradeUtility)
endif()
set_target_properties(corrade-rc PROPERTIES FOLDER "Corrade/Utility")
install(TARGETS corrade-rc DESTINATION ${CORRADE_BINARY_INSTALL_DIR})
add_executable(Corrade::rc ALIAS corrade-rc)
endif()