Skip to content

Commit 67eaebb

Browse files
committed
[cxx-interop] Make libstdc++ header and modulemap arch-independent
This moves `libstdcxx.modulemap` and `libstdcxx.h` from `*.xctoolchain/usr/lib/swift/macosx/arm64e` to `*.xctoolchain/usr/lib/swift/macosx` to simplify distribution. rdar://110788977
1 parent fbf15ae commit 67eaebb

File tree

3 files changed

+95
-100
lines changed

3 files changed

+95
-100
lines changed

lib/ClangImporter/ClangIncludePaths.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ static Optional<Path> getLibStdCxxModuleMapPath(
105105
SearchPathOptions &opts, const llvm::Triple &triple,
106106
const llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> &vfs) {
107107
return getActualModuleMapPath("libstdcxx.modulemap", opts, triple,
108-
/*isArchSpecific*/ true, vfs);
108+
/*isArchSpecific*/ false, vfs);
109109
}
110110

111111
Optional<SmallString<128>>

stdlib/public/Cxx/libstdcxx/CMakeLists.txt

Lines changed: 90 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -4,120 +4,115 @@ foreach(sdk ${SWIFT_SDKS})
44
continue()
55
endif()
66

7-
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
8-
set(arch_suffix "${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
9-
set(arch_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}")
7+
set(module_dir "${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
8+
set(module_dir_static "${SWIFTSTATICLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
109

11-
set(module_dir "${SWIFTLIB_DIR}/${arch_subdir}")
12-
set(module_dir_static "${SWIFTSTATICLIB_DIR}/${arch_subdir}")
10+
set(libstdcxx_header "libstdcxx.h")
11+
set(libstdcxx_header_out "${module_dir}/libstdcxx.h")
12+
set(libstdcxx_header_out_static "${module_dir_static}/libstdcxx.h")
13+
set(libstdcxx_modulemap "libstdcxx.modulemap")
14+
set(libstdcxx_modulemap_out "${module_dir}/libstdcxx.modulemap")
15+
set(libstdcxx_modulemap_out_static "${module_dir_static}/libstdcxx.modulemap")
1316

14-
set(libstdcxx_header "libstdcxx.h")
15-
set(libstdcxx_header_out "${module_dir}/libstdcxx.h")
16-
set(libstdcxx_header_out_static "${module_dir_static}/libstdcxx.h")
17-
set(libstdcxx_modulemap "libstdcxx.modulemap")
18-
set(libstdcxx_modulemap_out "${module_dir}/libstdcxx.modulemap")
19-
set(libstdcxx_modulemap_out_static "${module_dir_static}/libstdcxx.modulemap")
17+
add_custom_command_target(
18+
copy_libstdcxx_modulemap
19+
COMMAND
20+
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir}
21+
COMMAND
22+
"${CMAKE_COMMAND}" "-E" "copy_if_different" "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_modulemap}" "${libstdcxx_modulemap_out}"
23+
OUTPUT ${libstdcxx_modulemap_out}
24+
DEPENDS ${libstdcxx_modulemap}
25+
COMMENT "Copying libstdcxx modulemap to resources")
26+
list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_modulemap})
27+
add_dependencies(swift-stdlib-${SWIFT_SDK_${sdk}_LIB_SUBDIR} ${copy_libstdcxx_modulemap})
2028

