diff -uNr llvm-project/clang/lib/Driver/ToolChains/Linux.cpp llvm-project.mod/clang/lib/Driver/ToolChains/Linux.cpp --- llvm-project/clang/lib/Driver/ToolChains/Linux.cpp 2022-05-03 21:10:32.000000000 +0800 +++ llvm-project.mod/clang/lib/Driver/ToolChains/Linux.cpp 2022-05-08 23:49:55.901100813 +0800 @@ -162,8 +162,8 @@ // FIXME: This is a bit of a hack. We should really unify this code for // reasoning about oslibdir spellings with the lib dir spellings in the // GCCInstallationDetector, but that is a more significant refactoring. - if (Triple.getArch() == llvm::Triple::x86 || Triple.isPPC32() || - Triple.getArch() == llvm::Triple::sparc) + if (!Triple.isAndroid() && (Triple.getArch() == llvm::Triple::x86 || Triple.isPPC32() || + Triple.getArch() == llvm::Triple::sparc)) return "lib32"; if (Triple.getArch() == llvm::Triple::x86_64 && Triple.isX32()) @@ -295,7 +295,7 @@ if (Triple.getVendor() == llvm::Triple::OpenEmbedded && Triple.isArch64Bit()) addPathIfExists(D, SysRoot + "/usr/" + OSLibDir, Paths); - else + else if (!IsAndroid) addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths); if (IsRISCV) { StringRef ABIName = tools::riscv::getRISCVABI(Args, Triple); @@ -308,12 +308,20 @@ // The deprecated -DLLVM_ENABLE_PROJECTS=libcxx configuration installs // libc++.so in D.Dir+"/../lib/". Detect this path. // TODO Remove once LLVM_ENABLE_PROJECTS=libcxx is unsupported. - if (StringRef(D.Dir).startswith(SysRoot) && + if (StringRef(D.Dir).startswith(SysRoot) && !IsAndroid && D.getVFS().exists(D.Dir + "/../lib/libc++.so")) addPathIfExists(D, D.Dir + "/../lib", Paths); addPathIfExists(D, SysRoot + "/lib", Paths); - addPathIfExists(D, SysRoot + "/usr/lib", Paths); + bool nativeBuild = MultiarchTriple == getMultiarchTriple(D, llvm::Triple(llvm::sys::getDefaultTargetTriple()), SysRoot); + if (nativeBuild || !IsAndroid) + addPathIfExists(D, SysRoot + "/usr/lib", Paths); + + if (IsAndroid) { + addPathIfExists(D, SysRoot + "/usr/" + MultiarchTriple + "/lib", Paths); + addPathIfExists(D, "/system/" + OSLibDir, Paths); + ExtraOpts.push_back("-rpath=" + SysRoot + "/usr/lib"); + } } ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const {