Skip to content

Commit ed4a065

Browse files
committed
Merge remote-tracking branch 'origin/main' into rebranch
2 parents 8bd579c + 1b2ac8c commit ed4a065

File tree

8 files changed

+59
-9
lines changed

8 files changed

+59
-9
lines changed

CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ cmake_dependent_option(LIBSWIFT_BUILD_MODE "How to build libswift. Possible valu
194194
BOOTSTRAPPING: libswift is built with a 2-stage bootstrapping process
195195
BOOTSTRAPPING-WITH-HOSTLIBS: libswift is built with a 2-stage bootstrapping process,
196196
but the compiler links against the host system swift libs (macOS only)
197+
CROSSCOMPILE: libswift is cross-compiled with a native host compiler, provided in
198+
`SWIFT_NATIVE_SWIFT_TOOLS_PATH` (non-Darwin only)
197199
CROSSCOMPILE-WITH-HOSTLIBS: libswift is built with a bootstrapping-with-hostlibs compiled
198200
compiler, provided in `SWIFT_NATIVE_SWIFT_TOOLS_PATH`"
199201
OFF "NOT CMAKE_GENERATOR STREQUAL \"Xcode\"" OFF)
@@ -620,6 +622,8 @@ elseif(LIBSWIFT_BUILD_MODE MATCHES "BOOTSTRAPPING.*")
620622
set(SWIFT_EXEC_FOR_LIBSWIFT "${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/swiftc")
621623
if(LIBSWIFT_BUILD_MODE STREQUAL "BOOTSTRAPPING-WITH-HOSTLIBS")
622624
set(LIBSWIFT_BUILD_MODE "CROSSCOMPILE-WITH-HOSTLIBS")
625+
elseif(LIBSWIFT_BUILD_MODE STREQUAL "BOOTSTRAPPING")
626+
set(LIBSWIFT_BUILD_MODE "CROSSCOMPILE")
623627
else()
624628
set(LIBSWIFT_BUILD_MODE "HOSTTOOLS")
625629
endif()

cmake/modules/AddSwift.cmake

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,10 @@ function(add_libswift name)
739739
get_filename_component(swift_exec_bin_dir ${ALS_SWIFT_EXEC} DIRECTORY)
740740
set(sdk_option ${sdk_option} "-resource-dir" "${swift_exec_bin_dir}/../bootstrapping0/lib/swift")
741741
endif()
742+
elseif(${LIBSWIFT_BUILD_MODE} STREQUAL "CROSSCOMPILE")
743+
set(sdk_option "-sdk" "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_PATH}")
744+
get_filename_component(swift_exec_bin_dir ${ALS_SWIFT_EXEC} DIRECTORY)
745+
set(sdk_option ${sdk_option} "-resource-dir" "${swift_exec_bin_dir}/../lib/swift")
742746
endif()
743747
get_versioned_target_triple(target ${SWIFT_HOST_VARIANT_SDK}
744748
${SWIFT_HOST_VARIANT_ARCH} "${deployment_version}")
@@ -965,22 +969,28 @@ function(add_swift_host_tool executable)
965969
BUILD_WITH_INSTALL_RPATH YES
966970
INSTALL_RPATH "${RPATH_LIST}")
967971
968-
elseif(SWIFT_HOST_VARIANT_SDK STREQUAL "LINUX" AND ASHT_HAS_LIBSWIFT AND LIBSWIFT_BUILD_MODE)
972+
elseif(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD" AND ASHT_HAS_LIBSWIFT AND LIBSWIFT_BUILD_MODE)
969973
set(swiftrt "swiftImageRegistrationObject${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_OBJECT_FORMAT}-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH}")
970-
if(LIBSWIFT_BUILD_MODE STREQUAL "HOSTTOOLS")
974+
if(${LIBSWIFT_BUILD_MODE} MATCHES "HOSTTOOLS|CROSSCOMPILE")
971975
# At build time and and run time, link against the swift libraries in the
972976
# installed host toolchain.
973977
get_filename_component(swift_bin_dir ${SWIFT_EXEC_FOR_LIBSWIFT} DIRECTORY)
974978
get_filename_component(swift_dir ${swift_bin_dir} DIRECTORY)
975-
set(host_lib_dir "${swift_dir}/lib/swift/linux")
979+
set(host_lib_dir "${swift_dir}/lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}")
976980
977981
target_link_libraries(${executable} PRIVATE ${swiftrt})
978982
target_link_libraries(${executable} PRIVATE "swiftCore")
979983
980984
target_link_directories(${executable} PRIVATE ${host_lib_dir})
981-
set_target_properties(${executable} PROPERTIES
982-
BUILD_WITH_INSTALL_RPATH YES
983-
INSTALL_RPATH "${host_lib_dir}")
985+
if(LIBSWIFT_BUILD_MODE STREQUAL "HOSTTOOLS")
986+
set_target_properties(${executable} PROPERTIES
987+
BUILD_WITH_INSTALL_RPATH YES
988+
INSTALL_RPATH "${host_lib_dir}")
989+
else()
990+
set_target_properties(${executable} PROPERTIES
991+
BUILD_WITH_INSTALL_RPATH YES
992+
INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}")
993+
endif()
984994
985995
elseif(LIBSWIFT_BUILD_MODE STREQUAL "BOOTSTRAPPING")
986996
# At build time link against the built swift libraries from the
@@ -996,7 +1006,7 @@ function(add_swift_host_tool executable)
9961006
# bootstrapping stage.
9971007
set_target_properties(${executable} PROPERTIES
9981008
BUILD_WITH_INSTALL_RPATH YES
999-
INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_SDK_LINUX_LIB_SUBDIR}")
1009+
INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}")
10001010
10011011
elseif(LIBSWIFT_BUILD_MODE STREQUAL "BOOTSTRAPPING-WITH-HOSTLIBS")
10021012
message(FATAL_ERROR "LIBSWIFT_BUILD_MODE 'BOOTSTRAPPING-WITH-HOSTLIBS' not supported on Linux")

