[clang] 65c022a - Revert "[Driver] Support linking to compiler-rt for target AVR"

Ben Shi via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 15 16:56:05 PDT 2022


Author: Ben Shi
Date: 2022-08-16T07:55:41+08:00
New Revision: 65c022a75fa7ca87dbf8375527c76eaf7d5f16c5

URL: https://github.com/llvm/llvm-project/commit/65c022a75fa7ca87dbf8375527c76eaf7d5f16c5
DIFF: https://github.com/llvm/llvm-project/commit/65c022a75fa7ca87dbf8375527c76eaf7d5f16c5.diff

LOG: Revert "[Driver] Support linking to compiler-rt for target AVR"

This reverts commit 44a647d21d946f8cc3eb7c1fea33311cf778f303.

Added: 
    

Modified: 
    clang/lib/Driver/ToolChains/AVR.cpp
    clang/lib/Driver/ToolChains/AVR.h
    clang/test/Driver/avr-toolchain.c

Removed: 
    clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/avr/libclang_rt.builtins.a


################################################################################
diff  --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp
index 35faa6d2199a5..89d408823270a 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 cd2bbee9efd66..ab147d852ad7c 100644
--- a/clang/lib/Driver/ToolChains/AVR.h
+++ b/clang/lib/Driver/ToolChains/AVR.h
@@ -33,8 +33,6 @@ class LLVM_LIBRARY_VISIBILITY AVRToolChain : public Generic_ELF {
 
   llvm::Optional<std::string> 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 e69de29bb2d1d..0000000000000

diff  --git a/clang/test/Driver/avr-toolchain.c b/clang/test/Driver/avr-toolchain.c
index d4e4c94f8d310..4232811cf19ff 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"


        


More information about the cfe-commits mailing list