Skip to content

Commit cec9cd4

Browse files
authored
Merge pull request #61343 from hyp/eng/ship-interop-hdr-toolchain
[interop][SwiftToCxx] install _SwiftCxxInteroperability.h header as p…
2 parents 43848fd + a24ebea commit cec9cd4

File tree

6 files changed

+55
-19
lines changed

6 files changed

+55
-19
lines changed

lib/PrintAsClang/CMakeLists.txt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
1+
set(datafiles
2+
_SwiftCxxInteroperability.h
3+
)
4+
5+
set(SWIFTLIB_DIR
6+
"${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib/swift")
7+
set(output_dir "${SWIFTLIB_DIR}/swiftToCxx")
8+
9+
add_custom_command(
10+
OUTPUT "${output_dir}"
11+
COMMAND ${CMAKE_COMMAND} "-E" "make_directory" "${output_dir}")
12+
13+
set (outputs)
14+
15+
foreach(input ${datafiles})
16+
set(source "${CMAKE_CURRENT_SOURCE_DIR}/${input}")
17+
set(dest "${output_dir}/${input}")
18+
add_custom_command(OUTPUT
19+
"${output_dir}/${input}"
20+
DEPENDS
21+
"${CMAKE_CURRENT_SOURCE_DIR}/${input}"
22+
COMMAND
23+
"${CMAKE_COMMAND}" "-E" "copy" "${source}" "${dest}")
24+
list(APPEND outputs "${output_dir}/${input}")
25+
endforeach()
26+
list(APPEND outputs "${output_dir}")
27+
28+
add_custom_target("copy_swiftToCxx_shims"
29+
DEPENDS "${output_dir}" "${outputs}"
30+
COMMENT "Copying Swift to C++ shims to ${output_dir}")
31+
32+
swift_install_in_component(FILES ${datafiles}
33+
DESTINATION "lib/swift/swiftToCxx"
34+
COMPONENT compiler)
135

236
add_swift_host_library(swiftPrintAsClang STATIC
337
ClangSyntaxPrinter.cpp
@@ -17,4 +51,7 @@ target_link_libraries(swiftPrintAsClang PRIVATE
1751
swiftIDE
1852
swiftIRGen)
1953

54+
add_dependencies(swiftPrintAsClang
55+
"copy_swiftToCxx_shims")
56+
2057
set_swift_llvm_is_available(swiftPrintAsClang)

lib/PrintAsClang/PrintAsClang.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,16 @@ static void writePrologue(raw_ostream &out, ASTContext &ctx,
107107
out << "#include <stdlib.h>\n";
108108
out << "#include <new>\n";
109109
out << "#include <type_traits>\n";
110-
// FIXME: Look for the header in the SDK.
111110
out << "// Look for the C++ interop support header relative to clang's resource dir:\n";
112-
out << "// '<toolchain>/usr/lib/clang/<version>/include/../../../swift/shims'.\n";
113-
out << "#if __has_include(<../../../swift/shims/_SwiftCxxInteroperability.h>)\n";
114-
out << "#include <../../../swift/shims/_SwiftCxxInteroperability.h>\n";
115-
out << "// Alternatively, allow user to find the header using additional include path into 'swift'.\n";
116-
out << "#elif __has_include(<shims/_SwiftCxxInteroperability.h>)\n";
117-
out << "#include <shims/_SwiftCxxInteroperability.h>\n";
111+
out << "// '<toolchain>/usr/lib/clang/<version>/include/../../../swift/swiftToCxx'.\n";
112+
out << "#if __has_include(<../../../swift/swiftToCxx/_SwiftCxxInteroperability.h>)\n";
113+
out << "#include <../../../swift/swiftToCxx/_SwiftCxxInteroperability.h>\n";
114+
out << "#elif __has_include(<../../../../lib/swift/swiftToCxx/_SwiftCxxInteroperability.h>)\n";
115+
out << "// '<toolchain>/usr/local/lib/clang/<version>/include/../../../../lib/swift/swiftToCxx'.\n";
116+
out << "#include <../../../../lib/swift/swiftToCxx/_SwiftCxxInteroperability.h>\n";
117+
out << "// Alternatively, allow user to find the header using additional include path into '<toolchain>/lib/swift'.\n";
118+
out << "#elif __has_include(<swiftToCxx/_SwiftCxxInteroperability.h>)\n";
119+
out << "#include <swiftToCxx/_SwiftCxxInteroperability.h>\n";
118120
out << "#endif\n";
119121
},
120122
[&] {

stdlib/public/SwiftShims/swift/shims/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ set(sources
2222
UnicodeData.h
2323
Visibility.h
2424
_SwiftConcurrency.h
25-
_SwiftCxxInteroperability.h
2625
_SwiftDistributed.h
2726

2827
module.modulemap

stdlib/public/SwiftShims/swift/shims/module.modulemap

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,3 @@ module SwiftOverlayShims {
3030
header "LibcOverlayShims.h"
3131
export *
3232
}
33-
34-
module _SwiftCxxInteropShims {
35-
header "_SwiftCxxInteroperability.h"
36-
export *
37-
}

test/PrintAsCxx/empty.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,15 @@
3333
// CHECK-NEXT: #include <new>
3434
// CHECK-NEXT: #include <type_traits>
3535
// CHECK-NEXT: // Look for the C++ interop support header relative to clang's resource dir:
36-
// CHECK-NEXT: // '<toolchain>/usr/lib/clang/<version>/include/../../../swift/shims'.
37-
// CHECK-NEXT: #if __has_include(<../../../swift/shims/_SwiftCxxInteroperability.h>)
38-
// CHECK-NEXT: #include <../../../swift/shims/_SwiftCxxInteroperability.h>
39-
// CHECK-NEXT: // Alternatively, allow user to find the header using additional include path into 'swift'.
40-
// CHECK-NEXT: #elif __has_include(<shims/_SwiftCxxInteroperability.h>)
41-
// CHECK-NEXT: #include <shims/_SwiftCxxInteroperability.h>
36+
// CHECK-NEXT: // '<toolchain>/usr/lib/clang/<version>/include/../../../swift/swiftToCxx'.
37+
// CHECK-NEXT: #if __has_include(<../../../swift/swiftToCxx/_SwiftCxxInteroperability.h>)
38+
// CHECK-NEXT: #include <../../../swift/swiftToCxx/_SwiftCxxInteroperability.h>
39+
// CHECK-NEXT: #elif __has_include(<../../../../lib/swift/swiftToCxx/_SwiftCxxInteroperability.h>)
40+
// CHECK-NEXT: // '<toolchain>/usr/local/lib/clang/<version>/include/../../../../lib/swift/swiftToCxx'.
41+
// CHECK-NEXT: #include <../../../../lib/swift/swiftToCxx/_SwiftCxxInteroperability.h>
42+
// CHECK-NEXT: // Alternatively, allow user to find the header using additional include path into '<toolchain>/lib/swift'.
43+
// CHECK-NEXT: #elif __has_include(<swiftToCxx/_SwiftCxxInteroperability.h>)
44+
// CHECK-NEXT: #include <swiftToCxx/_SwiftCxxInteroperability.h>
4245
// CHECK-NEXT: #endif
4346
// CHECK-NEXT: #else
4447
// CHECK-NEXT: #include <stdint.h>

0 commit comments

Comments
 (0)