[clang] b31199b - [AVR][clang] Improve search for avr-libc installation path

Ben Shi via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 16 20:52:15 PDT 2021


Author: Ben Shi
Date: 2021-08-17T11:51:35+08:00
New Revision: b31199bab4865deef4e778d7a028c8ec64285654

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

LOG: [AVR][clang] Improve search for avr-libc installation path

Search avr-libc path according to avr-gcc installation at first,
then other possible installed pathes.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D107682

Added: 
    clang/test/Driver/Inputs/basic_avr_tree_2/opt/local/avr/include/.keep
    clang/test/Driver/Inputs/basic_avr_tree_2/opt/local/avr/lib/libavr.a
    clang/test/Driver/Inputs/basic_avr_tree_2/opt/local/lib/gcc/avr/10.3.0/libgcc.a
    clang/test/Driver/Inputs/basic_avr_tree_2/usr/avr/include/.keep
    clang/test/Driver/Inputs/basic_avr_tree_2/usr/avr/lib/libavr.a

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

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp
index cebf9d13a4ce0..5a12406a51cc6 100644
--- a/clang/lib/Driver/ToolChains/AVR.cpp
+++ b/clang/lib/Driver/ToolChains/AVR.cpp
@@ -453,11 +453,21 @@ void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA,
 }
 
 llvm::Optional<std::string> AVRToolChain::findAVRLibcInstallation() const {
+  // Search avr-libc installation according to avr-gcc installation.
+  std::string GCCParent(GCCInstallation.getParentLibPath());
+  std::string Path(GCCParent + "/avr");
+  if (llvm::sys::fs::is_directory(Path))
+    return Path;
+  Path = GCCParent + "/../avr";
+  if (llvm::sys::fs::is_directory(Path))
+    return Path;
+
+  // Search avr-libc installation from possible locations, and return the first
+  // one that exists, if there is no avr-gcc installed.
   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(Path))
-      return Optional<std::string>(Path);
+      return Path;
   }
 
   return llvm::None;

diff  --git a/clang/test/Driver/Inputs/basic_avr_tree_2/opt/local/avr/include/.keep b/clang/test/Driver/Inputs/basic_avr_tree_2/opt/local/avr/include/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git a/clang/test/Driver/Inputs/basic_avr_tree_2/opt/local/avr/lib/libavr.a b/clang/test/Driver/Inputs/basic_avr_tree_2/opt/local/avr/lib/libavr.a
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git a/clang/test/Driver/Inputs/basic_avr_tree_2/opt/local/lib/gcc/avr/10.3.0/libgcc.a b/clang/test/Driver/Inputs/basic_avr_tree_2/opt/local/lib/gcc/avr/10.3.0/libgcc.a
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git a/clang/test/Driver/Inputs/basic_avr_tree_2/usr/avr/include/.keep b/clang/test/Driver/Inputs/basic_avr_tree_2/usr/avr/include/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git a/clang/test/Driver/Inputs/basic_avr_tree_2/usr/avr/lib/libavr.a b/clang/test/Driver/Inputs/basic_avr_tree_2/usr/avr/lib/libavr.a
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git a/clang/test/Driver/avr-toolchain.c b/clang/test/Driver/avr-toolchain.c
index 74eb6ff37aed1..6bb7a00b6a3b5 100644
--- a/clang/test/Driver/avr-toolchain.c
+++ b/clang/test/Driver/avr-toolchain.c
@@ -6,12 +6,24 @@
 // CHECK1-SAME: "-resource-dir" "[[RESOURCE:[^"]+]]"
 // CHECK1-SAME: "-isysroot" "[[SYSROOT:[^"]+/basic_avr_tree]]"
 // CHECK1-SAME: "-internal-isystem"
-// CHECK1-SAME: {{^}} "[[SYSROOT]]/usr/lib/avr/include"
+// CHECK1-SAME: {{^}} "[[SYSROOT]]/usr/lib/gcc/avr/5.4.0/../../../avr/include"
 // CHECK1-NOT:  "-L
 // CHECK1:      avr-ld"
 // CHECK1-SAME: "-o" "a.out"
 // CHECK1-SAME: {{^}} "--gc-sections"
 
+// RUN: %clang %s -### -target avr --sysroot %S/Inputs/basic_avr_tree_2/opt/local -S 2>&1 | FileCheck --check-prefix=CHECK2 %s
+// CHECK2: clang{{.*}} "-cc1" "-triple" "avr"
+// CHECK2-SAME: "-isysroot" "[[SYSROOT:[^"]+/basic_avr_tree_2/opt/local]]"
+// CHECK2-SAME: "-internal-isystem"
+// CHECK2-SAME: {{^}} "[[SYSROOT]]/lib/gcc/avr/10.3.0/../../../../avr/include"
+
+// RUN: %clang %s -### -target avr --sysroot %S/Inputs/basic_avr_tree_2 -S 2>&1 | FileCheck --check-prefix=CHECK3 %s
+// CHECK3: clang{{.*}} "-cc1" "-triple" "avr"
+// CHECK3-SAME: "-isysroot" "[[SYSROOT:[^"]+/basic_avr_tree_2]]"
+// CHECK3-SAME: "-internal-isystem"
+// CHECK3-SAME: {{^}} "[[SYSROOT]]/usr/avr/include"
+
 // RUN: %clang %s -### -target avr 2>&1 | FileCheck -check-prefix=CC1 %s
 // CC1: clang{{.*}} "-cc1" "-triple" "avr" {{.*}} "-fno-use-init-array"
 


        


More information about the cfe-commits mailing list