@@ -135,11 +135,21 @@ add_swift_target_library(swiftstd ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_SDK_OVE
135
135
SWIFT_MODULE_DEPENDS_IOS Darwin
136
136
SWIFT_MODULE_DEPENDS_TVOS Darwin
137
137
SWIFT_MODULE_DEPENDS_WATCHOS Darwin
138
+ SWIFT_MODULE_DEPENDS_LINUX Glibc
138
139
139
140
SWIFT_COMPILE_FLAGS ${SWIFT_RUNTIME_SWIFT_COMPILE_FLAGS} ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
140
141
-Xfrontend -enable-experimental-cxx-interop
141
142
-Xfrontend -module-interface-preserve-types-as-written
142
143
143
- LINK_FLAGS "${SWIFT_RUNTIME_SWIFT_LINK_FLAGS} " -lc++
144
- TARGET_SDKS ALL_APPLE_PLATFORMS # TODO: support other platforms as well
145
- INSTALL_IN_COMPONENT sdk-overlay )
144
+ SWIFT_COMPILE_FLAGS_LINUX
145
+ # GCC on Linux is usually located under `/usr`.
146
+ # However, Ubuntu 20.04 ships with another GCC installation under `/`, which does not include libstdc++.
147
+ # Swift build scripts pass `--sysroot=/` to Clang. By default, Clang tries to find GCC installation under sysroot,
148
+ # and if it doesn't exist, under `{sysroot}/usr`. On Ubuntu 20.04 and newer, it attempts to use the GCC without the
149
+ # C++ stdlib, which causes a build failure. To fix that, we tell Clang explicitly to use GCC from `/usr`.
150
+ -Xcc --gcc-toolchain=/usr
151
+
152
+ LINK_FLAGS "${SWIFT_RUNTIME_SWIFT_LINK_FLAGS} "
153
+ TARGET_SDKS ALL_APPLE_PLATFORMS LINUX
154
+ INSTALL_IN_COMPONENT sdk-overlay
155
+ DEPENDS libstdcxx-modulemap )
0 commit comments