diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp index 35faa6d2199a..89d408823270 100644 --- a/clang/lib/Driver/ToolChains/AVR.cpp +++ b/clang/lib/Driver/ToolChains/AVR.cpp @@ -19,7 +19,6 @@ #include "llvm/MC/SubtargetFeature.h" #include "llvm/Option/ArgList.h" #include "llvm/Support/FileSystem.h" -#include "llvm/Support/Path.h" using namespace clang::driver; using namespace clang::driver::toolchains; @@ -370,7 +369,8 @@ AVRToolChain::AVRToolChain(const Driver &D, const llvm::Triple &Triple, : Generic_ELF(D, Triple, Args) { GCCInstallation.init(Triple, Args); - if (getCPUName(D, Args, Triple).empty()) + std::string CPU = getCPUName(D, Args, Triple); + if (CPU.empty()) D.Diag(diag::warn_drv_avr_mcu_not_specified); // Only add default libraries if the user hasn't explicitly opted out. @@ -418,23 +418,6 @@ Tool *AVRToolChain::buildLinker() const { return new tools::AVR::Linker(getTriple(), *this); } -std::string -AVRToolChain::getCompilerRT(const llvm::opt::ArgList &Args, StringRef Component, - FileType Type = ToolChain::FT_Static) const { - assert(Type == ToolChain::FT_Static && "AVR only supports static libraries"); - // Since AVR can never be a host environment, its compiler-rt library files - // should always have ".a" suffix, even on windows. - SmallString<32> File("/libclang_rt."); - File += Component.str(); - File += ".a"; - // Return the default compiler-rt path appended with - // "avr/libclang_rt.$COMPONENT.a". - SmallString<256> Path(ToolChain::getCompilerRTPath()); - llvm::sys::path::append(Path, "avr"); - llvm::sys::path::append(Path, File.str()); - return std::string(Path.str()); -} - void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, @@ -465,12 +448,6 @@ void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, Args.AddAllArgs(CmdArgs, options::OPT_L); getToolChain().AddFilePathLibArgs(Args, CmdArgs); - // Currently we only support libgcc and compiler-rt. - auto RtLib = TC.GetRuntimeLibType(Args); - assert( - (RtLib == ToolChain::RLT_Libgcc || RtLib == ToolChain::RLT_CompilerRT) && - "unknown runtime library"); - // Only add default libraries if the user hasn't explicitly opted out. bool LinkStdlib = false; if (!Args.hasArg(options::OPT_nostdlib) && @@ -486,12 +463,10 @@ void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, D.Diag(diag::warn_drv_avr_libc_not_found); } else { std::string SubPath = GetMCUSubPath(CPU); - // Add path of avr-libc. CmdArgs.push_back( Args.MakeArgString(Twine("-L") + *AVRLibcRoot + "/lib/" + SubPath)); - if (RtLib == ToolChain::RLT_Libgcc) - CmdArgs.push_back(Args.MakeArgString("-L" + TC.getGCCInstallPath() + - "/" + SubPath)); + CmdArgs.push_back( + Args.MakeArgString("-L" + TC.getGCCInstallPath() + "/" + SubPath)); LinkStdlib = true; } } @@ -520,29 +495,14 @@ void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, std::string CrtFileName = std::string("-l:crt") + CPU + std::string(".o"); CmdArgs.push_back(Args.MakeArgString(CrtFileName)); - // Link to libgcc. - if (RtLib == ToolChain::RLT_Libgcc) - CmdArgs.push_back("-lgcc"); - - // Link to generic libraries of avr-libc. + CmdArgs.push_back("-lgcc"); CmdArgs.push_back("-lm"); CmdArgs.push_back("-lc"); // Add the link library specific to the MCU. CmdArgs.push_back(Args.MakeArgString(std::string("-l") + CPU)); - // Add the relocatable inputs. AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA); - - // We directly use libclang_rt.builtins.a as input file, instead of using - // '-lclang_rt.builtins'. - if (RtLib == ToolChain::RLT_CompilerRT) { - std::string RtLib = - getToolChain().getCompilerRT(Args, "builtins", ToolChain::FT_Static); - if (llvm::sys::fs::exists(RtLib)) - CmdArgs.push_back(Args.MakeArgString(RtLib)); - } - CmdArgs.push_back("--end-group"); // Add user specified linker script. diff --git a/clang/lib/Driver/ToolChains/AVR.h b/clang/lib/Driver/ToolChains/AVR.h index cd2bbee9efd6..ab147d852ad7 100644 --- a/clang/lib/Driver/ToolChains/AVR.h +++ b/clang/lib/Driver/ToolChains/AVR.h @@ -33,8 +33,6 @@ public: llvm::Optional findAVRLibcInstallation() const; StringRef getGCCInstallPath() const { return GCCInstallPath; } - std::string getCompilerRT(const llvm::opt::ArgList &Args, StringRef Component, - FileType Type) const override; protected: Tool *buildLinker() const override; diff --git a/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/avr/libclang_rt.builtins.a b/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/avr/libclang_rt.builtins.a deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/clang/test/Driver/avr-toolchain.c b/clang/test/Driver/avr-toolchain.c index d4e4c94f8d31..4232811cf19f 100644 --- a/clang/test/Driver/avr-toolchain.c +++ b/clang/test/Driver/avr-toolchain.c @@ -72,17 +72,3 @@ // RUN: %clang -### --target=avr --sysroot=%S/Inputs/basic_avr_tree -mmcu=atmega328 %s -fuse-ld=%S/Inputs/basic_avr_tree/usr/bin/ld.lld -T avr.lds 2>&1 | FileCheck --check-prefix=LDS1 %s // LDS1: "-T" "avr.lds" // LDS1-NOT: "-mavr5" - -// RUN: %clang %s -### --target=avr -mmcu=atmega328 --sysroot=%S/Inputs/basic_avr_tree/ -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir 2>&1 | FileCheck --check-prefix=LIBGCC %s -// RUN: %clang %s -### --target=avr -mmcu=atmega328 --sysroot=%S/Inputs/basic_avr_tree/ -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir --rtlib=libgcc 2>&1 | FileCheck --check-prefix=LIBGCC %s -// LIBGCC: "-lgcc" -// LIBGCC-NOT: libclang_rt - -// RUN: %clang %s -### --target=avr -mmcu=atmega328 --sysroot=%S/Inputs/basic_avr_tree/ -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir --rtlib=compiler-rt 2>&1 | FileCheck --check-prefix=COMRT %s -// COMRT: avr/libclang_rt.builtins.a -// COMRT-NOT: "-lgcc" - -// RUN: %clang %s -### --target=avr --sysroot=%S/Inputs/basic_avr_tree/ -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir --rtlib=compiler-rt 2>&1 | FileCheck --check-prefix=NOMCU %s -// RUN: %clang %s -### --target=avr --sysroot=%S/Inputs/basic_avr_tree/ -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir --rtlib=libgcc 2>&1 | FileCheck --check-prefix=NOMCU %s -// NOMCU-NOT: libclang_rt -// NOMCU-NOT: "-lgcc"