forked from swiftlang/swift-corelibs-foundation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
216 lines (208 loc) · 6.05 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
add_library(Foundation
AffineTransform.swift
Array.swift
AttributedString/AttributedString.swift
AttributedString/AttributedStringAttribute.swift
AttributedString/AttributedStringCodable.swift
AttributedString/AttributedStringRunCoalescing.swift
AttributedString/AttributedString+Locking.swift
Boxing.swift
Bridging.swift
Bundle.swift
ByteCountFormatter.swift
Calendar.swift
CGFloat.swift
CharacterSet.swift
Codable.swift
Collections+DataProtocol.swift
ContiguousBytes.swift
AttributedString/Conversion.swift
Data.swift
DataProtocol.swift
Date.swift
DateComponents.swift
DateComponentsFormatter.swift
DateFormatter.swift
DateInterval.swift
DateIntervalFormatter.swift
Decimal.swift
Dictionary.swift
DispatchData+DataProtocol.swift
EnergyFormatter.swift
ExtraStringAPIs.swift
FileHandle.swift
FileManager.swift
FileManager+POSIX.swift
FileManager+Win32.swift
FileManager+XDG.swift
Formatter.swift
AttributedString/FoundationAttributes.swift
FoundationErrors.swift
Host.swift
IndexPath.swift
IndexSet.swift
ISO8601DateFormatter.swift
JSONDecoder.swift
JSONEncoder.swift
JSONSerialization.swift
JSONSerialization+Parser.swift
LengthFormatter.swift
Locale.swift
MassFormatter.swift
Measurement.swift
MeasurementFormatter.swift
Morphology.swift
Notification.swift
NotificationQueue.swift
NSArray.swift
NSAttributedString.swift
NSCache.swift
NSCalendar.swift
NSCFArray.swift
NSCFBoolean.swift
NSCFCharacterSet.swift
NSCFDictionary.swift
NSCFSet.swift
NSCFString.swift
NSCFTypeShims.swift
NSCharacterSet.swift
NSCoder.swift
NSComparisonPredicate.swift
NSCompoundPredicate.swift
NSConcreteValue.swift
NSData+DataProtocol.swift
NSData.swift
NSDate.swift
NSDateComponents.swift
NSDecimalNumber.swift
NSDictionary.swift
NSEnumerator.swift
NSError.swift
NSExpression.swift
NSGeometry.swift
NSIndexPath.swift
NSIndexSet.swift
NSKeyedArchiver.swift
NSKeyedArchiverHelpers.swift
NSKeyedCoderOldStyleArray.swift
NSKeyedUnarchiver.swift
NSLocale.swift
NSLock.swift
NSLog.swift
NSMeasurement.swift
NSNotification.swift
NSNull.swift
NSNumber.swift
NSObjCRuntime.swift
NSObject.swift
NSOrderedSet.swift
NSPathUtilities.swift
NSPersonNameComponents.swift
NSPlatform.swift
NSPredicate.swift
NSRange.swift
NSRegularExpression.swift
NSSet.swift
NSSortDescriptor.swift
NSSpecialValue.swift
NSString.swift
NSStringAPI.swift
NSSwiftRuntime.swift
NSTextCheckingResult.swift
NSTimeZone.swift
NSURL.swift
NSURLComponents.swift
NSURLQueryItem.swift
NSURLError.swift
NSUUID.swift
NSValue.swift
NumberFormatter.swift
Operation.swift
PersonNameComponents.swift
PersonNameComponentsFormatter.swift
Pointers+DataProtocol.swift
Port.swift
PortMessage.swift
Process.swift
ProcessInfo.swift
Progress.swift
ProgressFraction.swift
PropertyListEncoder.swift
PropertyListSerialization.swift
ReferenceConvertible.swift
RunLoop.swift
Scanner.swift
ScannerAPI.swift
Set.swift
Stream.swift
String.swift
StringEncodings.swift
Thread.swift
Timer.swift
TimeZone.swift
Unit.swift
URL.swift
URLComponents.swift
URLQueryItem.swift
URLResourceKey.swift
UserDefaults.swift
UUID.swift)
target_compile_definitions(Foundation PRIVATE
DEPLOYMENT_RUNTIME_SWIFT)
target_compile_options(Foundation PUBLIC
$<$<BOOL:${ENABLE_TESTING}>:-enable-testing>
"SHELL:-Xcc -F${CMAKE_BINARY_DIR}")
target_link_libraries(Foundation
PRIVATE
$<$<PLATFORM_ID:Windows>:CoreFoundationResources>
$<$<PLATFORM_ID:Windows>:Ole32>
$<$<PLATFORM_ID:Windows>:Shell32>
$<$<PLATFORM_ID:Windows>:pathcch>
CoreFoundation
uuid
PUBLIC
swiftDispatch)
set_target_properties(Foundation PROPERTIES
INSTALL_RPATH "$ORIGIN"
BUILD_RPATH "$<TARGET_FILE_DIR:swiftDispatch>"
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift)
if(NOT BUILD_SHARED_LIBS)
# ICU_I18N_LIBRARY is set by find_package(ICU) in the top level CMakeLists.txt
# It's an absolute path to the found library file
get_target_property(icui18n_path ICU::i18n IMPORTED_LOCATION)
get_filename_component(icu_i18n_basename "${icui18n_path}" NAME_WE)
get_filename_component(icu_i18n_dir "${icui18n_path}" DIRECTORY)
string(REPLACE "lib" "" icu_i18n_basename "${icu_i18n_basename}")
get_target_property(icuuc_path ICU::uc IMPORTED_LOCATION)
get_filename_component(icu_uc_basename "${icuuc_path}" NAME_WE)
string(REPLACE "lib" "" icu_uc_basename "${icu_uc_basename}")
get_target_property(icudata_path ICU::data IMPORTED_LOCATION)
get_filename_component(icu_data_basename "${icudata_path}" NAME_WE)
string(REPLACE "lib" "" icu_data_basename "${icu_data_basename}")
target_compile_options(Foundation
PRIVATE
"SHELL:-Xfrontend -public-autolink-library -Xfrontend ${icu_i18n_basename}
-Xfrontend -public-autolink-library -Xfrontend ${icu_uc_basename}
-Xfrontend -public-autolink-library -Xfrontend ${icu_data_basename}
-Xfrontend -public-autolink-library -Xfrontend BlocksRuntime")
# ICU libraries are linked by absolute library path in this project,
# but -public-autolink-library forces to resolve library path by
# library search path given by -L, so add a directory of icui18n
# in the search path
target_link_directories(Foundation PUBLIC "${icu_i18n_dir}")
# Merge private dependencies into single static objects archive
set_property(TARGET Foundation PROPERTY STATIC_LIBRARY_OPTIONS
$<TARGET_OBJECTS:CoreFoundation>
$<TARGET_OBJECTS:uuid>)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
# NOTE: workaround for CMake which doesn't link in OBJECT libraries properly
add_dependencies(Foundation CoreFoundationResources)
target_link_options(Foundation PRIVATE
$<TARGET_OBJECTS:CoreFoundationResources>)
elseif(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
target_link_options(Foundation PRIVATE "SHELL:-no-toolchain-stdlib-rpath")
endif()
set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS Foundation)
_install_target(Foundation)