29+
add_custom_command_target(
30+
copy_libstdcxx_header
31+
COMMAND
32+
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir}
33+
COMMAND
34+
"${CMAKE_COMMAND}" "-E" "copy_if_different" "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_header}" "${libstdcxx_header_out}"
35+
OUTPUT ${libstdcxx_header_out}
36+
DEPENDS ${libstdcxx_header}
37+
COMMENT "Copying libstdcxx header to resources")
38+
list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_header})
39+
add_dependencies(swift-stdlib-${SWIFT_SDK_${sdk}_LIB_SUBDIR} ${copy_libstdcxx_header})
40+
41+
if(SWIFT_BUILD_STATIC_STDLIB)
2142
add_custom_command_target(
22-
copy_libstdcxx_modulemap
43+
copy_libstdcxx_modulemap_static
2344
COMMAND
24-
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir}
45+
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir_static}
2546
COMMAND
26-
"${CMAKE_COMMAND}" "-E" "copy_if_different" "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_modulemap}" "${libstdcxx_modulemap_out}"
27-
OUTPUT ${libstdcxx_modulemap_out}
28-
DEPENDS ${libstdcxx_modulemap}
29-
COMMENT "Copying libstdcxx modulemap to resources")
30-
list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_modulemap})
31-
add_dependencies(swift-stdlib-${arch_suffix} ${copy_libstdcxx_modulemap})
47+
"${CMAKE_COMMAND}" "-E" "copy_if_different"
48+
"${libstdcxx_modulemap_out}" "${libstdcxx_modulemap_out_static}"
49+
OUTPUT ${libstdcxx_modulemap_out_static}
50+
DEPENDS ${copy_libstdcxx_modulemap}
51+
COMMENT "Copying libstdcxx modulemap to static resources")
52+
list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_modulemap_static})
53+
add_dependencies(swift-stdlib-${SWIFT_SDK_${sdk}_LIB_SUBDIR} ${copy_libstdcxx_modulemap_static})
3254

3355
add_custom_command_target(
34-
copy_libstdcxx_header
56+
copy_libstdcxx_header_static
3557
COMMAND
36-
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir}
58+
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir_static}
3759
COMMAND
38-
"${CMAKE_COMMAND}" "-E" "copy_if_different" "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_header}" "${libstdcxx_header_out}"
39-
OUTPUT ${libstdcxx_header_out}
40-
DEPENDS ${libstdcxx_header}
41-
COMMENT "Copying libstdcxx header to resources")
42-
list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_header})
43-
add_dependencies(swift-stdlib-${arch_suffix} ${copy_libstdcxx_header})
44-
45-
if(SWIFT_BUILD_STATIC_STDLIB)
46-
add_custom_command_target(
47-
copy_libstdcxx_modulemap_static
48-
COMMAND
49-
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir_static}
50-
COMMAND
51-
"${CMAKE_COMMAND}" "-E" "copy_if_different"
52-
"${libstdcxx_modulemap_out}" "${libstdcxx_modulemap_out_static}"
53-
OUTPUT ${libstdcxx_modulemap_out_static}
54-
DEPENDS ${copy_libstdcxx_modulemap}
55-
COMMENT "Copying libstdcxx modulemap to static resources")
56-
list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_modulemap_static})
57-
add_dependencies(swift-stdlib-${arch_suffix} ${copy_libstdcxx_modulemap_static})
60+
"${CMAKE_COMMAND}" "-E" "copy_if_different"
61+
"${libstdcxx_header_out}" "${libstdcxx_header_out_static}"
62+
OUTPUT ${libstdcxx_header_out_static}
63+
DEPENDS ${copy_libstdcxx_header}
64+
COMMENT "Copying libstdcxx header to static resources")
65+
list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_header_static})
66+
add_dependencies(swift-stdlib-${SWIFT_SDK_${sdk}_LIB_SUBDIR} ${copy_libstdcxx_header_static})
67+
endif()
5868

59-
add_custom_command_target(
60-
copy_libstdcxx_header_static
61-
COMMAND
62-
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir_static}
63-
COMMAND
64-
"${CMAKE_COMMAND}" "-E" "copy_if_different"
65-
"${libstdcxx_header_out}" "${libstdcxx_header_out_static}"
66-
OUTPUT ${libstdcxx_header_out_static}
67-
DEPENDS ${copy_libstdcxx_header}
68-
COMMENT "Copying libstdcxx header to static resources")
69-
list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_header_static})
70-
add_dependencies(swift-stdlib-${arch_suffix} ${copy_libstdcxx_header_static})
71-
endif()
69+
swift_install_in_component(FILES "${libstdcxx_modulemap_out}"
70+
DESTINATION "lib/swift/${SWIFT_SDK_${sdk}_LIB_SUBDIR}"
71+
COMPONENT sdk-overlay)
72+
swift_install_in_component(FILES "${libstdcxx_header_out}"
73+
DESTINATION "lib/swift/${SWIFT_SDK_${sdk}_LIB_SUBDIR}"
74+
COMPONENT sdk-overlay)
7275

