Index: llvm/utils/gn/secondary/clang/tools/driver/BUILD.gn =================================================================== --- llvm/utils/gn/secondary/clang/tools/driver/BUILD.gn +++ llvm/utils/gn/secondary/clang/tools/driver/BUILD.gn @@ -80,6 +80,13 @@ plist = get_target_outputs(":write_info_plist") ldflags = [ "-Wl,-sectcreate,__TEXT,__info_plist," + rebase_path(plist[0], root_out_dir) ] + + # On macOS, libcxx headers are bundled with the compiler, not with the + # sysroot. As a convenience, automatically copy them over when buildling + # clang. This is different from the CMake build, which requires devs to + # explicitly build the "libcxx" target (which also needlessly compiles the + # libcxx sources) to get a working compiler. + deps += [ "//libcxx/include" ] } sources = [ "cc1_main.cpp", Index: llvm/utils/gn/secondary/libcxx/include/BUILD.gn =================================================================== --- llvm/utils/gn/secondary/libcxx/include/BUILD.gn +++ llvm/utils/gn/secondary/libcxx/include/BUILD.gn @@ -210,7 +210,18 @@ "wchar.h", "wctype.h", ] - deps = [ "//libcxxabi/include" ] + deps = [] + if (target_os != "mac" && target_os != "win") { + # libcxx/cmake/Modules/HandleLibCXXABI.cmake sets + # LIBCXX_CXX_ABI_HEADER_TARGET if the libcxx abi library either of + # "libstdc++", "libsupc++", "libcxxabi", "libcxxrt", but not if it's "none", + # "default", or "vcruntime". So on Windows, these don't get copied due to + # LIBCXX_CXX_ABI_HEADER_TARGET not being set. + # On macOS, libcxx/CMakeLists.txt sets LIBCXX_CXX_ABI_SYSTEM to 1, which + # causes an empty header list to be passed to setup_abi_lib, so these + # don't get copied on macOS due to that. + deps += [ "//libcxxabi/include" ] + } if (!libcxx_needs_site_config) { sources += [ "__config" ] } else {