--- a/clang/lib/Driver/ToolChains/Linux.cpp 2019-12-21 22:30:03.676720096 +0000 +++ b/clang/lib/Driver/ToolChains/Linux.cpp 2019-12-21 22:34:42.941719383 +0000 @@ -374,7 +374,7 @@ // those searched. // FIXME: It's not clear whether we should use the driver's installed // directory ('Dir' below) or the ResourceDir. - if (StringRef(D.Dir).startswith(SysRoot)) { + if (StringRef(D.Dir).startswith(SysRoot) && !IsAndroid) { addPathIfExists(D, D.Dir + "/../lib/" + MultiarchTriple, Paths); addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths); } @@ -403,7 +403,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) 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); @@ -447,11 +447,19 @@ // searched. // FIXME: It's not clear whether we should use the driver's installed // directory ('Dir' below) or the ResourceDir. - if (StringRef(D.Dir).startswith(SysRoot)) + if (StringRef(D.Dir).startswith(SysRoot) && !IsAndroid) 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::CXXStdlibType Linux::GetDefaultCXXStdlibType() const {