73-
swift_install_in_component(FILES "${libstdcxx_modulemap_out}"
74-
DESTINATION "lib/swift/${arch_subdir}"
76+
if(SWIFT_BUILD_STATIC_STDLIB)
77+
swift_install_in_component(FILES "${libstdcxx_modulemap_out_static}"
78+
DESTINATION "lib/swift_static/${SWIFT_SDK_${sdk}_LIB_SUBDIR}"
7579
COMPONENT sdk-overlay)
76-
swift_install_in_component(FILES "${libstdcxx_header_out}"
77-
DESTINATION "lib/swift/${arch_subdir}"
80+
swift_install_in_component(FILES "${libstdcxx_header_out_static}"
81+
DESTINATION "lib/swift_static/${SWIFT_SDK_${sdk}_LIB_SUBDIR}"
7882
COMPONENT sdk-overlay)
83+
endif()
7984

80-
if(SWIFT_BUILD_STATIC_STDLIB)
81-
swift_install_in_component(FILES "${libstdcxx_modulemap_out_static}"
82-
DESTINATION "lib/swift_static/${arch_subdir}"
83-
COMPONENT sdk-overlay)
84-
swift_install_in_component(FILES "${libstdcxx_header_out_static}"
85-
DESTINATION "lib/swift_static/${arch_subdir}"
86-
COMPONENT sdk-overlay)
87-
endif()
88-
89-
if(${BOOTSTRAPPING_MODE} MATCHES "BOOTSTRAPPING.*")
90-
foreach(bootstrapping "0" "1")
91-
get_bootstrapping_path(bootstrapping_dir ${module_dir} ${bootstrapping})
92-
set(libstdcxx_modulemap_out_bootstrapping "${bootstrapping_dir}/libstdcxx.modulemap")
93-
set(libstdcxx_header_out_bootstrapping "${bootstrapping_dir}/libstdcxx.h")
85+
if(${BOOTSTRAPPING_MODE} MATCHES "BOOTSTRAPPING.*")
86+
foreach(bootstrapping "0" "1")
87+
get_bootstrapping_path(bootstrapping_dir ${module_dir} ${bootstrapping})
88+
set(libstdcxx_modulemap_out_bootstrapping "${bootstrapping_dir}/libstdcxx.modulemap")
89+
set(libstdcxx_header_out_bootstrapping "${bootstrapping_dir}/libstdcxx.h")
9490

95-
add_custom_command_target(unused_var
96-
COMMAND
97-
"${CMAKE_COMMAND}" "-E" "make_directory" "${bootstrapping_dir}"
98-
COMMAND
99-
"${CMAKE_COMMAND}" "-E" "copy_if_different"
100-
"${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_modulemap}" "${libstdcxx_modulemap_out_bootstrapping}"
91+
add_custom_command_target(unused_var
92+
COMMAND
93+
"${CMAKE_COMMAND}" "-E" "make_directory" "${bootstrapping_dir}"
94+
COMMAND
95+
"${CMAKE_COMMAND}" "-E" "copy_if_different"
96+
"${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_modulemap}" "${libstdcxx_modulemap_out_bootstrapping}"
10197

102-
CUSTOM_TARGET_NAME "copy-libstdcxx-modulemap-bootstrapping${bootstrapping}"
103-
OUTPUT "${libstdcxx_modulemap_out_bootstrapping}"
104-
DEPENDS ${libstdcxx_modulemap}
105-
COMMENT "Copying libstdcxx modulemap to resources for bootstrapping${bootstrapping}")
98+
CUSTOM_TARGET_NAME "copy-libstdcxx-modulemap-bootstrapping${bootstrapping}"
99+
OUTPUT "${libstdcxx_modulemap_out_bootstrapping}"
100+
DEPENDS ${libstdcxx_modulemap}
101+
COMMENT "Copying libstdcxx modulemap to resources for bootstrapping${bootstrapping}")
106102

107-
add_custom_command_target(unused_var
108-
COMMAND
109-
"${CMAKE_COMMAND}" "-E" "make_directory" "${bootstrapping_dir}"
110-
COMMAND
111-
"${CMAKE_COMMAND}" "-E" "copy_if_different"
112-
"${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_header}" "${libstdcxx_header_out_bootstrapping}"
103+
add_custom_command_target(unused_var
104+
COMMAND
105+
"${CMAKE_COMMAND}" "-E" "make_directory" "${bootstrapping_dir}"
106+
COMMAND
107+
"${CMAKE_COMMAND}" "-E" "copy_if_different"
108+
"${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_header}" "${libstdcxx_header_out_bootstrapping}"
113109

114-
CUSTOM_TARGET_NAME "copy-libstdcxx-header-bootstrapping${bootstrapping}"
115-
OUTPUT "${libstdcxx_header_out_bootstrapping}"
116-
DEPENDS ${libstdcxx_header}
117-
COMMENT "Copying libstdcxx header to resources for bootstrapping${bootstrapping}")
118-
endforeach()
119-
endif()
120-
endforeach()
110+
CUSTOM_TARGET_NAME "copy-libstdcxx-header-bootstrapping${bootstrapping}"
111+
OUTPUT "${libstdcxx_header_out_bootstrapping}"
112+
DEPENDS ${libstdcxx_header}
113+
COMMENT "Copying libstdcxx header to resources for bootstrapping${bootstrapping}")
114+
endforeach()
115+
endif()
121116
endforeach()
122117
add_custom_target(libstdcxx-modulemap DEPENDS ${libstdcxx_modulemap_target_list})
123118
set_property(TARGET libstdcxx-modulemap PROPERTY FOLDER "Miscellaneous")

unittests/ClangImporter/ClangImporterTests.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,11 +210,11 @@ TEST(ClangImporterTest, libStdCxxInjectionTest) {
210210
EXPECT_EQ(paths.redirectedFiles[0].first,
211211
"/opt/rh/devtoolset-9/root/usr/include/c++/9/libstdcxx.h");
212212
EXPECT_EQ(paths.redirectedFiles[0].second,
213-
"/usr/lib/swift/linux/x86_64/libstdcxx.h");
213+
"/usr/lib/swift/linux/libstdcxx.h");
214214
EXPECT_EQ(paths.redirectedFiles[1].first,
215215
"/opt/rh/devtoolset-9/root/usr/include/c++/9/module.modulemap");
216216
EXPECT_EQ(paths.redirectedFiles[1].second,
217-
"/usr/lib/swift/linux/x86_64/libstdcxx.modulemap");
217+
"/usr/lib/swift/linux/libstdcxx.modulemap");
218218
}
219219

