Index: clang/lib/Driver/ToolChains/AVR.cpp =================================================================== --- clang/lib/Driver/ToolChains/AVR.cpp +++ clang/lib/Driver/ToolChains/AVR.cpp @@ -364,6 +364,8 @@ llvm::Optional SectionAddressData = GetMCUSectionAddressData(CPU); std::string Linker = getToolChain().GetProgramPath(getShortName()); + if (!getToolChain().getDriver().SysRoot.empty()) + Linker = getToolChain().getDriver().SysRoot + Linker; ArgStringList CmdArgs; AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA); @@ -419,9 +421,11 @@ llvm::Optional AVRToolChain::findAVRLibcInstallation() const { for (StringRef PossiblePath : PossibleAVRLibcLocations) { + std::string Path(getDriver().SysRoot.empty() ? "" : getDriver().SysRoot); + Path += PossiblePath.str(); // Return the first avr-libc installation that exists. - if (llvm::sys::fs::is_directory(PossiblePath)) - return Optional(std::string(PossiblePath)); + if (llvm::sys::fs::is_directory(Path)) + return Optional(Path); } return llvm::None; Index: clang/test/Driver/avr-ld.c =================================================================== --- /dev/null +++ clang/test/Driver/avr-ld.c @@ -0,0 +1,2 @@ +// RUN: %clang -### --target=avr -mmcu=atmega328 --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINK %s +// LINK: {{".*ld.*"}} {{.*}} {{"-L.*avr5"}} {{.*}} "-Tdata=0x800100" {{.*}} "-latmega328" "-mavr5"