Skip to content

Commit daec2da

Browse files
Resolve conflicts with master
2 parents 4419614 + 12ec07f commit daec2da

File tree

996 files changed

+35895
-13758
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

996 files changed

+35895
-13758
lines changed

.pep8

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
[flake8]
2-
filename = *.py,80+-check,Benchmark_Driver,Benchmark_DTrace.in,Benchmark_GuardMalloc.in,Benchmark_RuntimeLeaksRunner.in,build-script,gyb,line-directive,mock-distcc,ns-html2rst,recursive-lipo,rth,split-generated-tests,submit-benchmark-results,update-checkout,viewcfg
2+
filename = *.py,80+-check,Benchmark_Driver,Benchmark_DTrace.in,Benchmark_GuardMalloc.in,Benchmark_RuntimeLeaksRunner.in,build-script,check-incremental,gyb,line-directive,mock-distcc,ns-html2rst,recursive-lipo,rth,split-generated-tests,submit-benchmark-results,update-checkout,viewcfg,backtrace-check

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,19 @@ Swift 3.0
212212
}
213213
```
214214

215+
* [SE-0064](https://github.com/apple/swift-evolution/blob/master/proposals/0064-property-selectors.md) The Objective-C selectors for the getter or setter of a property can now be referenced with `#selector`. For example:
216+
217+
```swift
218+
let sel1 = #selector(getter: UIView.backgroundColor) // sel1 has type Selector
219+
let sel2 = #selector(setter: UIView.backgroundColor) // sel2 has type Selector
220+
```
221+
222+
* [SE-0062](https://github.com/apple/swift-evolution/blob/master/proposals/0062-objc-keypaths.md): A key-path can now be formed with `#keyPath`. For example:
223+
224+
```swift
225+
person.valueForKeyPath(#keyPath(Person.bestFriend.lastName))
226+
```
227+
215228
Swift 2.2
216229
---------
217230

CMakeLists.txt

Lines changed: 137 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ option(SWIFT_STDLIB_SIL_DEBUGGING
3636
"Compile the Swift standard library with -gsil to enable debugging and profiling on SIL level"
3737
FALSE)
3838

39+
option(SWIFT_CHECK_INCREMENTAL_COMPILATION
40+
"Check if incremental compilation works when compiling the Swift libraries"
41+
FALSE)
42+
3943
option(SWIFT_BUILD_TOOLS
4044
"Build the Swift compiler and other tools"
4145
TRUE)
@@ -230,14 +234,6 @@ option(SWIFT_STDLIB_ENABLE_RESILIENCE
230234
"Build the standard libraries and overlays with resilience enabled; see docs/LibraryEvolution.rst"
231235
FALSE)
232236

233-
option(SWIFT_STDLIB_ENABLE_REFLECTION_METADATA
234-
"Build the standard libraries and overlays with remote reflection metadata; see docs/proposals/RemoteMirrors.rst"
235-
TRUE)
236-
237-
option(SWIFT_STDLIB_ENABLE_REFLECTION_NAMES
238-
"Build the standard libraries and overlays with remote reflection names; see docs/proposals/RemoteMirrors.rst"
239-
FALSE)
240-
241237
option(SWIFT_STDLIB_SIL_SERIALIZE_ALL
242238
"Build the standard libraries and overlays serializing all method bodies"
243239
TRUE)
@@ -286,6 +282,7 @@ include(CMakeParseArguments)
286282
include(SwiftTranslateFlag)
287283
include(SwiftHandleGybSources)
288284
include(SwiftSetIfArchBitness)
285+
include(SwiftSource)
289286
include(AddSwift)
290287
include(SwiftConfigureSDK)
291288
include(SwiftInstallComponents)
@@ -385,29 +382,78 @@ function(check_working_std_regex result_var_name)
385382
# Apple operating systems use libc++, which has a working std::regex.
386383
set("${result_var_name}" TRUE PARENT_SCOPE)
387384
else()
388-
# libstdc++ 4.8 has an incomplete std::regex implementation, and crashes
389-
# on many regexes.
390-
# libstdc++ 4.9 works.
391-
set(std_regex_test_source
392-
"
393-
#include <regex>
394-
const std::regex broken_regex{
395-
\"([a]+)\",
396-
std::regex::ECMAScript | std::regex::nosubs};
397-
398-
int main() {}
399-
")
400-
401-
check_cxx_source_runs("${std_regex_test_source}" result)
402-
if (result)
403-
set("${result_var_name}" TRUE PARENT_SCOPE)
404-
else()
385+
if(CMAKE_CROSSCOMPILING)
386+
# Can't run C source when cross-compiling; assume false until we have a static check.
405387
set("${result_var_name}" FALSE PARENT_SCOPE)
388+
else()
389+
# libstdc++ 4.8 has an incomplete std::regex implementation, and crashes
390+
# on many regexes.
391+
# libstdc++ 4.9 works.
392+
set(std_regex_test_source
393+
"
394+
#include <regex>
395+
const std::regex broken_regex{
396+
\"([a]+)\",
397+
std::regex::ECMAScript | std::regex::nosubs};
398+
399+
int main() {}
400+
")
401+
402+
check_cxx_source_runs("${std_regex_test_source}" "${result_var_name}_TEST")
403+
if ("${${result_var_name}_TEST}")
404+
set("${result_var_name}" TRUE PARENT_SCOPE)
405+
else()
406+
set("${result_var_name}" FALSE PARENT_SCOPE)
407+
endif()
406408
endif()
407409
endif()
408410
endfunction()
409411
check_working_std_regex(SWIFT_HAVE_WORKING_STD_REGEX)
410412

413+
# If SWIFT_HOST_VARIANT_SDK not given, try to detect from the CMAKE_SYSTEM_NAME.
414+
if(SWIFT_HOST_VARIANT_SDK)
415+
set(SWIFT_HOST_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
416+
else()
417+
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
418+
set(SWIFT_HOST_VARIANT_SDK_default "LINUX")
419+
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
420+
set(SWIFT_HOST_VARIANT_SDK_default "FREEBSD")
421+
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN")
422+
set(SWIFT_HOST_VARIANT_SDK_default "CYGWIN")
423+
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
424+
set(SWIFT_HOST_VARIANT_SDK_default "OSX")
425+
else()
426+
message(FATAL_ERROR "Unable to detect SDK for host system: ${CMAKE_SYSTEM_NAME}")
427+
endif()
428+
endif()
429+
430+
# If SWIFT_HOST_VARIANT_ARCH not given, try to detect from the CMAKE_SYSTEM_PROCESSOR.
431+
if(SWIFT_HOST_VARIANT_ARCH)
432+
set(SWIFT_HOST_VARIANT_ARCH_default, "${SWIFT_HOST_VARIANT_ARCH}")
433+
else()
434+
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
435+
set(SWIFT_HOST_VARIANT_ARCH_default "x86_64")
436+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
437+
set(SWIFT_HOST_VARIANT_ARCH_default "aarch64")
438+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64")
439+
set(SWIFT_HOST_VARIANT_ARCH_default "powerpc64")
440+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le")
441+
set(SWIFT_HOST_VARIANT_ARCH_default "powerpc64le")
442+
# FIXME: Only matches v6l/v7l - by far the most common variants
443+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l")
444+
set(SWIFT_HOST_VARIANT_ARCH_default "armv6")
445+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7l")
446+
set(SWIFT_HOST_VARIANT_ARCH_default "armv7")
447+
else()
448+
message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
449+
endif()
450+
endif()
451+
452+
set(SWIFT_HOST_VARIANT_SDK "${SWIFT_HOST_VARIANT_SDK_default}" CACHE STRING
453+
"Deployment sdk for Swift host tools (the compiler).")
454+
set(SWIFT_HOST_VARIANT_ARCH "${SWIFT_HOST_VARIANT_ARCH_default}" CACHE STRING
455+
"Deployment arch for Swift host tools (the compiler).")
456+
411457
#
412458
# Enable additional warnings.
413459
#
@@ -434,114 +480,95 @@ function(is_sdk_requested name result_var_name)
434480
endif()
435481
endfunction()
436482

437-
# FIXME: separate the notions of SDKs used for compiler tools and target
438-
# binaries.
439-
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
483+
# FIXME: the parameters we specify in SWIFT_SDKS are lacking architecture specifics,
484+
# so we need to hard-code it. For example, the SDK for Android is just 'ANDROID',
485+
# which we assume below to be armv7.
486+
# The iOS SDKs all have their architectures hardcoded because they are just specified by name (e.g. 'IOS' or 'WATCHOS').
487+
# We can't cross-compile the standard library for another linux architecture,
488+
# because the SDK list would just be 'LINUX' and we couldn't disambiguate it from the host.
489+
#
490+
# To fix it, we would need to append the architecture to the SDKs,
491+
# for example: 'OSX-x86_64;IOS-armv7;...etc'.
492+
# We could easily do that - we have all of that information in build-script-impl.
493+
# Also, we would need to be provided with the sysroot for each SDK (see SWIFT_ANDROID_SDK_PATH/SWIFT_SDK_ANDROID_PATH).
494+
# Darwin targets cheat and use `xcrun`.
495+
496+
if("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "LINUX")
497+
440498
set(CMAKE_EXECUTABLE_FORMAT "ELF")
441-
442499
set(SWIFT_HOST_VARIANT "linux" CACHE STRING
443500
"Deployment OS for Swift host tools (the compiler) [linux].")
444501

445-
set(SWIFT_HOST_VARIANT_SDK "LINUX")
446-
set(SWIFT_PRIMARY_VARIANT_SDK_default "LINUX")
447-
448-
# FIXME: This will not work while trying to cross-compile.
449-
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
450-
set(SWIFT_HOST_VARIANT_ARCH "x86_64")
451-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "x86_64")
452-
453-
if("${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
454-
set(swift_can_crosscompile_stdlib FALSE)
502+
# Calculate the host triple
503+
if("${SWIFT_HOST_TRIPLE}" STREQUAL "")
504+
if("${SWIFT_HOST_VARIANT_ARCH}" STREQUAL "x86_64")
505+
set(SWIFT_HOST_TRIPLE "x86_64-unknown-linux-gnu")
506+
elseif("${SWIFT_HOST_VARIANT_ARCH}" STREQUAL "aarch64")
507+
set(SWIFT_HOST_TRIPLE "aarch64-unknown-linux-gnu")
508+
elseif("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "(powerpc64|powerpc64le)")
509+
set(SWIFT_HOST_TRIPLE "${SWIFT_HOST_VARIANT_ARCH}-unknown-linux-gnu")
510+
elseif("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "(armv6|armv7)")
511+
set(SWIFT_HOST_TRIPLE "${SWIFT_HOST_VARIANT_ARCH}-unknown-linux-gnueabihf")
455512
else()
456-
set(swift_can_crosscompile_stdlib TRUE)
513+
message(FATAL_ERROR "Unable to calculate triple for linux host on ${SWIFT_HOST_VARIANT_ARCH}")
457514
endif()
515+
endif()
458516

459-
is_sdk_requested(LINUX swift_build_linux)
460-
if(swift_build_linux)
461-
configure_sdk_unix(LINUX "Linux" "linux" "linux" "x86_64" "x86_64-unknown-linux-gnu")
462-
set(SWIFT_PRIMARY_VARIANT_SDK_default "LINUX")
463-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "x86_64")
464-
endif()
517+
# Should we build the standard library for the host?
518+
is_sdk_requested(LINUX swift_build_linux)
519+
if(swift_build_linux)
520+
configure_sdk_unix(LINUX "Linux" "linux" "${SWIFT_HOST_VARIANT}" "${SWIFT_HOST_VARIANT_ARCH}" "${SWIFT_HOST_TRIPLE}" "/")
521+
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
522+
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
523+
endif()
465524

466-
is_sdk_requested(ANDROID swift_build_android)
467-
if(swift_build_android AND ${swift_can_crosscompile_stdlib})
468-
configure_sdk_unix(ANDROID "Android" "android" "android" "armv7" "armv7-none-linux-androideabi")
469-
# This must be set, as variables such as "${SWIFT_SDK_${sdk}_PATH}" are
470-
# referenced in several other locations.
471-
set(SWIFT_SDK_ANDROID_PATH "${SWIFT_ANDROID_SDK_PATH}")
525+
# Compatible cross-compile SDKS for LINUX: ANDROID (arch always armv7)
526+
is_sdk_requested(ANDROID swift_build_android)
527+
if("${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
528+
set(swift_can_crosscompile_stdlib_android FALSE)
529+
else()
530+
set(swift_can_crosscompile_stdlib_android TRUE)
531+
endif()
472532

533+
if(swift_build_android AND ${swift_can_crosscompile_stdlib_android})
534+
configure_sdk_unix(ANDROID "Android" "android" "android" "armv7" "armv7-none-linux-androideabi" "${SWIFT_ANDROID_SDK_PATH}")
535+
# If we're not building for the host, the cross-compiled target should be the 'primary variant'.
536+
if("${swift_build_linux}" STREQUAL "FALSE")
473537
set(SWIFT_PRIMARY_VARIANT_SDK_default "ANDROID")
474538
set(SWIFT_PRIMARY_VARIANT_ARCH_default "armv7")
475539
endif()
476-
477-
# FIXME: This only matches ARMv6l (by far the most common variant).
478-
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l")
479-
configure_sdk_unix(LINUX "Linux" "linux" "linux" "armv6" "armv6-unknown-linux-gnueabihf")
480-
set(SWIFT_HOST_VARIANT_ARCH "armv6")
481-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "armv6")
482-
# FIXME: This only matches ARMv7l (by far the most common variant).
483-
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7l")
484-
configure_sdk_unix(LINUX "Linux" "linux" "linux" "armv7" "armv7-unknown-linux-gnueabihf")
485-
set(SWIFT_HOST_VARIANT_ARCH "armv7")
486-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "armv7")
487-
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
488-
configure_sdk_unix(LINUX "Linux" "linux" "linux" "aarch64" "aarch64-unknown-linux-gnu")
489-
set(SWIFT_HOST_VARIANT_ARCH "aarch64")
490-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "aarch64")
491-
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64")
492-
configure_sdk_unix(LINUX "Linux" "linux" "linux" "powerpc64" "powerpc64-unknown-linux-gnu")
493-
set(SWIFT_HOST_VARIANT_ARCH "powerpc64")
494-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "powerpc64")
495-
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le")
496-
configure_sdk_unix(LINUX "Linux" "linux" "linux" "powerpc64le" "powerpc64le-unknown-linux-gnu")
497-
set(SWIFT_HOST_VARIANT_ARCH "powerpc64le")
498-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "powerpc64le")
499-
else()
500-
message(FATAL_ERROR "Unknown or unsupported architecture: ${CMAKE_SYSTEM_PROCESSOR}")
501540
endif()
502541

503-
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
542+
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "FREEBSD")
543+
544+
set(CMAKE_EXECUTABLE_FORMAT "ELF")
545+
set(SWIFT_HOST_VARIANT "freebsd" CACHE STRING
546+
"Deployment OS for Swift host tools (the compiler) [freebsd].")
547+
504548
# FIXME: Using the host OS version won't produce correct results for
505549
# cross-compilation.
506550
string(REPLACE "[-].*" "" FREEBSD_SYSTEM_VERSION ${CMAKE_SYSTEM_VERSION})
507551
message(STATUS "FreeBSD Version: ${FREEBSD_SYSTEM_VERSION}")
508552
configure_sdk_unix(FREEBSD "FreeBSD" "freebsd" "freebsd" "x86_64"
509-
"x86_64-unknown-freebsd${FREEBSD_SYSTEM_VERSION}")
510-
511-
set(CMAKE_EXECUTABLE_FORMAT "ELF")
512-
513-
set(SWIFT_HOST_VARIANT "freebsd" CACHE STRING
514-
"Deployment OS for Swift host tools (the compiler) [freebsd].")
515-
516-
set(SWIFT_HOST_VARIANT_SDK "FREEBSD")
517-
set(SWIFT_HOST_VARIANT_ARCH "x86_64")
518-
519-
set(SWIFT_PRIMARY_VARIANT_SDK_default "FREEBSD")
553+
"x86_64-unknown-freebsd${FREEBSD_SYSTEM_VERSION}" "/")
554+
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
520555
set(SWIFT_PRIMARY_VARIANT_ARCH_default "x86_64")
521-
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN")
522-
configure_sdk_unix(CYGWIN "Cygwin" "windows" "cygwin" "x86_64" "x86_64-unknown-windows-cygnus")
523-
524-
# set(CMAKE_EXECUTABLE_FORMAT "ELF")
525-
556+
557+
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "CYGWIN")
558+
559+
# set(CMAKE_EXECUTABLE_FORMAT "ELF")
526560
set(SWIFT_HOST_VARIANT "windows" CACHE STRING
527561
"Deployment OS for Swift host tools (the compiler) [windows].")
528-
529-
set(SWIFT_HOST_VARIANT_SDK "CYGWIN")
530-
set(SWIFT_HOST_VARIANT_ARCH "x86_64")
531562