220220
{
@@ -226,7 +226,7 @@ TEST(ClangImporterTest, libStdCxxInjectionTest) {
226226
EXPECT_EQ(paths.redirectedFiles[0].first,
227227
"/opt/rh/devtoolset-9/root/usr/include/c++/9/libstdcxx.h");
228228
EXPECT_EQ(paths.redirectedFiles[0].second,
229-
"/usr/lib/swift/linux/x86_64/libstdcxx.h");
229+
"/usr/lib/swift/linux/libstdcxx.h");
230230
EXPECT_EQ(paths.overridenFiles[0].first,
231231
"/opt/rh/devtoolset-9/root/usr/include/c++/9/module.modulemap");
232232
EXPECT_NE(paths.overridenFiles[0].second.find(
@@ -252,7 +252,7 @@ TEST(ClangImporterTest, libStdCxxInjectionTest) {
252252
EXPECT_EQ(paths.redirectedFiles[0].first,
253253
"/opt/rh/devtoolset-9/root/usr/include/c++/9/libstdcxx.h");
254254
EXPECT_EQ(paths.redirectedFiles[0].second,
255-
"/usr/lib/swift/linux/x86_64/libstdcxx.h");
255+
"/usr/lib/swift/linux/libstdcxx.h");
256256
EXPECT_EQ(paths.overridenFiles[0].first,
257257
"/opt/rh/devtoolset-9/root/usr/include/c++/9/module.modulemap");
258258
EXPECT_NE(

0 commit comments

Comments
 (0)