llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-hexagon Author: quic-k <details> <summary>Changes</summary> depends on https://github.com/llvm/llvm-project/pull/195621 --- Full diff: https://github.com/llvm/llvm-project/pull/195795.diff 11 Files Affected: - (modified) clang/lib/Basic/Targets.cpp (+2) - (modified) clang/lib/Basic/Targets/OSTargets.h (+13) - (modified) clang/lib/Driver/ToolChains/Hexagon.cpp (+15-3) - (added) clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/.keep () - (added) clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/include/.keep () - (added) clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/include/c++/.keep () - (added) clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/include/c++/v1/.keep () - (modified) clang/test/Driver/hexagon-toolchain-picolibc.c (+118) - (modified) clang/test/Preprocessor/hexagon-predefines.c (+6) - (modified) llvm/include/llvm/TargetParser/Triple.h (+5-1) - (modified) llvm/lib/TargetParser/Triple.cpp (+3) ``````````diff diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index d9cac93fd2906..6fab36b88067a 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -128,6 +128,8 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, return std::make_unique<LinuxTargetInfo<HexagonTargetInfo>>(Triple, Opts); if (Triple.isOSQurt()) return std::make_unique<QURTTargetInfo<HexagonTargetInfo>>(Triple, Opts); + if (Triple.isOSH2()) + return std::make_unique<H2TargetInfo<HexagonTargetInfo>>(Triple, Opts); return std::make_unique<HexagonTargetInfo>(Triple, Opts); case llvm::Triple::lanai: diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h index 9e2916eace079..28e3de2e7d20f 100644 --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -1104,6 +1104,19 @@ class LLVM_LIBRARY_VISIBILITY QURTTargetInfo : public OSTargetInfo<Target> { using OSTargetInfo<Target>::OSTargetInfo; }; +// H2 Target +template <typename Target> +class LLVM_LIBRARY_VISIBILITY H2TargetInfo : public OSTargetInfo<Target> { +protected: + void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, + MacroBuilder &Builder) const override { + Builder.defineMacro("__h2__"); + } + +public: + using OSTargetInfo<Target>::OSTargetInfo; +}; + // SerenityOS target template <typename Target> class LLVM_LIBRARY_VISIBILITY SerenityTargetInfo : public OSTargetInfo<Target> { diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index e0e5ab5c1fde7..41f03e01b69c1 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -414,8 +414,14 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA, if (!IsShared) { if (HTC.GetCStdlibType(Args) == ToolChain::CST_Picolibc) { SmallString<128> Crt0 = LibraryDir; - llvm::sys::path::append(Crt0, "crt0-semihost.o"); - CmdArgs.push_back(Args.MakeArgString(Crt0)); + if (HTC.getTriple().isOSH2()) { + llvm::sys::path::append(Crt0, "crt0-noflash-hosted.o"); + CmdArgs.push_back(Args.MakeArgString(Crt0)); + } else if (HTC.getTriple().isOSUnknown()) { + llvm::sys::path::append(Crt0, "crt0-semihost.o"); + CmdArgs.push_back(Args.MakeArgString(Crt0)); + } + // Known OS other than H2: no semihost crt0; OS provides its own. } else { if (HasStandalone) { SmallString<128> Crt0SA = LibraryDir; @@ -468,7 +474,13 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA, if (!IsShared) { if (HTC.GetCStdlibType(Args) == ToolChain::CST_Picolibc) { - CmdArgs.push_back("-lsemihost"); + if (HTC.getTriple().isOSH2()) { + CmdArgs.push_back("-lh2"); + CmdArgs.push_back("-lsyscall_wrapper"); + } else if (HTC.getTriple().isOSUnknown()) { + CmdArgs.push_back("-lsemihost"); + } + // Known OS other than H2: no semihost lib; OS provides its own. } else { for (StringRef Lib : OsLibs) CmdArgs.push_back(Args.MakeArgString("-l" + Lib)); diff --git a/clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/.keep b/clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/.keep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/include/.keep b/clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/include/.keep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/include/c++/.keep b/clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/include/c++/.keep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/include/c++/v1/.keep b/clang/test/Driver/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-h2-elf/include/c++/v1/.keep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/hexagon-toolchain-picolibc.c b/clang/test/Driver/hexagon-toolchain-picolibc.c index b8ac8a9c5c88d..8282a4da81636 100644 --- a/clang/test/Driver/hexagon-toolchain-picolibc.c +++ b/clang/test/Driver/hexagon-toolchain-picolibc.c @@ -118,3 +118,121 @@ // CHECK-LIBPATHS-PIC: "-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}G0{{/|\\\\}}pic" // CHECK-LIBPATHS-PIC: "-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}G0" // CHECK-LIBPATHS-PIC: "-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68" + +// ============================================================================= +// H2 OS tests (--target=hexagon-h2-elf --cstdlib=picolibc) +// Differences from hexagon-none-elf: crt0-noflash-hosted.o, -lh2 -lsyscall_wrapper +// ============================================================================= + +// ----------------------------------------------------------------------------- +// Test standard include paths for H2 +// ----------------------------------------------------------------------------- +// RUN: %clang -### --target=hexagon-h2-elf --cstdlib=picolibc \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin %s 2>&1 | FileCheck -check-prefix=CHECK-H2-C-INCLUDES %s +// CHECK-H2-C-INCLUDES: "-cc1" {{.*}} "-internal-isystem" "{{.*}}{{/|\\\\}}lib{{/|\\\\}}clang{{/|\\\\}}{{[0-9]+}}{{/|\\\\}}include" +// CHECK-H2-C-INCLUDES: "-internal-externc-isystem" "{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}include" + +// RUN: %clangxx -### --target=hexagon-h2-elf --cstdlib=picolibc \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin %s 2>&1 | FileCheck -check-prefix=CHECK-H2-CXX-INCLUDES %s +// CHECK-H2-CXX-INCLUDES: "-cc1" {{.*}} "-internal-isystem" "{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1" +// CHECK-H2-CXX-INCLUDES: "-internal-isystem" "{{.*}}{{/|\\\\}}lib{{/|\\\\}}clang{{/|\\\\}}{{[0-9]+}}{{/|\\\\}}include" +// CHECK-H2-CXX-INCLUDES: "-internal-externc-isystem" "{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}include" + +// ----------------------------------------------------------------------------- +// H2 start files: crt0-noflash-hosted.o (not crt0-semihost.o) +// ----------------------------------------------------------------------------- +// RUN: %clang --target=hexagon-h2-elf --cstdlib=picolibc -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-H2-STARTUP +// CHECK-H2-STARTUP: "{{.*}}crt0-noflash-hosted.o" +// CHECK-H2-STARTUP-NOT: "{{.*}}crt0-semihost.o" + +// RUN: %clang --target=hexagon-h2-elf --cstdlib=picolibc -nostartfiles -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-H2-NOSTART +// CHECK-H2-NOSTART-NOT: "{{.*}}crt0-noflash-hosted.o" + +// ----------------------------------------------------------------------------- +// H2: -nostdlib, -nostartfiles, -nodefaultlibs, -nolibc +// ----------------------------------------------------------------------------- +// RUN: %clangxx -### --target=hexagon-h2-elf --cstdlib=picolibc \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv68 \ +// RUN: -nostdlib %s 2>&1 | FileCheck -check-prefix=CHECK-H2-NOSTDLIB %s +// CHECK-H2-NOSTDLIB: "-cc1" +// CHECK-H2-NOSTDLIB: {{hexagon-link|ld}} +// CHECK-H2-NOSTDLIB-NOT: "{{.*}}crt0-noflash-hosted.o" +// CHECK-H2-NOSTDLIB-NOT: "-lc++" +// CHECK-H2-NOSTDLIB-NOT: "-lm" +// CHECK-H2-NOSTDLIB-NOT: "--start-group" +// CHECK-H2-NOSTDLIB-NOT: "-lh2" +// CHECK-H2-NOSTDLIB-NOT: "-lsyscall_wrapper" +// CHECK-H2-NOSTDLIB-NOT: "-lc" +// CHECK-H2-NOSTDLIB-NOT: "-lclang_rt.builtins" +// CHECK-H2-NOSTDLIB-NOT: "--end-group" + +// RUN: %clangxx -### --target=hexagon-h2-elf --cstdlib=picolibc \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv68 \ +// RUN: -nostartfiles %s 2>&1 | FileCheck -check-prefix=CHECK-H2-NOSTARTFILES %s +// CHECK-H2-NOSTARTFILES: "-cc1" +// CHECK-H2-NOSTARTFILES: {{hexagon-link|ld}} +// CHECK-H2-NOSTARTFILES-NOT: "{{.*}}crt0-noflash-hosted.o" +// CHECK-H2-NOSTARTFILES: "-lc++" "-lc++abi" "-lunwind" "-lm" "--start-group" "-lh2" "-lsyscall_wrapper" "-lc" "-lclang_rt.builtins" "--end-group" + +// RUN: %clangxx -### --target=hexagon-h2-elf --cstdlib=picolibc \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv68 \ +// RUN: -nodefaultlibs %s 2>&1 | FileCheck -check-prefix=CHECK-H2-NODEFAULTLIBS %s +// CHECK-H2-NODEFAULTLIBS: "-cc1" +// CHECK-H2-NODEFAULTLIBS: {{hexagon-link|ld}} +// CHECK-H2-NODEFAULTLIBS: "{{.*}}crt0-noflash-hosted.o" +// CHECK-H2-NODEFAULTLIBS-NOT: "-lc++" +// CHECK-H2-NODEFAULTLIBS-NOT: "-lm" +// CHECK-H2-NODEFAULTLIBS-NOT: "--start-group" +// CHECK-H2-NODEFAULTLIBS-NOT: "-lh2" +// CHECK-H2-NODEFAULTLIBS-NOT: "-lsyscall_wrapper" +// CHECK-H2-NODEFAULTLIBS-NOT: "-lc" +// CHECK-H2-NODEFAULTLIBS-NOT: "-lclang_rt.builtins" +// CHECK-H2-NODEFAULTLIBS-NOT: "--end-group" + +// RUN: %clangxx -### --target=hexagon-h2-elf --cstdlib=picolibc \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv68 \ +// RUN: -nolibc %s 2>&1 | FileCheck -check-prefix=CHECK-H2-NOLIBC %s +// CHECK-H2-NOLIBC: "-cc1" +// CHECK-H2-NOLIBC: {{hexagon-link|ld}} +// CHECK-H2-NOLIBC: "{{.*}}crt0-noflash-hosted.o" +// CHECK-H2-NOLIBC-SAME: "-lc++" +// CHECK-H2-NOLIBC-SAME: "-lm" +// CHECK-H2-NOLIBC-SAME: "--start-group" +// CHECK-H2-NOLIBC-SAME: "-lh2" +// CHECK-H2-NOLIBC-SAME: "-lsyscall_wrapper" +// CHECK-H2-NOLIBC-NOT: "-lc" +// CHECK-H2-NOLIBC-SAME: "-lclang_rt.builtins" +// CHECK-H2-NOLIBC-SAME: "--end-group" + +// ----------------------------------------------------------------------------- +// H2: compiler-rt is forced (not -lgcc) +// ----------------------------------------------------------------------------- +// RUN: %clang --target=hexagon-h2-elf --cstdlib=picolibc -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-H2-RTLIB +// RUN: %clangxx --target=hexagon-h2-elf --cstdlib=picolibc -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-H2-RTLIB +// CHECK-H2-RTLIB: "-lclang_rt.builtins" +// CHECK-H2-RTLIB-NOT: "-lgcc" + +// ----------------------------------------------------------------------------- +// H2: libunwind linked for C++ but not C +// ----------------------------------------------------------------------------- +// RUN: %clangxx --target=hexagon-h2-elf --cstdlib=picolibc -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-H2-CXX-UNWIND +// CHECK-H2-CXX-UNWIND: "-lunwind" + +// ----------------------------------------------------------------------------- +// H2: library search paths use target/picolibc/hexagon-unknown-h2-elf/ +// ----------------------------------------------------------------------------- +// RUN: %clang --target=hexagon-h2-elf --cstdlib=picolibc \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv68 -### %s 2>&1 | FileCheck -check-prefix=CHECK-H2-LIBPATHS %s +// CHECK-H2-LIBPATHS: "-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68" +// CHECK-H2-LIBPATHS-NOT: "-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}G0" + +// RUN: %clang --target=hexagon-h2-elf --cstdlib=picolibc \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv68 -G0 -### %s 2>&1 | FileCheck -check-prefix=CHECK-H2-LIBPATHS-G0 %s +// CHECK-H2-LIBPATHS-G0: "-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}G0" +// CHECK-H2-LIBPATHS-G0: "-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68" diff --git a/clang/test/Preprocessor/hexagon-predefines.c b/clang/test/Preprocessor/hexagon-predefines.c index 7652e4169a63c..cb3e9492ea07e 100644 --- a/clang/test/Preprocessor/hexagon-predefines.c +++ b/clang/test/Preprocessor/hexagon-predefines.c @@ -255,3 +255,9 @@ // CHECK-QURT: #define __hexagon__ 1 // CHECK-QURT: #define __qurt__ 1 // CHECK-QURT-NOT: #define __linux__ + +// RUN: %clang_cc1 -E -dM -triple hexagon-unknown-h2 %s | FileCheck \ +// RUN: %s -check-prefix CHECK-H2 +// CHECK-H2: #define __h2__ 1 +// CHECK-H2: #define __hexagon__ 1 +// CHECK-H2-NOT: #define __linux__ diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index 6e26f14ab8448..d5a42d9646c18 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -260,7 +260,8 @@ class Triple { ChipStar, Firmware, QURT, - LastOSType = QURT + H2, + LastOSType = H2 }; enum EnvironmentType { UnknownEnvironment, @@ -774,6 +775,9 @@ class Triple { /// Tests whether the OS is QURT. bool isOSQurt() const { return getOS() == Triple::QURT; } + /// Tests whether the OS is H2. + bool isOSH2() const { return getOS() == Triple::H2; } + /// Tests whether the OS uses the ELF binary format. bool isOSBinFormatELF() const { return getObjectFormat() == Triple::ELF; } diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp index 80f7ef063c908..c6515425b7eb5 100644 --- a/llvm/lib/TargetParser/Triple.cpp +++ b/llvm/lib/TargetParser/Triple.cpp @@ -495,6 +495,8 @@ StringRef Triple::getOSTypeName(OSType Kind) { return "firmware"; case QURT: return "qurt"; + case H2: + return "h2"; } llvm_unreachable("Invalid OSType"); @@ -965,6 +967,7 @@ static Triple::OSType parseOS(StringRef OSName) { .StartsWith("chipstar", Triple::ChipStar) .StartsWith("firmware", Triple::Firmware) .StartsWith("qurt", Triple::QURT) + .StartsWith("h2", Triple::H2) .Default(Triple::UnknownOS); } `````````` </details> https://github.com/llvm/llvm-project/pull/195795 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
