Author: Ben Shi Date: 2021-02-02T22:45:52+08:00 New Revision: 9b0b435d7931bdb1fb128861cc9063a365a9e648
URL: https://github.com/llvm/llvm-project/commit/9b0b435d7931bdb1fb128861cc9063a365a9e648 DIFF: https://github.com/llvm/llvm-project/commit/9b0b435d7931bdb1fb128861cc9063a365a9e648.diff LOG: [AVR][clang] Fix a bug in AVR toolchain search paths Reviewed By: dylanmckay, MaskRay Differential Revision: https://reviews.llvm.org/D95529 Added: clang/test/Driver/Inputs/basic_avr_tree/usr/bin/avr-ld clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/libavr.a clang/test/Driver/Inputs/basic_avr_tree/usr/lib/gcc/avr/5.4.0/libgcc.a clang/test/Driver/avr-ld.c Modified: clang/lib/Driver/ToolChains/AVR.cpp Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp index ae56b7b5249e..ebbc6f2d5c79 100644 --- a/clang/lib/Driver/ToolChains/AVR.cpp +++ b/clang/lib/Driver/ToolChains/AVR.cpp @@ -334,10 +334,12 @@ AVRToolChain::AVRToolChain(const Driver &D, const llvm::Triple &Triple, // No avr-libc found and so no runtime linked. D.Diag(diag::warn_drv_avr_libc_not_found); } else { // We have enough information to link stdlibs - std::string GCCRoot = std::string(GCCInstallation.getInstallPath()); + std::string GCCRoot(GCCInstallation.getInstallPath()); + std::string GCCParentPath(GCCInstallation.getParentLibPath()); std::string LibcRoot = AVRLibcRoot.getValue(); std::string SubPath = GetMCUSubPath(CPU); + getProgramPaths().push_back(GCCParentPath + "/../bin"); getFilePaths().push_back(LibcRoot + std::string("/lib/") + SubPath); getFilePaths().push_back(GCCRoot + std::string("/") + SubPath); @@ -419,9 +421,10 @@ void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, llvm::Optional<std::string> AVRToolChain::findAVRLibcInstallation() const { for (StringRef PossiblePath : PossibleAVRLibcLocations) { + std::string Path = getDriver().SysRoot + PossiblePath.str(); // Return the first avr-libc installation that exists. - if (llvm::sys::fs::is_directory(PossiblePath)) - return Optional<std::string>(std::string(PossiblePath)); + if (llvm::sys::fs::is_directory(Path)) + return Optional<std::string>(Path); } return llvm::None; diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/bin/avr-ld b/clang/test/Driver/Inputs/basic_avr_tree/usr/bin/avr-ld new file mode 100755 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/libavr.a b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/lib/libavr.a new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/gcc/avr/5.4.0/libgcc.a b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/gcc/avr/5.4.0/libgcc.a new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/avr-ld.c b/clang/test/Driver/avr-ld.c new file mode 100644 index 000000000000..5a37f5a93eb2 --- /dev/null +++ b/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" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits