[clang] [clang][RISCV]: Enable --gcc-install-dir for bare metal targets (PR #71803)

via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 9 04:49:17 PST 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-risc-v

Author: None (mihailo-stojanovic)

<details>
<summary>Changes</summary>

Fix the issue where Baremetal toolchain is created instead of the RISCVToolchain when GCC installation is explicitly passed via the gcc-install-dir option.

---
Full diff: https://github.com/llvm/llvm-project/pull/71803.diff


4 Files Affected:

- (modified) clang/lib/Driver/ToolChains/RISCVToolchain.cpp (+3) 
- (added) clang/test/Driver/Inputs/multilib_riscv_elf_sdk/riscv64-unknown-elf/include/c++/8.2.0/.keep () 
- (added) clang/test/Driver/Inputs/multilib_riscv_elf_sdk/riscv64-unknown-elf/include/c++/8.2.0/backward/.keep () 
- (modified) clang/test/Driver/gcc-install-dir.cpp (+12) 


``````````diff
diff --git a/clang/lib/Driver/ToolChains/RISCVToolchain.cpp b/clang/lib/Driver/ToolChains/RISCVToolchain.cpp
index 7e6abd144428783..6b27ea224eb02ee 100644
--- a/clang/lib/Driver/ToolChains/RISCVToolchain.cpp
+++ b/clang/lib/Driver/ToolChains/RISCVToolchain.cpp
@@ -40,6 +40,9 @@ bool RISCVToolChain::hasGCCToolchain(const Driver &D,
   if (Args.getLastArg(options::OPT_gcc_toolchain))
     return true;
 
+  if (Args.getLastArg(options::OPT_gcc_install_dir_EQ))
+    return true;
+
   SmallString<128> GCCDir;
   llvm::sys::path::append(GCCDir, D.Dir, "..", D.getTargetTriple(),
                           "lib/crt0.o");
diff --git a/clang/test/Driver/Inputs/multilib_riscv_elf_sdk/riscv64-unknown-elf/include/c++/8.2.0/.keep b/clang/test/Driver/Inputs/multilib_riscv_elf_sdk/riscv64-unknown-elf/include/c++/8.2.0/.keep
new file mode 100644
index 000000000000000..e69de29bb2d1d64
diff --git a/clang/test/Driver/Inputs/multilib_riscv_elf_sdk/riscv64-unknown-elf/include/c++/8.2.0/backward/.keep b/clang/test/Driver/Inputs/multilib_riscv_elf_sdk/riscv64-unknown-elf/include/c++/8.2.0/backward/.keep
new file mode 100644
index 000000000000000..e69de29bb2d1d64
diff --git a/clang/test/Driver/gcc-install-dir.cpp b/clang/test/Driver/gcc-install-dir.cpp
index 955f162a2ce3a19..d22ca545508370d 100644
--- a/clang/test/Driver/gcc-install-dir.cpp
+++ b/clang/test/Driver/gcc-install-dir.cpp
@@ -37,6 +37,18 @@
 // DEBIAN_X86_64_M32-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/32"
 // DEBIAN_X86_64_M32-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../lib32"
 
+/// Test GCC installation on bare-metal RISCV64.
+// RUN: %clang -### %s --target=riscv64-unknown-elf --sysroot=%S/Inputs/multilib_riscv_elf_sdk/riscv64-unknown-elf/ --stdlib=platform --rtlib=platform \
+// RUN:   --gcc-install-dir=%S/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/ 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=ELF_RISCV64
+// ELF_RISCV64:      "-internal-isystem"
+// ELF_RISCV64-SAME: {{^}} "[[SYSROOT:[^"]+]]/include/c++/8.2.0"
+// ELF_RISCV64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/include/c++/8.2.0/riscv64-unknown-elf/rv64imac/lp64"
+// ELF_RISCV64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/include/c++/8.2.0/backward"
+// ELF_RISCV64:      "-L
+// ELF_RISCV64-SAME: {{^}}[[SYSROOT:[^"]+]]/lib/gcc/riscv64-unknown-elf/8.2.0/rv64imac/lp64"
+// ELF_RISCV64-SAME: {{^}} "-L[[SYSROOT]]/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib/rv64imac/lp64"
+
 // RUN: not %clangxx %s -### --target=x86_64-unknown-linux-gnu --sysroot=%S/Inputs/debian_multiarch_tree \
 // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir --stdlib=platform --rtlib=platform \
 // RUN:   --gcc-install-dir=%S/Inputs/debian_multiarch_tree/usr/lib/gcc/x86_64-linux-gnu 2>&1 | FileCheck %s --check-prefix=INVALID

``````````

</details>


https://github.com/llvm/llvm-project/pull/71803


More information about the cfe-commits mailing list