@@ -135,11 +135,21 @@ add_swift_target_library(swiftstd ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_SDK_OVE
135135 SWIFT_MODULE_DEPENDS_IOS Darwin
136136 SWIFT_MODULE_DEPENDS_TVOS Darwin
137137 SWIFT_MODULE_DEPENDS_WATCHOS Darwin
138+ SWIFT_MODULE_DEPENDS_LINUX Glibc
138139
139140 SWIFT_COMPILE_FLAGS ${SWIFT_RUNTIME_SWIFT_COMPILE_FLAGS} ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
140141 -Xfrontend -enable-experimental-cxx-interop
141142 -Xfrontend -module-interface-preserve-types-as-written
142143
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