cpp.js 0.6.1 → 1.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1145 @@
1
+ # This file is part of the ios-cmake project. It was retrieved from
2
+ # https://github.com/leetal/ios-cmake.git, which is a fork of
3
+ # https://github.com/gerstrong/ios-cmake.git, which is a fork of
4
+ # https://github.com/cristeab/ios-cmake.git, which is a fork of
5
+ # https://code.google.com/p/ios-cmake/. Which in turn is based off of
6
+ # the Platform/Darwin.cmake and Platform/UnixPaths.cmake files which
7
+ # are included with CMake 2.8.4
8
+ #
9
+ # The ios-cmake project is licensed under the new BSD license.
10
+ #
11
+ # Copyright (c) 2014, Bogdan Cristea and LTE Engineering Software,
12
+ # Kitware, Inc., Insight Software Consortium. All rights reserved.
13
+ # Redistribution and use in source and binary forms, with or without
14
+ # modification, are permitted provided that the following conditions
15
+ # are met:
16
+ # 1. Redistributions of source code must retain the above copyright
17
+ # notice, this list of conditions and the following disclaimer.
18
+ #
19
+ # 2. Redistributions in binary form must reproduce the above copyright
20
+ # notice, this list of conditions and the following disclaimer in the
21
+ # documentation and/or other materials provided with the distribution.
22
+ #
23
+ # 3. Neither the name of the copyright holder nor the names of its
24
+ # contributors may be used to endorse or promote products derived from
25
+ # this software without specific prior written permission.
26
+ #
27
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
30
+ # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
31
+ # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
32
+ # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
33
+ # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
34
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
35
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36
+ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
37
+ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38
+ # POSSIBILITY OF SUCH DAMAGE.
39
+ #
40
+ # This file is based on the Platform/Darwin.cmake and
41
+ # Platform/UnixPaths.cmake files which are included with CMake 2.8.4
42
+ # It has been altered for iOS development.
43
+ #
44
+ # Updated by Alex Stewart (alexs.mac@gmail.com)
45
+ #
46
+ # *****************************************************************************
47
+ # Now maintained by Alexander Widerberg (widerbergaren [at] gmail.com)
48
+ # under the BSD-3-Clause license
49
+ # https://github.com/leetal/ios-cmake
50
+ # *****************************************************************************
51
+ #
52
+ # INFORMATION / HELP
53
+ #
54
+ ###############################################################################
55
+ # OPTIONS #
56
+ ###############################################################################
57
+ #
58
+ # PLATFORM: (default "OS64")
59
+ # OS = Build for iPhoneOS.
60
+ # OS64 = Build for arm64 iphoneOS.
61
+ # OS64COMBINED = Build for arm64 x86_64 iphoneOS + iphoneOS Simulator. Combined into FAT STATIC lib (only supported on 3.14+ of CMake with "-G Xcode" argument in combination with the "cmake --install" CMake build step)
62
+ # SIMULATOR = Build for x86 i386 iphoneOS Simulator.
63
+ # SIMULATOR64 = Build for x86_64 iphoneOS Simulator.
64
+ # SIMULATORARM64 = Build for arm64 iphoneOS Simulator.
65
+ # SIMULATOR64COMBINED = Build for arm64 x86_64 iphoneOS Simulator. Combined into FAT STATIC lib (supported on 3.14+ of CMakewith "-G Xcode" argument ONLY)
66
+ # TVOS = Build for arm64 tvOS.
67
+ # TVOSCOMBINED = Build for arm64 x86_64 tvOS + tvOS Simulator. Combined into FAT STATIC lib (only supported on 3.14+ of CMake with "-G Xcode" argument in combination with the "cmake --install" CMake build step)
68
+ # SIMULATOR_TVOS = Build for x86_64 tvOS Simulator.
69
+ # SIMULATORARM64_TVOS = Build for arm64 tvOS Simulator.
70
+ # VISIONOSCOMBINED = Build for arm64 visionOS + visionOS Simulator. Combined into FAT STATIC lib (only supported on 3.14+ of CMake with "-G Xcode" argument in combination with the "cmake --install" CMake build step)
71
+ # VISIONOS = Build for arm64 visionOS.
72
+ # SIMULATOR_VISIONOS = Build for arm64 visionOS Simulator.
73
+ # WATCHOS = Build for armv7k arm64_32 for watchOS.
74
+ # WATCHOSCOMBINED = Build for armv7k arm64_32 x86_64 watchOS + watchOS Simulator. Combined into FAT STATIC lib (only supported on 3.14+ of CMake with "-G Xcode" argument in combination with the "cmake --install" CMake build step)
75
+ # SIMULATOR_WATCHOS = Build for x86_64 for watchOS Simulator.
76
+ # SIMULATORARM64_WATCHOS = Build for arm64 for watchOS Simulator.
77
+ # MAC = Build for x86_64 macOS.
78
+ # MAC_ARM64 = Build for Apple Silicon macOS.
79
+ # MAC_UNIVERSAL = Combined build for x86_64 and Apple Silicon on macOS.
80
+ # MAC_CATALYST = Build for x86_64 macOS with Catalyst support (iOS toolchain on macOS).
81
+ # Note: The build argument "MACOSX_DEPLOYMENT_TARGET" can be used to control min-version of macOS
82
+ # MAC_CATALYST_ARM64 = Build for Apple Silicon macOS with Catalyst support (iOS toolchain on macOS).
83
+ # Note: The build argument "MACOSX_DEPLOYMENT_TARGET" can be used to control min-version of macOS
84
+ # MAC_CATALYST_UNIVERSAL = Combined build for x86_64 and Apple Silicon on Catalyst.
85
+ #
86
+ # CMAKE_OSX_SYSROOT: Path to the SDK to use. By default this is
87
+ # automatically determined from PLATFORM and xcodebuild, but
88
+ # can also be manually specified (although this should not be required).
89
+ #
90
+ # CMAKE_DEVELOPER_ROOT: Path to the Developer directory for the platform
91
+ # being compiled for. By default, this is automatically determined from
92
+ # CMAKE_OSX_SYSROOT, but can also be manually specified (although this should
93
+ # not be required).
94
+ #
95
+ # DEPLOYMENT_TARGET: Minimum SDK version to target. Default 6.0 on watchOS, 13.0 on tvOS+iOS/iPadOS, 11.0 on macOS, 1.0 on visionOS
96
+ #
97
+ # NAMED_LANGUAGE_SUPPORT:
98
+ # ON (default) = Will require "enable_language(OBJC) and/or enable_language(OBJCXX)" for full OBJC|OBJCXX support
99
+ # OFF = Will embed the OBJC and OBJCXX flags into the CMAKE_C_FLAGS and CMAKE_CXX_FLAGS (legacy behavior, CMake version < 3.16)
100
+ #
101
+ # ENABLE_BITCODE: (ON|OFF) Enables or disables bitcode support. Default OFF
102
+ #
103
+ # ENABLE_ARC: (ON|OFF) Enables or disables ARC support. Default ON (ARC enabled by default)
104
+ #
105
+ # ENABLE_VISIBILITY: (ON|OFF) Enables or disables symbol visibility support. Default OFF (visibility hidden by default)
106
+ #
107
+ # ENABLE_STRICT_TRY_COMPILE: (ON|OFF) Enables or disables strict try_compile() on all Check* directives (will run linker
108
+ # to actually check if linking is possible). Default OFF (will set CMAKE_TRY_COMPILE_TARGET_TYPE to STATIC_LIBRARY)
109
+ #
110
+ # ARCHS: (armv7 armv7s armv7k arm64 arm64_32 i386 x86_64) If specified, will override the default architectures for the given PLATFORM
111
+ # OS = armv7 armv7s arm64 (if applicable)
112
+ # OS64 = arm64 (if applicable)
113
+ # SIMULATOR = i386
114
+ # SIMULATOR64 = x86_64
115
+ # SIMULATORARM64 = arm64
116
+ # TVOS = arm64
117
+ # SIMULATOR_TVOS = x86_64 (i386 has since long been deprecated)
118
+ # SIMULATORARM64_TVOS = arm64
119
+ # WATCHOS = armv7k arm64_32 (if applicable)
120
+ # SIMULATOR_WATCHOS = x86_64 (i386 has since long been deprecated)
121
+ # SIMULATORARM64_WATCHOS = arm64
122
+ # MAC = x86_64
123
+ # MAC_ARM64 = arm64
124
+ # MAC_UNIVERSAL = x86_64 arm64
125
+ # MAC_CATALYST = x86_64
126
+ # MAC_CATALYST_ARM64 = arm64
127
+ # MAC_CATALYST_UNIVERSAL = x86_64 arm64
128
+ #
129
+ # NOTE: When manually specifying ARCHS, put a semi-colon between the entries. E.g., -DARCHS="armv7;arm64"
130
+ #
131
+ ###############################################################################
132
+ # END OPTIONS #
133
+ ###############################################################################
134
+ #
135
+ # This toolchain defines the following properties (available via get_property()) for use externally:
136
+ #
137
+ # PLATFORM: The currently targeted platform.
138
+ # XCODE_VERSION: Version number (not including Build version) of Xcode detected.
139
+ # SDK_VERSION: Version of SDK being used.
140
+ # OSX_ARCHITECTURES: Architectures being compiled for (generated from PLATFORM).
141
+ # APPLE_TARGET_TRIPLE: Used by autoconf build systems. NOTE: If "ARCHS" is overridden, this will *NOT* be set!
142
+ #
143
+ # This toolchain defines the following macros for use externally:
144
+ #
145
+ # set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE XCODE_VARIANT)
146
+ # A convenience macro for setting xcode specific properties on targets.
147
+ # Available variants are: All, Release, RelWithDebInfo, Debug, MinSizeRel
148
+ # example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1" "all").
149
+ #
150
+ # find_host_package (PROGRAM ARGS)
151
+ # A macro used to find executable programs on the host system, not within the
152
+ # environment. Thanks to the android-cmake project for providing the
153
+ # command.
154
+ #
155
+
156
+ cmake_minimum_required(VERSION 3.8.0)
157
+
158
+ # CMake invokes the toolchain file twice during the first build, but only once during subsequent rebuilds.
159
+ # NOTE: To improve single-library build-times, provide the flag "OS_SINGLE_BUILD" as a build argument.
160
+ if(DEFINED OS_SINGLE_BUILD AND DEFINED ENV{_IOS_TOOLCHAIN_HAS_RUN})
161
+ return()
162
+ endif()
163
+ set(ENV{_IOS_TOOLCHAIN_HAS_RUN} true)
164
+
165
+ # List of supported platform values
166
+ list(APPEND _supported_platforms
167
+ "OS" "OS64" "OS64COMBINED" "SIMULATOR" "SIMULATOR64" "SIMULATORARM64" "SIMULATOR64COMBINED"
168
+ "TVOS" "TVOSCOMBINED" "SIMULATOR_TVOS" "SIMULATORARM64_TVOS"
169
+ "WATCHOS" "WATCHOSCOMBINED" "SIMULATOR_WATCHOS" "SIMULATORARM64_WATCHOS"
170
+ "MAC" "MAC_ARM64" "MAC_UNIVERSAL"
171
+ "VISIONOS" "SIMULATOR_VISIONOS" "VISIONOSCOMBINED"
172
+ "MAC_CATALYST" "MAC_CATALYST_ARM64" "MAC_CATALYST_UNIVERSAL")
173
+
174
+ # Cache what generator is used
175
+ set(USED_CMAKE_GENERATOR "${CMAKE_GENERATOR}")
176
+
177
+ # Check if using a CMake version capable of building combined FAT builds (simulator and target slices combined in one static lib)
178
+ if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14")
179
+ set(MODERN_CMAKE YES)
180
+ endif()
181
+
182
+ # Get the Xcode version being used.
183
+ # Problem: CMake runs toolchain files multiple times, but can't read cache variables on some runs.
184
+ # Workaround: On the first run (in which cache variables are always accessible), set an intermediary environment variable.
185
+ #
186
+ # NOTE: This pattern is used in many places in this toolchain to speed up checks of all sorts
187
+ if(DEFINED XCODE_VERSION_INT)
188
+ # Environment variables are always preserved.
189
+ set(ENV{_XCODE_VERSION_INT} "${XCODE_VERSION_INT}")
190
+ elseif(DEFINED ENV{_XCODE_VERSION_INT})
191
+ set(XCODE_VERSION_INT "$ENV{_XCODE_VERSION_INT}")
192
+ elseif(NOT DEFINED XCODE_VERSION_INT)
193
+ find_program(XCODEBUILD_EXECUTABLE xcodebuild)
194
+ if(NOT XCODEBUILD_EXECUTABLE)
195
+ message(FATAL_ERROR "xcodebuild not found. Please install either the standalone commandline tools or Xcode.")
196
+ endif()
197
+ execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version
198
+ OUTPUT_VARIABLE XCODE_VERSION_INT
199
+ ERROR_QUIET
200
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
201
+ string(REGEX MATCH "Xcode [0-9\\.]+" XCODE_VERSION_INT "${XCODE_VERSION_INT}")
202
+ string(REGEX REPLACE "Xcode ([0-9\\.]+)" "\\1" XCODE_VERSION_INT "${XCODE_VERSION_INT}")
203
+ set(XCODE_VERSION_INT "${XCODE_VERSION_INT}" CACHE INTERNAL "")
204
+ endif()
205
+
206
+ # Assuming that xcode 12.0 is installed you most probably have ios sdk 14.0 or later installed (tested on Big Sur)
207
+ # if you don't set a deployment target it will be set the way you only get 64-bit builds
208
+ #if(NOT DEFINED DEPLOYMENT_TARGET AND XCODE_VERSION_INT VERSION_GREATER 12.0)
209
+ # Temporarily fix the arm64 issues in CMake install-combined by excluding arm64 for simulator builds (needed for Apple Silicon...)
210
+ # set(CMAKE_XCODE_ATTRIBUTE_EXCLUDED_ARCHS[sdk=iphonesimulator*] "arm64")
211
+ #endif()
212
+
213
+ # Check if the platform variable is set
214
+ if(DEFINED PLATFORM)
215
+ # Environment variables are always preserved.
216
+ set(ENV{_PLATFORM} "${PLATFORM}")
217
+ elseif(DEFINED ENV{_PLATFORM})
218
+ set(PLATFORM "$ENV{_PLATFORM}")
219
+ elseif(NOT DEFINED PLATFORM)
220
+ message(FATAL_ERROR "PLATFORM argument not set. Bailing configure since I don't know what target you want to build for!")
221
+ endif ()
222
+
223
+ if(PLATFORM MATCHES ".*COMBINED" AND NOT CMAKE_GENERATOR MATCHES "Xcode")
224
+ message(FATAL_ERROR "The combined builds support requires Xcode to be used as a generator via '-G Xcode' command-line argument in CMake")
225
+ endif()
226
+
227
+ # Safeguard that the platform value is set and is one of the supported values
228
+ list(FIND _supported_platforms ${PLATFORM} contains_PLATFORM)
229
+ if("${contains_PLATFORM}" EQUAL "-1")
230
+ string(REPLACE ";" "\n * " _supported_platforms_formatted "${_supported_platforms}")
231
+ message(FATAL_ERROR " Invalid PLATFORM specified! Current value: ${PLATFORM}.\n"
232
+ " Supported PLATFORM values: \n * ${_supported_platforms_formatted}")
233
+ endif()
234
+
235
+ # Check if Apple Silicon is supported
236
+ if(PLATFORM MATCHES "^(MAC_ARM64)$|^(MAC_CATALYST_ARM64)$|^(MAC_UNIVERSAL)$|^(MAC_CATALYST_UNIVERSAL)$" AND ${CMAKE_VERSION} VERSION_LESS "3.19.5")
237
+ message(FATAL_ERROR "Apple Silicon builds requires a minimum of CMake 3.19.5")
238
+ endif()
239
+
240
+ # Touch the toolchain variable to suppress the "unused variable" warning.
241
+ # This happens if CMake is invoked with the same command line the second time.
242
+ if(CMAKE_TOOLCHAIN_FILE)
243
+ endif()
244
+
245
+ # Fix for PThread library not in path
246
+ set(CMAKE_THREAD_LIBS_INIT "-lpthread")
247
+ set(CMAKE_HAVE_THREADS_LIBRARY 1)
248
+ set(CMAKE_USE_WIN32_THREADS_INIT 0)
249
+ set(CMAKE_USE_PTHREADS_INIT 1)
250
+
251
+ # Specify named language support defaults.
252
+ if(NOT DEFINED NAMED_LANGUAGE_SUPPORT AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16")
253
+ set(NAMED_LANGUAGE_SUPPORT ON)
254
+ message(STATUS "[DEFAULTS] Using explicit named language support! E.g., enable_language(CXX) is needed in the project files.")
255
+ elseif(NOT DEFINED NAMED_LANGUAGE_SUPPORT AND ${CMAKE_VERSION} VERSION_LESS "3.16")
256
+ set(NAMED_LANGUAGE_SUPPORT OFF)
257
+ message(STATUS "[DEFAULTS] Disabling explicit named language support. Falling back to legacy behavior.")
258
+ elseif(DEFINED NAMED_LANGUAGE_SUPPORT AND ${CMAKE_VERSION} VERSION_LESS "3.16")
259
+ message(FATAL_ERROR "CMake named language support for OBJC and OBJCXX was added in CMake 3.16.")
260
+ endif()
261
+ set(NAMED_LANGUAGE_SUPPORT_INT ${NAMED_LANGUAGE_SUPPORT} CACHE BOOL
262
+ "Whether or not to enable explicit named language support" FORCE)
263
+
264
+ # Specify the minimum version of the deployment target.
265
+ if(NOT DEFINED DEPLOYMENT_TARGET)
266
+ if (PLATFORM MATCHES "WATCHOS")
267
+ # Unless specified, SDK version 4.0 is used by default as minimum target version (watchOS).
268
+ set(DEPLOYMENT_TARGET "6.0")
269
+ elseif(PLATFORM STREQUAL "MAC")
270
+ # Unless specified, SDK version 10.13 (High Sierra) is used by default as the minimum target version (macos).
271
+ set(DEPLOYMENT_TARGET "11.0")
272
+ elseif(PLATFORM STREQUAL "VISIONOS" OR PLATFORM STREQUAL "SIMULATOR_VISIONOS" OR PLATFORM STREQUAL "VISIONOSCOMBINED")
273
+ # Unless specified, SDK version 1.0 is used by default as minimum target version (visionOS).
274
+ set(DEPLOYMENT_TARGET "1.0")
275
+ elseif(PLATFORM STREQUAL "MAC_ARM64")
276
+ # Unless specified, SDK version 11.0 (Big Sur) is used by default as the minimum target version (macOS on arm).
277
+ set(DEPLOYMENT_TARGET "11.0")
278
+ elseif(PLATFORM STREQUAL "MAC_UNIVERSAL")
279
+ # Unless specified, SDK version 11.0 (Big Sur) is used by default as minimum target version for universal builds.
280
+ set(DEPLOYMENT_TARGET "11.0")
281
+ elseif(PLATFORM STREQUAL "MAC_CATALYST" OR PLATFORM STREQUAL "MAC_CATALYST_ARM64" OR PLATFORM STREQUAL "MAC_CATALYST_UNIVERSAL")
282
+ # Unless specified, SDK version 13.0 is used by default as the minimum target version (mac catalyst minimum requirement).
283
+ set(DEPLOYMENT_TARGET "13.1")
284
+ else()
285
+ # Unless specified, SDK version 11.0 is used by default as the minimum target version (iOS, tvOS).
286
+ set(DEPLOYMENT_TARGET "13.0")
287
+ endif()
288
+ message(STATUS "[DEFAULTS] Using the default min-version since DEPLOYMENT_TARGET not provided!")
289
+ elseif(DEFINED DEPLOYMENT_TARGET AND PLATFORM MATCHES "^MAC_CATALYST" AND ${DEPLOYMENT_TARGET} VERSION_LESS "13.1")
290
+ message(FATAL_ERROR "Mac Catalyst builds requires a minimum deployment target of 13.1!")
291
+ endif()
292
+
293
+ # Store the DEPLOYMENT_TARGET in the cache
294
+ set(DEPLOYMENT_TARGET "${DEPLOYMENT_TARGET}" CACHE INTERNAL "")
295
+
296
+ # Handle the case where we are targeting iOS and a version above 10.3.4 (32-bit support dropped officially)
297
+ if(PLATFORM STREQUAL "OS" AND DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 10.3.4)
298
+ set(PLATFORM "OS64")
299
+ message(STATUS "Targeting minimum SDK version ${DEPLOYMENT_TARGET}. Dropping 32-bit support.")
300
+ elseif(PLATFORM STREQUAL "SIMULATOR" AND DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 10.3.4)
301
+ set(PLATFORM "SIMULATOR64")
302
+ message(STATUS "Targeting minimum SDK version ${DEPLOYMENT_TARGET}. Dropping 32-bit support.")
303
+ endif()
304
+
305
+ set(PLATFORM_INT "${PLATFORM}")
306
+
307
+ if(DEFINED ARCHS)
308
+ string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}")
309
+ endif()
310
+
311
+ # Determine the platform name and architectures for use in xcodebuild commands
312
+ # from the specified PLATFORM_INT name.
313
+ if(PLATFORM_INT STREQUAL "OS")
314
+ set(SDK_NAME iphoneos)
315
+ if(NOT ARCHS)
316
+ set(ARCHS armv7 armv7s arm64)
317
+ set(APPLE_TARGET_TRIPLE_INT arm-apple-ios${DEPLOYMENT_TARGET})
318
+ else()
319
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET})
320
+ endif()
321
+ elseif(PLATFORM_INT STREQUAL "OS64")
322
+ set(SDK_NAME iphoneos)
323
+ if(NOT ARCHS)
324
+ if (XCODE_VERSION_INT VERSION_GREATER 10.0)
325
+ set(ARCHS arm64) # FIXME: Add arm64e when Apple has fixed the integration issues with it, libarclite_iphoneos.a is currently missing bitcode markers for example
326
+ else()
327
+ set(ARCHS arm64)
328
+ endif()
329
+ set(APPLE_TARGET_TRIPLE_INT arm64-apple-ios${DEPLOYMENT_TARGET})
330
+ else()
331
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET})
332
+ endif()
333
+ elseif(PLATFORM_INT STREQUAL "OS64COMBINED")
334
+ set(SDK_NAME iphoneos)
335
+ if(MODERN_CMAKE)
336
+ if(NOT ARCHS)
337
+ if (XCODE_VERSION_INT VERSION_GREATER 12.0)
338
+ set(ARCHS arm64 x86_64)
339
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64")
340
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64 arm64")
341
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64")
342
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64 arm64")
343
+ else()
344
+ set(ARCHS arm64 x86_64)
345
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64")
346
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64")
347
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64")
348
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64")
349
+ endif()
350
+ set(APPLE_TARGET_TRIPLE_INT arm64-x86_64-apple-ios${DEPLOYMENT_TARGET})
351
+ else()
352
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET})
353
+ endif()
354
+ else()
355
+ message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the OS64COMBINED setting work")
356
+ endif()
357
+ elseif(PLATFORM_INT STREQUAL "SIMULATOR64COMBINED")
358
+ set(SDK_NAME iphonesimulator)
359
+ if(MODERN_CMAKE)
360
+ if(NOT ARCHS)
361
+ if (XCODE_VERSION_INT VERSION_GREATER 12.0)
362
+ set(ARCHS arm64 x86_64) # FIXME: Add arm64e when Apple have fixed the integration issues with it, libarclite_iphoneos.a is currently missing bitcode markers for example
363
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "")
364
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64 arm64")
365
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "")
366
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64 arm64")
367
+ else()
368
+ set(ARCHS arm64 x86_64)
369
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "")
370
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64")
371
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "")
372
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64")
373
+ endif()
374
+ set(APPLE_TARGET_TRIPLE_INT aarch64-x86_64-apple-ios${DEPLOYMENT_TARGET}-simulator)
375
+ else()
376
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-simulator)
377
+ endif()
378
+ else()
379
+ message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the SIMULATOR64COMBINED setting work")
380
+ endif()
381
+ elseif(PLATFORM_INT STREQUAL "SIMULATOR")
382
+ set(SDK_NAME iphonesimulator)
383
+ if(NOT ARCHS)
384
+ set(ARCHS i386)
385
+ set(APPLE_TARGET_TRIPLE_INT i386-apple-ios${DEPLOYMENT_TARGET}-simulator)
386
+ else()
387
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-simulator)
388
+ endif()
389
+ message(DEPRECATION "SIMULATOR IS DEPRECATED. Consider using SIMULATOR64 instead.")
390
+ elseif(PLATFORM_INT STREQUAL "SIMULATOR64")
391
+ set(SDK_NAME iphonesimulator)
392
+ if(NOT ARCHS)
393
+ set(ARCHS x86_64)
394
+ set(APPLE_TARGET_TRIPLE_INT x86_64-apple-ios${DEPLOYMENT_TARGET}-simulator)
395
+ else()
396
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-simulator)
397
+ endif()
398
+ elseif(PLATFORM_INT STREQUAL "SIMULATORARM64")
399
+ set(SDK_NAME iphonesimulator)
400
+ if(NOT ARCHS)
401
+ set(ARCHS arm64)
402
+ set(APPLE_TARGET_TRIPLE_INT arm64-apple-ios${DEPLOYMENT_TARGET}-simulator)
403
+ else()
404
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-simulator)
405
+ endif()
406
+ elseif(PLATFORM_INT STREQUAL "TVOS")
407
+ set(SDK_NAME appletvos)
408
+ if(NOT ARCHS)
409
+ set(ARCHS arm64)
410
+ set(APPLE_TARGET_TRIPLE_INT arm64-apple-tvos${DEPLOYMENT_TARGET})
411
+ else()
412
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-tvos${DEPLOYMENT_TARGET})
413
+ endif()
414
+ elseif (PLATFORM_INT STREQUAL "TVOSCOMBINED")
415
+ set(SDK_NAME appletvos)
416
+ if(MODERN_CMAKE)
417
+ if(NOT ARCHS)
418
+ set(ARCHS arm64 x86_64)
419
+ set(APPLE_TARGET_TRIPLE_INT arm64-x86_64-apple-tvos${DEPLOYMENT_TARGET})
420
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=appletvos*] "arm64")
421
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=appletvsimulator*] "x86_64 arm64")
422
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=appletvos*] "arm64")
423
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=appletvsimulator*] "x86_64 arm64")
424
+ else()
425
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-tvos${DEPLOYMENT_TARGET})
426
+ endif()
427
+ else()
428
+ message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the TVOSCOMBINED setting work")
429
+ endif()
430
+ elseif(PLATFORM_INT STREQUAL "SIMULATOR_TVOS")
431
+ set(SDK_NAME appletvsimulator)
432
+ if(NOT ARCHS)
433
+ set(ARCHS x86_64)
434
+ set(APPLE_TARGET_TRIPLE_INT x86_64-apple-tvos${DEPLOYMENT_TARGET}-simulator)
435
+ else()
436
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-tvos${DEPLOYMENT_TARGET}-simulator)
437
+ endif()
438
+ elseif(PLATFORM_INT STREQUAL "SIMULATORARM64_TVOS")
439
+ set(SDK_NAME appletvsimulator)
440
+ if(NOT ARCHS)
441
+ set(ARCHS arm64)
442
+ set(APPLE_TARGET_TRIPLE_INT arm64-apple-tvos${DEPLOYMENT_TARGET}-simulator)
443
+ else()
444
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-tvos${DEPLOYMENT_TARGET}-simulator)
445
+ endif()
446
+ elseif(PLATFORM_INT STREQUAL "WATCHOS")
447
+ set(SDK_NAME watchos)
448
+ if(NOT ARCHS)
449
+ if (XCODE_VERSION_INT VERSION_GREATER 10.0)
450
+ set(ARCHS armv7k arm64_32)
451
+ set(APPLE_TARGET_TRIPLE_INT arm64_32-apple-watchos${DEPLOYMENT_TARGET})
452
+ else()
453
+ set(ARCHS armv7k)
454
+ set(APPLE_TARGET_TRIPLE_INT arm-apple-watchos${DEPLOYMENT_TARGET})
455
+ endif()
456
+ else()
457
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET})
458
+ endif()
459
+ elseif(PLATFORM_INT STREQUAL "WATCHOSCOMBINED")
460
+ set(SDK_NAME watchos)
461
+ if(MODERN_CMAKE)
462
+ if(NOT ARCHS)
463
+ if (XCODE_VERSION_INT VERSION_GREATER 10.0)
464
+ set(ARCHS armv7k arm64_32 i386)
465
+ set(APPLE_TARGET_TRIPLE_INT arm64_32-i386-apple-watchos${DEPLOYMENT_TARGET})
466
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "armv7k arm64_32")
467
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386")
468
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "armv7k arm64_32")
469
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386")
470
+ else()
471
+ set(ARCHS armv7k i386)
472
+ set(APPLE_TARGET_TRIPLE_INT arm-i386-apple-watchos${DEPLOYMENT_TARGET})
473
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchos*] "armv7k")
474
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=watchsimulator*] "i386")
475
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchos*] "armv7k")
476
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=watchsimulator*] "i386")
477
+ endif()
478
+ else()
479
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET})
480
+ endif()
481
+ else()
482
+ message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the WATCHOSCOMBINED setting work")
483
+ endif()
484
+ elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS")
485
+ set(SDK_NAME watchsimulator)
486
+ if(NOT ARCHS)
487
+ set(ARCHS i386)
488
+ set(APPLE_TARGET_TRIPLE_INT i386-apple-watchos${DEPLOYMENT_TARGET}-simulator)
489
+ else()
490
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET}-simulator)
491
+ endif()
492
+ elseif(PLATFORM_INT STREQUAL "SIMULATORARM64_WATCHOS")
493
+ set(SDK_NAME watchsimulator)
494
+ if(NOT ARCHS)
495
+ set(ARCHS arm64)
496
+ set(APPLE_TARGET_TRIPLE_INT arm64-apple-watchos${DEPLOYMENT_TARGET}-simulator)
497
+ else()
498
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-watchos${DEPLOYMENT_TARGET}-simulator)
499
+ endif()
500
+ elseif(PLATFORM_INT STREQUAL "SIMULATOR_VISIONOS")
501
+ set(SDK_NAME xrsimulator)
502
+ if(NOT ARCHS)
503
+ set(ARCHS arm64)
504
+ set(APPLE_TARGET_TRIPLE_INT arm64-apple-xros${DEPLOYMENT_TARGET}-simulator)
505
+ else()
506
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-xros${DEPLOYMENT_TARGET}-simulator)
507
+ endif()
508
+ elseif(PLATFORM_INT STREQUAL "VISIONOS")
509
+ set(SDK_NAME xros)
510
+ if(NOT ARCHS)
511
+ set(ARCHS arm64)
512
+ set(APPLE_TARGET_TRIPLE_INT arm64-apple-xros${DEPLOYMENT_TARGET})
513
+ else()
514
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-xros${DEPLOYMENT_TARGET})
515
+ endif()
516
+ elseif(PLATFORM_INT STREQUAL "VISIONOSCOMBINED")
517
+ set(SDK_NAME xros)
518
+ if(MODERN_CMAKE)
519
+ if(NOT ARCHS)
520
+ set(ARCHS arm64)
521
+ set(APPLE_TARGET_TRIPLE_INT arm64-apple-xros${DEPLOYMENT_TARGET})
522
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=xros*] "arm64")
523
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=xrsimulator*] "arm64")
524
+ else()
525
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-xros${DEPLOYMENT_TARGET})
526
+ endif()
527
+ else()
528
+ message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the VISIONOSCOMBINED setting work")
529
+ endif()
530
+ elseif(PLATFORM_INT STREQUAL "MAC" OR PLATFORM_INT STREQUAL "MAC_CATALYST")
531
+ set(SDK_NAME macosx)
532
+ if(NOT ARCHS)
533
+ set(ARCHS x86_64)
534
+ endif()
535
+ string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}")
536
+ if(PLATFORM_INT STREQUAL "MAC")
537
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-macosx${DEPLOYMENT_TARGET})
538
+ elseif(PLATFORM_INT STREQUAL "MAC_CATALYST")
539
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-macabi)
540
+ endif()
541
+ elseif(PLATFORM_INT MATCHES "^(MAC_ARM64)$|^(MAC_CATALYST_ARM64)$")
542
+ set(SDK_NAME macosx)
543
+ if(NOT ARCHS)
544
+ set(ARCHS arm64)
545
+ endif()
546
+ string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}")
547
+ if(PLATFORM_INT STREQUAL "MAC_ARM64")
548
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-macosx${DEPLOYMENT_TARGET})
549
+ elseif(PLATFORM_INT STREQUAL "MAC_CATALYST_ARM64")
550
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-macabi)
551
+ endif()
552
+ elseif(PLATFORM_INT STREQUAL "MAC_UNIVERSAL")
553
+ set(SDK_NAME macosx)
554
+ if(NOT ARCHS)
555
+ set(ARCHS "x86_64;arm64")
556
+ endif()
557
+ string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}")
558
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-macosx${DEPLOYMENT_TARGET})
559
+ elseif(PLATFORM_INT STREQUAL "MAC_CATALYST_UNIVERSAL")
560
+ set(SDK_NAME macosx)
561
+ if(NOT ARCHS)
562
+ set(ARCHS "x86_64;arm64")
563
+ endif()
564
+ string(REPLACE ";" "-" ARCHS_SPLIT "${ARCHS}")
565
+ set(APPLE_TARGET_TRIPLE_INT ${ARCHS_SPLIT}-apple-ios${DEPLOYMENT_TARGET}-macabi)
566
+ else()
567
+ message(FATAL_ERROR "Invalid PLATFORM: ${PLATFORM_INT}")
568
+ endif()
569
+
570
+ string(REPLACE ";" " " ARCHS_SPACED "${ARCHS}")
571
+
572
+ if(MODERN_CMAKE AND PLATFORM_INT MATCHES ".*COMBINED" AND NOT CMAKE_GENERATOR MATCHES "Xcode")
573
+ message(FATAL_ERROR "The COMBINED options only work with Xcode generator, -G Xcode")
574
+ endif()
575
+
576
+ if(CMAKE_GENERATOR MATCHES "Xcode" AND PLATFORM_INT MATCHES "^MAC_CATALYST")
577
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
578
+ set(CMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS "macosx")
579
+ set(CMAKE_XCODE_ATTRIBUTE_SUPPORTS_MACCATALYST "YES")
580
+ if(NOT DEFINED MACOSX_DEPLOYMENT_TARGET)
581
+ set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "10.15")
582
+ else()
583
+ set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "${MACOSX_DEPLOYMENT_TARGET}")
584
+ endif()
585
+ elseif(CMAKE_GENERATOR MATCHES "Xcode")
586
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
587
+ set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "${DEPLOYMENT_TARGET}")
588
+ if(NOT PLATFORM_INT MATCHES ".*COMBINED")
589
+ set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=${SDK_NAME}*] "${ARCHS_SPACED}")
590
+ set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=${SDK_NAME}*] "${ARCHS_SPACED}")
591
+ endif()
592
+ endif()
593
+
594
+ # If the user did not specify the SDK root to use, then query xcodebuild for it.
595
+ if(DEFINED CMAKE_OSX_SYSROOT_INT)
596
+ # Environment variables are always preserved.
597
+ set(ENV{_CMAKE_OSX_SYSROOT_INT} "${CMAKE_OSX_SYSROOT_INT}")
598
+ elseif(DEFINED ENV{_CMAKE_OSX_SYSROOT_INT})
599
+ set(CMAKE_OSX_SYSROOT_INT "$ENV{_CMAKE_OSX_SYSROOT_INT}")
600
+ elseif(NOT DEFINED CMAKE_OSX_SYSROOT_INT)
601
+ execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version -sdk ${SDK_NAME} Path
602
+ OUTPUT_VARIABLE CMAKE_OSX_SYSROOT_INT
603
+ ERROR_QUIET
604
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
605
+ endif()
606
+
607
+ if (NOT DEFINED CMAKE_OSX_SYSROOT_INT AND NOT DEFINED CMAKE_OSX_SYSROOT)
608
+ message(SEND_ERROR "Please make sure that Xcode is installed and that the toolchain"
609
+ "is pointing to the correct path. Please run:"
610
+ "sudo xcode-select -s /Applications/Xcode.app/Contents/Developer"
611
+ "and see if that fixes the problem for you.")
612
+ message(FATAL_ERROR "Invalid CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT} "
613
+ "does not exist.")
614
+ elseif(DEFINED CMAKE_OSX_SYSROOT_INT)
615
+ set(CMAKE_OSX_SYSROOT_INT "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "")
616
+ # Specify the location or name of the platform SDK to be used in CMAKE_OSX_SYSROOT.
617
+ set(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "")
618
+ endif()
619
+
620
+ # Use bitcode or not
621
+ if(NOT DEFINED ENABLE_BITCODE)
622
+ message(STATUS "[DEFAULTS] Disabling bitcode support by default. ENABLE_BITCODE not provided for override!")
623
+ set(ENABLE_BITCODE OFF)
624
+ endif()
625
+ set(ENABLE_BITCODE_INT ${ENABLE_BITCODE} CACHE BOOL
626
+ "Whether or not to enable bitcode" FORCE)
627
+ # Use ARC or not
628
+ if(NOT DEFINED ENABLE_ARC)
629
+ # Unless specified, enable ARC support by default
630
+ set(ENABLE_ARC ON)
631
+ message(STATUS "[DEFAULTS] Enabling ARC support by default. ENABLE_ARC not provided!")
632
+ endif()
633
+ set(ENABLE_ARC_INT ${ENABLE_ARC} CACHE BOOL "Whether or not to enable ARC" FORCE)
634
+ # Use hidden visibility or not
635
+ if(NOT DEFINED ENABLE_VISIBILITY)
636
+ # Unless specified, disable symbols visibility by default
637
+ set(ENABLE_VISIBILITY OFF)
638
+ message(STATUS "[DEFAULTS] Hiding symbols visibility by default. ENABLE_VISIBILITY not provided!")
639
+ endif()
640
+ set(ENABLE_VISIBILITY_INT ${ENABLE_VISIBILITY} CACHE BOOL "Whether or not to hide symbols from the dynamic linker (-fvisibility=hidden)" FORCE)
641
+ # Set strict compiler checks or not
642
+ if(NOT DEFINED ENABLE_STRICT_TRY_COMPILE)
643
+ # Unless specified, disable strict try_compile()
644
+ set(ENABLE_STRICT_TRY_COMPILE OFF)
645
+ message(STATUS "[DEFAULTS] Using NON-strict compiler checks by default. ENABLE_STRICT_TRY_COMPILE not provided!")
646
+ endif()
647
+ set(ENABLE_STRICT_TRY_COMPILE_INT ${ENABLE_STRICT_TRY_COMPILE} CACHE BOOL
648
+ "Whether or not to use strict compiler checks" FORCE)
649
+
650
+ # Get the SDK version information.
651
+ if(DEFINED SDK_VERSION)
652
+ # Environment variables are always preserved.
653
+ set(ENV{_SDK_VERSION} "${SDK_VERSION}")
654
+ elseif(DEFINED ENV{_SDK_VERSION})
655
+ set(SDK_VERSION "$ENV{_SDK_VERSION}")
656
+ elseif(NOT DEFINED SDK_VERSION)
657
+ execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -sdk ${CMAKE_OSX_SYSROOT_INT} -version SDKVersion
658
+ OUTPUT_VARIABLE SDK_VERSION
659
+ ERROR_QUIET
660
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
661
+ endif()
662
+
663
+ # Find the Developer root for the specific iOS platform being compiled for
664
+ # from CMAKE_OSX_SYSROOT. Should be ../../ from SDK specified in
665
+ # CMAKE_OSX_SYSROOT. There does not appear to be a direct way to obtain
666
+ # this information from xcrun or xcodebuild.
667
+ if (NOT DEFINED CMAKE_DEVELOPER_ROOT AND NOT CMAKE_GENERATOR MATCHES "Xcode")
668
+ get_filename_component(PLATFORM_SDK_DIR ${CMAKE_OSX_SYSROOT_INT} PATH)
669
+ get_filename_component(CMAKE_DEVELOPER_ROOT ${PLATFORM_SDK_DIR} PATH)
670
+ if (NOT EXISTS "${CMAKE_DEVELOPER_ROOT}")
671
+ message(FATAL_ERROR "Invalid CMAKE_DEVELOPER_ROOT: ${CMAKE_DEVELOPER_ROOT} does not exist.")
672
+ endif()
673
+ endif()
674
+
675
+ # Find the C & C++ compilers for the specified SDK.
676
+ if(DEFINED CMAKE_C_COMPILER)
677
+ # Environment variables are always preserved.
678
+ set(ENV{_CMAKE_C_COMPILER} "${CMAKE_C_COMPILER}")
679
+ elseif(DEFINED ENV{_CMAKE_C_COMPILER})
680
+ set(CMAKE_C_COMPILER "$ENV{_CMAKE_C_COMPILER}")
681
+ set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
682
+ elseif(NOT DEFINED CMAKE_C_COMPILER)
683
+ execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find clang
684
+ OUTPUT_VARIABLE CMAKE_C_COMPILER
685
+ ERROR_QUIET
686
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
687
+ set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
688
+ endif()
689
+ if(DEFINED CMAKE_CXX_COMPILER)
690
+ # Environment variables are always preserved.
691
+ set(ENV{_CMAKE_CXX_COMPILER} "${CMAKE_CXX_COMPILER}")
692
+ elseif(DEFINED ENV{_CMAKE_CXX_COMPILER})
693
+ set(CMAKE_CXX_COMPILER "$ENV{_CMAKE_CXX_COMPILER}")
694
+ elseif(NOT DEFINED CMAKE_CXX_COMPILER)
695
+ execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find clang++
696
+ OUTPUT_VARIABLE CMAKE_CXX_COMPILER
697
+ ERROR_QUIET
698
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
699
+ endif()
700
+ # Find (Apple's) libtool.
701
+ if(DEFINED BUILD_LIBTOOL)
702
+ # Environment variables are always preserved.
703
+ set(ENV{_BUILD_LIBTOOL} "${BUILD_LIBTOOL}")
704
+ elseif(DEFINED ENV{_BUILD_LIBTOOL})
705
+ set(BUILD_LIBTOOL "$ENV{_BUILD_LIBTOOL}")
706
+ elseif(NOT DEFINED BUILD_LIBTOOL)
707
+ execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find libtool
708
+ OUTPUT_VARIABLE BUILD_LIBTOOL
709
+ ERROR_QUIET
710
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
711
+ endif()
712
+ # Find the toolchain's provided install_name_tool if none is found on the host
713
+ if(DEFINED CMAKE_INSTALL_NAME_TOOL)
714
+ # Environment variables are always preserved.
715
+ set(ENV{_CMAKE_INSTALL_NAME_TOOL} "${CMAKE_INSTALL_NAME_TOOL}")
716
+ elseif(DEFINED ENV{_CMAKE_INSTALL_NAME_TOOL})
717
+ set(CMAKE_INSTALL_NAME_TOOL "$ENV{_CMAKE_INSTALL_NAME_TOOL}")
718
+ elseif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
719
+ execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT_INT} -find install_name_tool
720
+ OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT
721
+ ERROR_QUIET
722
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
723
+ set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE INTERNAL "")
724
+ endif()
725
+
726
+ # Configure libtool to be used instead of ar + ranlib to build static libraries.
727
+ # This is required on Xcode 7+, but should also work on previous versions of
728
+ # Xcode.
729
+ get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
730
+ foreach(lang ${languages})
731
+ set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "${BUILD_LIBTOOL} -static -o <TARGET> <LINK_FLAGS> <OBJECTS> " CACHE INTERNAL "")
732
+ endforeach()
733
+
734
+ # CMake 3.14+ support building for iOS, watchOS, and tvOS out of the box.
735
+ if(MODERN_CMAKE)
736
+ if(SDK_NAME MATCHES "iphone")
737
+ set(CMAKE_SYSTEM_NAME iOS)
738
+ elseif(SDK_NAME MATCHES "xros")
739
+ set(CMAKE_SYSTEM_NAME visionOS)
740
+ elseif(SDK_NAME MATCHES "xrsimulator")
741
+ set(CMAKE_SYSTEM_NAME visionOS)
742
+ elseif(SDK_NAME MATCHES "macosx")
743
+ set(CMAKE_SYSTEM_NAME Darwin)
744
+ elseif(SDK_NAME MATCHES "appletv")
745
+ set(CMAKE_SYSTEM_NAME tvOS)
746
+ elseif(SDK_NAME MATCHES "watch")
747
+ set(CMAKE_SYSTEM_NAME watchOS)
748
+ endif()
749
+ # Provide flags for a combined FAT library build on newer CMake versions
750
+ if(PLATFORM_INT MATCHES ".*COMBINED")
751
+ set(CMAKE_IOS_INSTALL_COMBINED YES)
752
+ if(CMAKE_GENERATOR MATCHES "Xcode")
753
+ # Set the SDKROOT Xcode properties to a Xcode-friendly value (the SDK_NAME, E.g, iphoneos)
754
+ # This way, Xcode will automatically switch between the simulator and device SDK when building.
755
+ set(CMAKE_XCODE_ATTRIBUTE_SDKROOT "${SDK_NAME}")
756
+ # Force to not build just one ARCH, but all!
757
+ set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO")
758
+ endif()
759
+ endif()
760
+ elseif(NOT DEFINED CMAKE_SYSTEM_NAME AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.10")
761
+ # Legacy code path prior to CMake 3.14 or fallback if no CMAKE_SYSTEM_NAME specified
762
+ set(CMAKE_SYSTEM_NAME iOS)
763
+ elseif(NOT DEFINED CMAKE_SYSTEM_NAME)
764
+ # Legacy code path before CMake 3.14 or fallback if no CMAKE_SYSTEM_NAME specified
765
+ set(CMAKE_SYSTEM_NAME Darwin)
766
+ endif()
767
+ # Standard settings.
768
+ set(CMAKE_SYSTEM_VERSION ${SDK_VERSION} CACHE INTERNAL "")
769
+ set(UNIX ON CACHE BOOL "")
770
+ set(APPLE ON CACHE BOOL "")
771
+ if(PLATFORM STREQUAL "MAC" OR PLATFORM STREQUAL "MAC_ARM64" OR PLATFORM STREQUAL "MAC_UNIVERSAL")
772
+ set(IOS OFF CACHE BOOL "")
773
+ set(MACOS ON CACHE BOOL "")
774
+ elseif(PLATFORM STREQUAL "MAC_CATALYST" OR PLATFORM STREQUAL "MAC_CATALYST_ARM64" OR PLATFORM STREQUAL "MAC_CATALYST_UNIVERSAL")
775
+ set(IOS ON CACHE BOOL "")
776
+ set(MACOS ON CACHE BOOL "")
777
+ elseif(PLATFORM STREQUAL "VISIONOS" OR PLATFORM STREQUAL "SIMULATOR_VISIONOS" OR PLATFORM STREQUAL "VISIONOSCOMBINED")
778
+ set(IOS OFF CACHE BOOL "")
779
+ set(VISIONOS ON CACHE BOOL "")
780
+ else()
781
+ set(IOS ON CACHE BOOL "")
782
+ endif()
783
+ # Set the architectures for which to build.
784
+ set(CMAKE_OSX_ARCHITECTURES ${ARCHS} CACHE INTERNAL "")
785
+ # Change the type of target generated for try_compile() so it'll work when cross-compiling, weak compiler checks
786
+ if(NOT ENABLE_STRICT_TRY_COMPILE_INT)
787
+ set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
788
+ endif()
789
+ # All iOS/Darwin specific settings - some may be redundant.
790
+ if (NOT DEFINED CMAKE_MACOSX_BUNDLE)
791
+ set(CMAKE_MACOSX_BUNDLE YES)
792
+ endif()
793
+ set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
794
+ set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO")
795
+ set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
796
+ set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
797
+ set(CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES ".tbd" ".so")
798
+ set(CMAKE_SHARED_MODULE_PREFIX "lib")
799
+ set(CMAKE_SHARED_MODULE_SUFFIX ".so")
800
+ set(CMAKE_C_COMPILER_ABI ELF)
801
+ set(CMAKE_CXX_COMPILER_ABI ELF)
802
+ set(CMAKE_C_HAS_ISYSROOT 1)
803
+ set(CMAKE_CXX_HAS_ISYSROOT 1)
804
+ set(CMAKE_MODULE_EXISTS 1)
805
+ set(CMAKE_DL_LIBS "")
806
+ set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
807
+ set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
808
+ set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
809
+ set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
810
+
811
+ if(ARCHS MATCHES "((^|;|, )(arm64|arm64e|x86_64))+")
812
+ set(CMAKE_C_SIZEOF_DATA_PTR 8)
813
+ set(CMAKE_CXX_SIZEOF_DATA_PTR 8)
814
+ if(ARCHS MATCHES "((^|;|, )(arm64|arm64e))+")
815
+ set(CMAKE_SYSTEM_PROCESSOR "aarch64")
816
+ else()
817
+ set(CMAKE_SYSTEM_PROCESSOR "x86_64")
818
+ endif()
819
+ else()
820
+ set(CMAKE_C_SIZEOF_DATA_PTR 4)
821
+ set(CMAKE_CXX_SIZEOF_DATA_PTR 4)
822
+ set(CMAKE_SYSTEM_PROCESSOR "arm")
823
+ endif()
824
+
825
+ # Note that only Xcode 7+ supports the newer more specific:
826
+ # -m${SDK_NAME}-version-min flags, older versions of Xcode use:
827
+ # -m(ios/ios-simulator)-version-min instead.
828
+ if(${CMAKE_VERSION} VERSION_LESS "3.11")
829
+ if(PLATFORM_INT STREQUAL "OS" OR PLATFORM_INT STREQUAL "OS64")
830
+ if(XCODE_VERSION_INT VERSION_LESS 7.0)
831
+ set(SDK_NAME_VERSION_FLAGS
832
+ "-mios-version-min=${DEPLOYMENT_TARGET}")
833
+ else()
834
+ # Xcode 7.0+ uses flags we can build directly from SDK_NAME.
835
+ set(SDK_NAME_VERSION_FLAGS
836
+ "-m${SDK_NAME}-version-min=${DEPLOYMENT_TARGET}")
837
+ endif()
838
+ elseif(PLATFORM_INT STREQUAL "TVOS")
839
+ set(SDK_NAME_VERSION_FLAGS
840
+ "-mtvos-version-min=${DEPLOYMENT_TARGET}")
841
+ elseif(PLATFORM_INT STREQUAL "SIMULATOR_TVOS")
842
+ set(SDK_NAME_VERSION_FLAGS
843
+ "-mtvos-simulator-version-min=${DEPLOYMENT_TARGET}")
844
+ elseif(PLATFORM_INT STREQUAL "SIMULATORARM64_TVOS")
845
+ set(SDK_NAME_VERSION_FLAGS
846
+ "-mtvos-simulator-version-min=${DEPLOYMENT_TARGET}")
847
+ elseif(PLATFORM_INT STREQUAL "WATCHOS")
848
+ set(SDK_NAME_VERSION_FLAGS
849
+ "-mwatchos-version-min=${DEPLOYMENT_TARGET}")
850
+ elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS")
851
+ set(SDK_NAME_VERSION_FLAGS
852
+ "-mwatchos-simulator-version-min=${DEPLOYMENT_TARGET}")
853
+ elseif(PLATFORM_INT STREQUAL "SIMULATORARM64_WATCHOS")
854
+ set(SDK_NAME_VERSION_FLAGS
855
+ "-mwatchos-simulator-version-min=${DEPLOYMENT_TARGET}")
856
+ elseif(PLATFORM_INT STREQUAL "MAC")
857
+ set(SDK_NAME_VERSION_FLAGS
858
+ "-mmacosx-version-min=${DEPLOYMENT_TARGET}")
859
+ else()
860
+ # SIMULATOR or SIMULATOR64 both use -mios-simulator-version-min.
861
+ set(SDK_NAME_VERSION_FLAGS
862
+ "-mios-simulator-version-min=${DEPLOYMENT_TARGET}")
863
+ endif()
864
+ elseif(NOT PLATFORM_INT MATCHES "^MAC_CATALYST")
865
+ # Newer versions of CMake sets the version min flags correctly, skip this for Mac Catalyst targets
866
+ set(CMAKE_OSX_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET} CACHE INTERNAL "Minimum OS X deployment version")
867
+ endif()
868
+
869
+ if(DEFINED APPLE_TARGET_TRIPLE_INT)
870
+ set(APPLE_TARGET_TRIPLE ${APPLE_TARGET_TRIPLE_INT} CACHE INTERNAL "")
871
+ set(CMAKE_C_COMPILER_TARGET ${APPLE_TARGET_TRIPLE})
872
+ set(CMAKE_CXX_COMPILER_TARGET ${APPLE_TARGET_TRIPLE})
873
+ set(CMAKE_ASM_COMPILER_TARGET ${APPLE_TARGET_TRIPLE})
874
+ endif()
875
+
876
+ if(PLATFORM_INT MATCHES "^MAC_CATALYST")
877
+ set(C_TARGET_FLAGS "-isystem ${CMAKE_OSX_SYSROOT_INT}/System/iOSSupport/usr/include -iframework ${CMAKE_OSX_SYSROOT_INT}/System/iOSSupport/System/Library/Frameworks")
878
+ endif()
879
+
880
+ if(ENABLE_BITCODE_INT)
881
+ set(BITCODE "-fembed-bitcode")
882
+ set(CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE "bitcode")
883
+ set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "YES")
884
+ else()
885
+ set(BITCODE "")
886
+ set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")
887
+ endif()
888
+
889
+ if(ENABLE_ARC_INT)
890
+ set(FOBJC_ARC "-fobjc-arc")
891
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "YES")
892
+ else()
893
+ set(FOBJC_ARC "-fno-objc-arc")
894
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "NO")
895
+ endif()
896
+
897
+ if(NAMED_LANGUAGE_SUPPORT_INT)
898
+ set(OBJC_VARS "-fobjc-abi-version=2 -DOBJC_OLD_DISPATCH_PROTOTYPES=0")
899
+ set(OBJC_LEGACY_VARS "")
900
+ else()
901
+ set(OBJC_VARS "")
902
+ set(OBJC_LEGACY_VARS "-fobjc-abi-version=2 -DOBJC_OLD_DISPATCH_PROTOTYPES=0")
903
+ endif()
904
+
905
+ if(NOT ENABLE_VISIBILITY_INT)
906
+ foreach(lang ${languages})
907
+ set(CMAKE_${lang}_VISIBILITY_PRESET "hidden" CACHE INTERNAL "")
908
+ endforeach()
909
+ set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "YES")
910
+ set(VISIBILITY "-fvisibility=hidden -fvisibility-inlines-hidden")
911
+ else()
912
+ foreach(lang ${languages})
913
+ set(CMAKE_${lang}_VISIBILITY_PRESET "default" CACHE INTERNAL "")
914
+ endforeach()
915
+ set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "NO")
916
+ set(VISIBILITY "-fvisibility=default")
917
+ endif()
918
+
919
+ if(DEFINED APPLE_TARGET_TRIPLE)
920
+ set(APPLE_TARGET_TRIPLE_FLAG "-target ${APPLE_TARGET_TRIPLE}")
921
+ endif()
922
+
923
+ #Check if Xcode generator is used since that will handle these flags automagically
924
+ if(CMAKE_GENERATOR MATCHES "Xcode")
925
+ message(STATUS "Not setting any manual command-line buildflags, since Xcode is selected as the generator. Modifying the Xcode build-settings directly instead.")
926
+ else()
927
+ set(CMAKE_C_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${OBJC_LEGACY_VARS} ${BITCODE} ${VISIBILITY} ${CMAKE_C_FLAGS}" CACHE INTERNAL
928
+ "Flags used by the compiler during all C build types.")
929
+ set(CMAKE_C_FLAGS_DEBUG "-O0 -g ${CMAKE_C_FLAGS_DEBUG}")
930
+ set(CMAKE_C_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_C_FLAGS_MINSIZEREL}")
931
+ set(CMAKE_C_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
932
+ set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_C_FLAGS_RELEASE}")
933
+ set(CMAKE_CXX_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${OBJC_LEGACY_VARS} ${BITCODE} ${VISIBILITY} ${CMAKE_CXX_FLAGS}" CACHE INTERNAL
934
+ "Flags used by the compiler during all CXX build types.")
935
+ set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g ${CMAKE_CXX_FLAGS_DEBUG}")
936
+ set(CMAKE_CXX_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_CXX_FLAGS_MINSIZEREL}")
937
+ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
938
+ set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_CXX_FLAGS_RELEASE}")
939
+ if(NAMED_LANGUAGE_SUPPORT_INT)
940
+ set(CMAKE_OBJC_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJC_FLAGS}" CACHE INTERNAL
941
+ "Flags used by the compiler during all OBJC build types.")
942
+ set(CMAKE_OBJC_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJC_FLAGS_DEBUG}")
943
+ set(CMAKE_OBJC_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJC_FLAGS_MINSIZEREL}")
944
+ set(CMAKE_OBJC_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJC_FLAGS_RELWITHDEBINFO}")
945
+ set(CMAKE_OBJC_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJC_FLAGS_RELEASE}")
946
+ set(CMAKE_OBJCXX_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJCXX_FLAGS}" CACHE INTERNAL
947
+ "Flags used by the compiler during all OBJCXX build types.")
948
+ set(CMAKE_OBJCXX_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJCXX_FLAGS_DEBUG}")
949
+ set(CMAKE_OBJCXX_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJCXX_FLAGS_MINSIZEREL}")
950
+ set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO}")
951
+ set(CMAKE_OBJCXX_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJCXX_FLAGS_RELEASE}")
952
+ endif()
953
+ set(CMAKE_C_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}" CACHE INTERNAL
954
+ "Flags used by the compiler for all C link types.")
955
+ set(CMAKE_CXX_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}" CACHE INTERNAL
956
+ "Flags used by the compiler for all CXX link types.")
957
+ if(NAMED_LANGUAGE_SUPPORT_INT)
958
+ set(CMAKE_OBJC_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJC_LINK_FLAGS}" CACHE INTERNAL
959
+ "Flags used by the compiler for all OBJC link types.")
960
+ set(CMAKE_OBJCXX_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJCXX_LINK_FLAGS}" CACHE INTERNAL
961
+ "Flags used by the compiler for all OBJCXX link types.")
962
+ endif()
963
+ set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp -arch ${CMAKE_OSX_ARCHITECTURES} ${APPLE_TARGET_TRIPLE_FLAG}" CACHE INTERNAL
964
+ "Flags used by the compiler for all ASM build types.")
965
+ endif()
966
+
967
+ ## Print status messages to inform of the current state
968
+ message(STATUS "Configuring ${SDK_NAME} build for platform: ${PLATFORM_INT}, architecture(s): ${ARCHS}")
969
+ message(STATUS "Using SDK: ${CMAKE_OSX_SYSROOT_INT}")
970
+ message(STATUS "Using C compiler: ${CMAKE_C_COMPILER}")
971
+ message(STATUS "Using CXX compiler: ${CMAKE_CXX_COMPILER}")
972
+ message(STATUS "Using libtool: ${BUILD_LIBTOOL}")
973
+ message(STATUS "Using install name tool: ${CMAKE_INSTALL_NAME_TOOL}")
974
+ if(DEFINED APPLE_TARGET_TRIPLE)
975
+ message(STATUS "Autoconf target triple: ${APPLE_TARGET_TRIPLE}")
976
+ endif()
977
+ message(STATUS "Using minimum deployment version: ${DEPLOYMENT_TARGET}"
978
+ " (SDK version: ${SDK_VERSION})")
979
+ if(MODERN_CMAKE)
980
+ message(STATUS "Merging integrated CMake 3.14+ iOS,tvOS,watchOS,macOS toolchain(s) with this toolchain!")
981
+ if(PLATFORM_INT MATCHES ".*COMBINED")
982
+ message(STATUS "Will combine built (static) artifacts into FAT lib...")
983
+ endif()
984
+ endif()
985
+ if(CMAKE_GENERATOR MATCHES "Xcode")
986
+ message(STATUS "Using Xcode version: ${XCODE_VERSION_INT}")
987
+ endif()
988
+ message(STATUS "CMake version: ${CMAKE_VERSION}")
989
+ if(DEFINED SDK_NAME_VERSION_FLAGS)
990
+ message(STATUS "Using version flags: ${SDK_NAME_VERSION_FLAGS}")
991
+ endif()
992
+ message(STATUS "Using a data_ptr size of: ${CMAKE_CXX_SIZEOF_DATA_PTR}")
993
+ if(ENABLE_BITCODE_INT)
994
+ message(STATUS "Bitcode: Enabled")
995
+ else()
996
+ message(STATUS "Bitcode: Disabled")
997
+ endif()
998
+
999
+ if(ENABLE_ARC_INT)
1000
+ message(STATUS "ARC: Enabled")
1001
+ else()
1002
+ message(STATUS "ARC: Disabled")
1003
+ endif()
1004
+
1005
+ if(ENABLE_VISIBILITY_INT)
1006
+ message(STATUS "Hiding symbols: Disabled")
1007
+ else()
1008
+ message(STATUS "Hiding symbols: Enabled")
1009
+ endif()
1010
+
1011
+ # Set global properties
1012
+ set_property(GLOBAL PROPERTY PLATFORM "${PLATFORM}")
1013
+ set_property(GLOBAL PROPERTY APPLE_TARGET_TRIPLE "${APPLE_TARGET_TRIPLE_INT}")
1014
+ set_property(GLOBAL PROPERTY SDK_VERSION "${SDK_VERSION}")
1015
+ set_property(GLOBAL PROPERTY XCODE_VERSION "${XCODE_VERSION_INT}")
1016
+ set_property(GLOBAL PROPERTY OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}")
1017
+
1018
+ # Export configurable variables for the try_compile() command.
1019
+ set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
1020
+ PLATFORM
1021
+ XCODE_VERSION_INT
1022
+ SDK_VERSION
1023
+ NAMED_LANGUAGE_SUPPORT
1024
+ DEPLOYMENT_TARGET
1025
+ CMAKE_DEVELOPER_ROOT
1026
+ CMAKE_OSX_SYSROOT_INT
1027
+ ENABLE_BITCODE
1028
+ ENABLE_ARC
1029
+ CMAKE_ASM_COMPILER
1030
+ CMAKE_C_COMPILER
1031
+ CMAKE_C_COMPILER_TARGET
1032
+ CMAKE_CXX_COMPILER
1033
+ CMAKE_CXX_COMPILER_TARGET
1034
+ BUILD_LIBTOOL
1035
+ CMAKE_INSTALL_NAME_TOOL
1036
+ CMAKE_C_FLAGS
1037
+ CMAKE_C_DEBUG
1038
+ CMAKE_C_MINSIZEREL
1039
+ CMAKE_C_RELWITHDEBINFO
1040
+ CMAKE_C_RELEASE
1041
+ CMAKE_CXX_FLAGS
1042
+ CMAKE_CXX_FLAGS_DEBUG
1043
+ CMAKE_CXX_FLAGS_MINSIZEREL
1044
+ CMAKE_CXX_FLAGS_RELWITHDEBINFO
1045
+ CMAKE_CXX_FLAGS_RELEASE
1046
+ CMAKE_C_LINK_FLAGS
1047
+ CMAKE_CXX_LINK_FLAGS
1048
+ CMAKE_ASM_FLAGS
1049
+ )
1050
+
1051
+ if(NAMED_LANGUAGE_SUPPORT_INT)
1052
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
1053
+ CMAKE_OBJC_FLAGS
1054
+ CMAKE_OBJC_DEBUG
1055
+ CMAKE_OBJC_MINSIZEREL
1056
+ CMAKE_OBJC_RELWITHDEBINFO
1057
+ CMAKE_OBJC_RELEASE
1058
+ CMAKE_OBJCXX_FLAGS
1059
+ CMAKE_OBJCXX_DEBUG
1060
+ CMAKE_OBJCXX_MINSIZEREL
1061
+ CMAKE_OBJCXX_RELWITHDEBINFO
1062
+ CMAKE_OBJCXX_RELEASE
1063
+ CMAKE_OBJC_LINK_FLAGS
1064
+ CMAKE_OBJCXX_LINK_FLAGS
1065
+ )
1066
+ endif()
1067
+
1068
+ set(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
1069
+ set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks")
1070
+ set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
1071
+ set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names")
1072
+ set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
1073
+ set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
1074
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a")
1075
+ set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name")
1076
+
1077
+ # Set the find root to the SDK developer roots.
1078
+ # Note: CMAKE_FIND_ROOT_PATH is only useful when cross-compiling. Thus, do not set on macOS builds.
1079
+ if(NOT PLATFORM_INT MATCHES "^MAC.*$")
1080
+ list(APPEND CMAKE_FIND_ROOT_PATH "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "")
1081
+ set(CMAKE_IGNORE_PATH "/System/Library/Frameworks;/usr/local/lib;/opt/homebrew" CACHE INTERNAL "")
1082
+ endif()
1083
+
1084
+ # Default to searching for frameworks first.
1085
+ IF(NOT DEFINED CMAKE_FIND_FRAMEWORK)
1086
+ set(CMAKE_FIND_FRAMEWORK FIRST)
1087
+ ENDIF(NOT DEFINED CMAKE_FIND_FRAMEWORK)
1088
+
1089
+ # Set up the default search directories for frameworks.
1090
+ if(PLATFORM_INT MATCHES "^MAC_CATALYST")
1091
+ set(CMAKE_FRAMEWORK_PATH
1092
+ ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks
1093
+ ${CMAKE_OSX_SYSROOT_INT}/System/Library/Frameworks
1094
+ ${CMAKE_OSX_SYSROOT_INT}/System/iOSSupport/System/Library/Frameworks
1095
+ ${CMAKE_FRAMEWORK_PATH} CACHE INTERNAL "")
1096
+ else()
1097
+ set(CMAKE_FRAMEWORK_PATH
1098
+ ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks
1099
+ ${CMAKE_OSX_SYSROOT_INT}/System/Library/Frameworks
1100
+ ${CMAKE_FRAMEWORK_PATH} CACHE INTERNAL "")
1101
+ endif()
1102
+
1103
+ # By default, search both the specified iOS SDK and the remainder of the host filesystem.
1104
+ if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM)
1105
+ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE INTERNAL "")
1106
+ endif()
1107
+ if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
1108
+ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH CACHE INTERNAL "")
1109
+ endif()
1110
+ if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
1111
+ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH CACHE INTERNAL "")
1112
+ endif()
1113
+ if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE)
1114
+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH CACHE INTERNAL "")
1115
+ endif()
1116
+
1117
+ #
1118
+ # Some helper-macros below to simplify and beautify the CMakeFile
1119
+ #
1120
+
1121
+ # This little macro lets you set any Xcode specific property.
1122
+ macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE XCODE_RELVERSION)
1123
+ set(XCODE_RELVERSION_I "${XCODE_RELVERSION}")
1124
+ if(XCODE_RELVERSION_I STREQUAL "All")
1125
+ set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} "${XCODE_VALUE}")
1126
+ else()
1127
+ set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY}[variant=${XCODE_RELVERSION_I}] "${XCODE_VALUE}")
1128
+ endif()
1129
+ endmacro(set_xcode_property)
1130
+
1131
+ # This macro lets you find executable programs on the host system.
1132
+ macro(find_host_package)
1133
+ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
1134
+ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
1135
+ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
1136
+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER)
1137
+ set(_TOOLCHAIN_IOS ${IOS})
1138
+ set(IOS OFF)
1139
+ find_package(${ARGN})
1140
+ set(IOS ${_TOOLCHAIN_IOS})
1141
+ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
1142
+ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
1143
+ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
1144
+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
1145
+ endmacro(find_host_package)