532-
set(SWIFT_PRIMARY_VARIANT_SDK_default "CYGWIN")
563+
configure_sdk_unix(CYGWIN "Cygwin" "windows" "cygwin" "windows" "x86_64-unknown-windows-cygnus" "/")
564+
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
533565
set(SWIFT_PRIMARY_VARIANT_ARCH_default "x86_64")
534-
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
535-
# Set defaults.
566+
567+
elseif("${SWIFT_HOST_VARIANT_SDK}" MATCHES "(OSX|IOS*|TVOS*|WATCHOS*)")
536568

537569
set(SWIFT_HOST_VARIANT "macosx" CACHE STRING
538570
"Deployment OS for Swift host tools (the compiler) [macosx, iphoneos].")
539571

540-
set(SWIFT_HOST_VARIANT_SDK "OSX" CACHE STRING
541-
"Deployment sdk for Swift host tools (the compiler).")
542-
set(SWIFT_HOST_VARIANT_ARCH "x86_64" CACHE STRING
543-
"Deployment arch for Swift host tools (the compiler).")
544-
545572
# Display Xcode toolchain version.
546573
# The SDK configuration below prints each SDK version.
547574
execute_process(
@@ -562,6 +589,9 @@ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
562589
configure_target_variant(OSX-R "OS X Release" OSX R "Release")
563590
endif()
564591

592+
# Compatible cross-compile SDKS for Darwin OSes: IOS, IOS_SIMULATOR, TVOS,
593+
# TVOS_SIMULATOR, WATCHOS, WATCHOS_SIMULATOR (archs hardcoded below).
594+
565595
if(XCODE)
566596
# FIXME: Cannot cross-compile stdlib using Xcode. Xcode insists on
567597
# passing -mmacosx-version-min to the compiler, and we want to pass
@@ -649,9 +679,10 @@ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
649679
# set(SWIFT_PRIMARY_VARIANT ${SWIFT_PRIMARY_VARIANT_GUESS} CACHE STRING
650680
# "[OSX-DA, OSX-RA, OSX-R, IOS-DA, IOS-RA, IOS-R, IOS_SIMULATOR-DA, IOS_SIMULATOR-RA, IOS_SIMULATOR-R]")
651681
#
652-
# FIXME: hardcode OS X as the default variant for now.
682+
# Primary variant is always OSX; even on iOS hosts.
653683
set(SWIFT_PRIMARY_VARIANT_SDK_default "OSX")
654684
set(SWIFT_PRIMARY_VARIANT_ARCH_default "x86_64")
685+
655686
endif()
656687

657688
if("${SWIFT_PRIMARY_VARIANT_SDK}" STREQUAL "")

0 commit comments

Comments
 (0)