lib/ClangImporter/ImportDecl.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9331,6 +9331,13 @@ ClangImporter::Implementation::importDeclContextOf(
93319331
switch (context.getKind()) {
93329332
case EffectiveClangContext::DeclContext: {
93339333
auto dc = context.getAsDeclContext();
9334+
9335+
// For C++-Interop in cases where #ifdef __cplusplus surround an extern "C"
9336+
// you want to first check if the TU decl is the parent of this extern "C"
9337+
// decl (aka LinkageSpecDecl) and then proceed.
9338+
if (dc->getDeclKind() == clang::Decl::LinkageSpec)
9339+
dc = dc->getParent();
9340+
93349341
if (dc->isTranslationUnit()) {
93359342
if (auto *module = getClangModuleForDecl(decl))
93369343
return module;

libswift/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ else()
2020

2121
add_subdirectory(Sources)
2222

23-
if(${LIBSWIFT_BUILD_MODE} MATCHES "HOSTTOOLS|CROSSCOMPILE-WITH-HOSTLIBS")
23+
if(${LIBSWIFT_BUILD_MODE} MATCHES "HOSTTOOLS|CROSSCOMPILE")
2424

2525
if (NOT SWIFT_EXEC_FOR_LIBSWIFT)
2626
message(FATAL_ERROR "Need a swift toolchain for building libswift")

stdlib/cmake/modules/SwiftSource.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@ function(_compile_swift_files
738738
# stdlib in the current stage is not built yet.
739739
if(${SWIFT_HOST_VARIANT_SDK} IN_LIST SWIFT_APPLE_PLATFORMS)
740740
set(set_environment_args "${CMAKE_COMMAND}" "-E" "env" "DYLD_LIBRARY_PATH=${bs_lib_dir}")
741-
elseif(SWIFT_HOST_VARIANT_SDK STREQUAL "LINUX")
741+
elseif(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD")
742742
set(set_environment_args "${CMAKE_COMMAND}" "-E" "env" "LD_LIBRARY_PATH=${bs_lib_dir}")
743743
else()
744744
message(FATAL_ERROR "TODO: bootstrapping support for ${SWIFT_HOST_VARIANT_SDK}")
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
@interface A
2+
@end
3+
4+
extern "C"
5+
@interface A (CAT1)
6+
- (int)foo;
7+
@end
8+
9+
@interface A (CAT2)
10+
- (int)bar;
11+
@end
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module ExternC {
2+
header "extern-c.h"
3+
requires cplusplus
4+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// RUN: %target-swift-ide-test -print-module -module-to-print=ExternC -I %S/Inputs -source-filename=x -enable-cxx-interop -enable-objc-interop | %FileCheck %s
2+
3+
// CHECK: class A {
4+
// CHECK-NEXT: }
5+
6+
// CHECK: extension A {
7+
// CHECK-NEXT: class func foo() -> Int32
8+
// CHECK-NEXT: func foo() -> Int32
9+
// CHECK-NEXT: }
10+
11+
// CHECK: extension A {
12+
// CHECK-NEXT: class func bar() -> Int32
13+
// CHECK-NEXT: func bar() -> Int32
14+
// CHECK-NEXT: }

0 commit comments

Comments
 (0)