diff --git a/llbuild/lib/BuildSystem/BuildSystem.cpp b/llbuild/lib/BuildSystem/BuildSystem.cpp index 297dee34..40df58ca 100644 --- a/llbuild/lib/BuildSystem/BuildSystem.cpp +++ b/llbuild/lib/BuildSystem/BuildSystem.cpp @@ -3269,7 +3269,7 @@ class ArchiveShellCommand : public ExternalCommand { if (const char *ar = std::getenv("AR")) args.push_back(std::string(ar)); else - args.push_back("ar"); + args.push_back("llvm-ar"); args.push_back("cr"); args.push_back(archiveName); args.insert(args.end(), archiveInputs.begin(), archiveInputs.end()); diff --git a/swift/lib/Driver/UnixToolChains.cpp b/swift/lib/Driver/UnixToolChains.cpp index 1dc32acfd83..d01445c2ef5 100644 --- a/swift/lib/Driver/UnixToolChains.cpp +++ b/swift/lib/Driver/UnixToolChains.cpp @@ -384,9 +386,12 @@ toolchains::GenericUnix::constructInvocation(const StaticLinkJobAction &job, ArgStringList Arguments; + const char *AR; // Configure the toolchain. - const char *AR = - context.OI.LTOVariant != OutputInfo::LTOKind::None ? "llvm-ar" : "ar"; + if (getTriple().isAndroid()) + AR = "llvm-ar"; + else + AR = context.OI.LTOVariant != OutputInfo::LTOKind::None ? "llvm-ar" : "ar"; Arguments.push_back("crs"); Arguments.push_back( diff --git a/swift-driver/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift b/swift-driver/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift index a08e3fa1..11d87b85 100644 --- a/swift-driver/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift +++ b/swift-driver/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift @@ -291,7 +291,12 @@ extension GenericUnixToolchain { commandLine.append(contentsOf: inputs.filter { $0.type == .object } .map { .path($0.file) }) - return try getToolPath(.staticLinker(lto)) + if targetTriple.environment == .android { + // Always use the LTO archiver llvm-ar for Android + return try getToolPath(.staticLinker(.llvmFull)) + } else { + return try getToolPath(.staticLinker(lto)) + } } }