diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 6c8bba576442..5971a0ae4472 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -916,8 +916,10 @@ void MachO::AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs, DarwinLibName += Component; if (!(Opts & RLO_IsEmbedded)) DarwinLibName += "_"; - } - DarwinLibName += getOSLibraryNameSuffix(); + DarwinLibName += getOSLibraryNameSuffix(); + } else + DarwinLibName += getOSLibraryNameSuffix(true); + DarwinLibName += IsShared ? "_dynamic.dylib" : ".a"; SmallString<128> Dir(getDriver().ResourceDir); llvm::sys::path::append( @@ -983,16 +985,19 @@ StringRef Darwin::getSDKName(StringRef isysroot) { return ""; } -StringRef Darwin::getOSLibraryNameSuffix() const { - switch(TargetPlatform) { +StringRef Darwin::getOSLibraryNameSuffix(bool IgnoreSim) const { + switch (TargetPlatform) { case DarwinPlatformKind::MacOS: return "osx"; case DarwinPlatformKind::IPhoneOS: - return TargetEnvironment == NativeEnvironment ? "ios" : "iossim"; + return TargetEnvironment == NativeEnvironment || IgnoreSim ? "ios" + : "iossim"; case DarwinPlatformKind::TvOS: - return TargetEnvironment == NativeEnvironment ? "tvos" : "tvossim"; + return TargetEnvironment == NativeEnvironment || IgnoreSim ? "tvos" + : "tvossim"; case DarwinPlatformKind::WatchOS: - return TargetEnvironment == NativeEnvironment ? "watchos" : "watchossim"; + return TargetEnvironment == NativeEnvironment || IgnoreSim ? "watchos" + : "watchossim"; } llvm_unreachable("Unsupported platform"); } diff --git a/clang/lib/Driver/ToolChains/Darwin.h b/clang/lib/Driver/ToolChains/Darwin.h index 98ad7431919a..73c4ac6aecaa 100644 --- a/clang/lib/Driver/ToolChains/Darwin.h +++ b/clang/lib/Driver/ToolChains/Darwin.h @@ -252,7 +252,9 @@ public: return llvm::ExceptionHandling::None; } - virtual StringRef getOSLibraryNameSuffix() const { return ""; } + virtual StringRef getOSLibraryNameSuffix(bool IgnoreSim = false) const { + return ""; + } /// } }; @@ -420,7 +422,7 @@ protected: Action::OffloadKind DeviceOffloadKind) const override; StringRef getPlatformFamily() const; - StringRef getOSLibraryNameSuffix() const override; + StringRef getOSLibraryNameSuffix(bool IgnoreSim = false) const override; public: static StringRef getSDKName(StringRef isysroot); diff --git a/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.cc_kext_tvos.a b/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.cc_kext_tvos.a new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.cc_kext_watchos.a b/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.cc_kext_watchos.a new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.ios.a b/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.ios.a new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.osx.a b/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.osx.a new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.profile_tvos.a b/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.profile_tvos.a new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.profile_watchos.a b/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.profile_watchos.a new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.tvos.a b/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.tvos.a new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.watchos.a b/clang/test/Driver/Inputs/resource_dir/lib/darwin/libclang_rt.watchos.a new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/darwin-ld.c b/clang/test/Driver/darwin-ld.c index c98d1abcab29..3c339a117d76 100644 --- a/clang/test/Driver/darwin-ld.c +++ b/clang/test/Driver/darwin-ld.c @@ -152,78 +152,51 @@ // RUN: FileCheck -check-prefix=LINK_NO_IOS_ARM64_CRT1 %s < %t.log // LINK_NO_IOS_ARM64_CRT1-NOT: crt -// RUN: %clang -target x86_64-apple-ios6.0 -miphoneos-version-min=6.0 -fprofile-instr-generate -### %t.o 2> %t.log +// RUN: %clang -target x86_64-apple-ios6.0 -miphoneos-version-min=6.0 -fprofile-instr-generate -resource-dir=%S/Inputs/resource_dir -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=LINK_IOSSIM_PROFILE %s < %t.log // LINK_IOSSIM_PROFILE: {{ld(.exe)?"}} // LINK_IOSSIM_PROFILE: libclang_rt.profile_iossim.a +// LINK_IOSSIM_PROFILE: libclang_rt.ios.a -// FIXME: Currently the builtin library is only added to the command line if it, -// so we can't check for it here -// FIXME_LINK_IOSSIM_PROFILE: libclang_rt.ios.a - -// RUN: %clang -target arm64-apple-tvos8.3 -mtvos-version-min=8.3 -### %t.o 2> %t.log +// RUN: %clang -target arm64-apple-tvos8.3 -mtvos-version-min=8.3 -resource-dir=%S/Inputs/resource_dir -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=LINK_TVOS_ARM64 %s < %t.log // LINK_TVOS_ARM64: {{ld(.exe)?"}} // LINK_TVOS_ARM64: -tvos_version_min // LINK_TVOS_ARM64-NOT: crt // LINK_TVOS_ARM64-NOT: lgcc_s.1 -// FIXME: This library does not get built unless the tvOS SDK is -// installed, and the driver will not try to link it if it does not exist. -// This should be reenabled when the tvOS SDK becomes a standard part -// of Xcode. -// FIXME_LINK_TVOS_ARM64: libclang_rt.tvos.a +// LINK_TVOS_ARM64: libclang_rt.tvos.a -// RUN: %clang -target arm64-apple-tvos8.3 -mtvos-version-min=8.3 -fprofile-instr-generate -### %t.o 2> %t.log +// RUN: %clang -target arm64-apple-tvos8.3 -mtvos-version-min=8.3 -fprofile-instr-generate -resource-dir=%S/Inputs/resource_dir -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=LINK_TVOS_PROFILE %s < %t.log // LINK_TVOS_PROFILE: {{ld(.exe)?"}} -// FIXME: These libraries do not get built unless the tvOS SDK is -// installed, and the driver will not try to link them if they do not exist. -// This should be reenabled when the tvOS SDK becomes a standard part -// of Xcode. -// FIXME_LINK_TVOS_PROFILE: libclang_rt.profile_tvos.a -// FIXME_LINK_TVOS_PROFILE: libclang_rt.tvos.a +// LINK_TVOS_PROFILE: libclang_rt.profile_tvos.a +// LINK_TVOS_PROFILE: libclang_rt.tvos.a -// RUN: %clang -target arm64-apple-tvos8.3 -mtvos-version-min=8.3 -### %t.o -lcc_kext 2> %t.log +// RUN: %clang -target arm64-apple-tvos8.3 -mtvos-version-min=8.3 -resource-dir=%S/Inputs/resource_dir -### %t.o -lcc_kext 2> %t.log // RUN: FileCheck -check-prefix=LINK_TVOS_KEXT %s < %t.log // LINK_TVOS_KEXT: {{ld(.exe)?"}} -// FIXME: These libraries do not get built unless the tvOS SDK is -// installed, and the driver will not try to link them if they do not exist. -// This should be reenabled when the tvOS SDK becomes a standard part -// of Xcode. -// FIXME_LINK_TVOS_KEXT: libclang_rt.cc_kext_tvos.a -// FIXME_LINK_TVOS_KEXT: libclang_rt.tvos.a +// LINK_TVOS_KEXT: libclang_rt.cc_kext_tvos.a +// LINK_TVOS_KEXT: libclang_rt.tvos.a -// RUN: %clang -target armv7k-apple-watchos2.0 -mwatchos-version-min=2.0 -### %t.o 2> %t.log +// RUN: %clang -target armv7k-apple-watchos2.0 -mwatchos-version-min=2.0 -resource-dir=%S/Inputs/resource_dir -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=LINK_WATCHOS_ARM %s < %t.log // LINK_WATCHOS_ARM: {{ld(.exe)?"}} // LINK_WATCHOS_ARM: -watchos_version_min // LINK_WATCHOS_ARM-NOT: crt // LINK_WATCHOS_ARM-NOT: lgcc_s.1 -// FIXME: This library does not get built unless the watchOS SDK is -// installed, and the driver will not try to link it if it does not exist. -// This should be reenabled when the watchOS SDK becomes a standard part -// of Xcode. -// FIXME_LINK_WATCHOS_ARM: libclang_rt.watchos.a +// LINK_WATCHOS_ARM: libclang_rt.watchos.a -// RUN: %clang -target armv7k-apple-watchos2.0 -mwatchos-version-min=2.0 -fprofile-instr-generate -### %t.o 2> %t.log +// RUN: %clang -target armv7k-apple-watchos2.0 -mwatchos-version-min=2.0 -resource-dir=%S/Inputs/resource_dir -fprofile-instr-generate -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=LINK_WATCHOS_PROFILE %s < %t.log // LINK_WATCHOS_PROFILE: {{ld(.exe)?"}} -// FIXME: These libraries do not get built unless the watchOS SDK is -// installed, and the driver will not try to link them if they do not exist. -// This should be reenabled when the watchOS SDK becomes a standard part -// of Xcode. -// FIXME_LINK_WATCHOS_PROFILE: libclang_rt.profile_watchos.a -// FIXME_LINK_WATCHOS_PROFILE: libclang_rt.watchos.a +// LINK_WATCHOS_PROFILE: libclang_rt.profile_watchos.a +// LINK_WATCHOS_PROFILE: libclang_rt.watchos.a -// RUN: %clang -target armv7k-apple-watchos2.0 -mwatchos-version-min=2.0 -### %t.o -lcc_kext 2> %t.log +// RUN: %clang -target armv7k-apple-watchos2.0 -mwatchos-version-min=2.0 -resource-dir=%S/Inputs/resource_dir -### %t.o -lcc_kext 2> %t.log // RUN: FileCheck -check-prefix=LINK_WATCHOS_KEXT %s < %t.log // LINK_WATCHOS_KEXT: {{ld(.exe)?"}} -// FIXME: These libraries do not get built unless the watchOS SDK is -// installed, and the driver will not try to link them if they do not exist. -// This should be reenabled when the watchOS SDK becomes a standard part -// of Xcode. -// FIXME_LINK_WATCHOS_KEXT: libclang_rt.cc_kext_watchos.a -// FIXME_LINK_WATCHOS_KEXT: libclang_rt.watchos.a +// LINK_WATCHOS_KEXT: libclang_rt.cc_kext_watchos.a +// LINK_WATCHOS_KEXT: libclang_rt.watchos.a // RUN: %clang -target i386-apple-darwin12 -pg -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=LINK_PG %s < %t.log