kristof.beyls created this revision. kristof.beyls added reviewers: psmith, miyuki, srhines. Herald added subscribers: s.egerton, simoncook. kristof.beyls requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D111134 Files: clang/lib/Driver/ToolChains/BareMetal.cpp clang/test/Driver/baremetal.cpp clang/test/Driver/gcc_forward.c Index: clang/test/Driver/gcc_forward.c =================================================================== --- clang/test/Driver/gcc_forward.c +++ clang/test/Driver/gcc_forward.c @@ -1,4 +1,4 @@ -// RUN: %clang -### %s -target aarch64-none-elf \ +// RUN: %clang -### %s -target x86-none-elf \ // RUN: --coverage -e _start -fuse-ld=lld --ld-path=ld -nostartfiles \ // RUN: -nostdlib -r -rdynamic -specs=nosys.specs -static -static-pie \ // RUN: 2>&1 | FileCheck --check-prefix=FORWARD %s Index: clang/test/Driver/baremetal.cpp =================================================================== --- clang/test/Driver/baremetal.cpp +++ clang/test/Driver/baremetal.cpp @@ -102,6 +102,21 @@ // RUN: | FileCheck %s --check-prefix=CHECK-SYSROOT-INC // CHECK-SYSROOT-INC-NOT: "-internal-isystem" "include" +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -target aarch64-none-elf \ +// RUN: | FileCheck --check-prefix=CHECK-AARCH64-NO-HOST-INC %s +// Verify that the bare metal driver does not include any host system paths. +// I.e. verify it only includes paths relative to the clang binary, when no +// sysroot is specified. +// We are constrained a little bit by FileCheck's features here, so just +// check that the first -internal-isystem points to an include path in the +// clang install, not somewhere else. Ideally, we'd verify this for all +// -internal-isystem paths, but we don't know how many to expect, so that is +// hard to test for exactly here. +// CHECK-AARCH64-NO-HOST-INC: InstalledDir: [[INSTALLEDDIR:.+]] +// CHECK-AARCH64-NO-HOST-INC: "-internal-isystem" "[[INSTALLEDDIR]] + + // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -target riscv64-unknown-elf \ // RUN: -L some/directory/user/asked/for \ Index: clang/lib/Driver/ToolChains/BareMetal.cpp =================================================================== --- clang/lib/Driver/ToolChains/BareMetal.cpp +++ clang/lib/Driver/ToolChains/BareMetal.cpp @@ -125,6 +125,21 @@ return true; } +/// Is the triple aarch64-none-elf? +static bool isAArch64BareMetal(const llvm::Triple &Triple) { + if (Triple.getArch() != llvm::Triple::aarch64) + return false; + + if (Triple.getVendor() != llvm::Triple::UnknownVendor) + return false; + + if (Triple.getOS() != llvm::Triple::UnknownOS) + return false; + + return Triple.getEnvironmentName() == "elf"; +} + + static bool isRISCVBareMetal(const llvm::Triple &Triple) { if (Triple.getArch() != llvm::Triple::riscv32 && Triple.getArch() != llvm::Triple::riscv64) @@ -151,7 +166,8 @@ } bool BareMetal::handlesTarget(const llvm::Triple &Triple) { - return isARMBareMetal(Triple) || isRISCVBareMetal(Triple); + return isARMBareMetal(Triple) || isAArch64BareMetal(Triple) || + isRISCVBareMetal(Triple); } Tool *BareMetal::buildLinker() const {
Index: clang/test/Driver/gcc_forward.c =================================================================== --- clang/test/Driver/gcc_forward.c +++ clang/test/Driver/gcc_forward.c @@ -1,4 +1,4 @@ -// RUN: %clang -### %s -target aarch64-none-elf \ +// RUN: %clang -### %s -target x86-none-elf \ // RUN: --coverage -e _start -fuse-ld=lld --ld-path=ld -nostartfiles \ // RUN: -nostdlib -r -rdynamic -specs=nosys.specs -static -static-pie \ // RUN: 2>&1 | FileCheck --check-prefix=FORWARD %s Index: clang/test/Driver/baremetal.cpp =================================================================== --- clang/test/Driver/baremetal.cpp +++ clang/test/Driver/baremetal.cpp @@ -102,6 +102,21 @@ // RUN: | FileCheck %s --check-prefix=CHECK-SYSROOT-INC // CHECK-SYSROOT-INC-NOT: "-internal-isystem" "include" +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -target aarch64-none-elf \ +// RUN: | FileCheck --check-prefix=CHECK-AARCH64-NO-HOST-INC %s +// Verify that the bare metal driver does not include any host system paths. +// I.e. verify it only includes paths relative to the clang binary, when no +// sysroot is specified. +// We are constrained a little bit by FileCheck's features here, so just +// check that the first -internal-isystem points to an include path in the +// clang install, not somewhere else. Ideally, we'd verify this for all +// -internal-isystem paths, but we don't know how many to expect, so that is +// hard to test for exactly here. +// CHECK-AARCH64-NO-HOST-INC: InstalledDir: [[INSTALLEDDIR:.+]] +// CHECK-AARCH64-NO-HOST-INC: "-internal-isystem" "[[INSTALLEDDIR]] + + // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -target riscv64-unknown-elf \ // RUN: -L some/directory/user/asked/for \ Index: clang/lib/Driver/ToolChains/BareMetal.cpp =================================================================== --- clang/lib/Driver/ToolChains/BareMetal.cpp +++ clang/lib/Driver/ToolChains/BareMetal.cpp @@ -125,6 +125,21 @@ return true; } +/// Is the triple aarch64-none-elf? +static bool isAArch64BareMetal(const llvm::Triple &Triple) { + if (Triple.getArch() != llvm::Triple::aarch64) + return false; + + if (Triple.getVendor() != llvm::Triple::UnknownVendor) + return false; + + if (Triple.getOS() != llvm::Triple::UnknownOS) + return false; + + return Triple.getEnvironmentName() == "elf"; +} + + static bool isRISCVBareMetal(const llvm::Triple &Triple) { if (Triple.getArch() != llvm::Triple::riscv32 && Triple.getArch() != llvm::Triple::riscv64) @@ -151,7 +166,8 @@ } bool BareMetal::handlesTarget(const llvm::Triple &Triple) { - return isARMBareMetal(Triple) || isRISCVBareMetal(Triple); + return isARMBareMetal(Triple) || isAArch64BareMetal(Triple) || + isRISCVBareMetal(Triple); } Tool *BareMetal::buildLinker() const {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits