llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: None (hitmoon) <details> <summary>Changes</summary> Add support for freebsd on loongarch --- Full diff: https://github.com/llvm/llvm-project/pull/119191.diff 4 Files Affected: - (modified) clang/lib/Basic/Targets.cpp (+6) - (modified) clang/lib/Basic/Targets/OSTargets.h (+3) - (modified) clang/lib/Driver/ToolChains/FreeBSD.cpp (+14) - (modified) clang/test/Driver/freebsd.c (+9) ``````````diff diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 0021d33c45d7c9..98d151cfe4312f 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -726,6 +726,9 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::Linux: return std::make_unique<LinuxTargetInfo<LoongArch32TargetInfo>>(Triple, Opts); + case llvm::Triple::FreeBSD: + return std::make_unique<FreeBSDTargetInfo<LoongArch32TargetInfo>>(Triple, + Opts); default: return std::make_unique<LoongArch32TargetInfo>(Triple, Opts); } @@ -734,6 +737,9 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::Linux: return std::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple, Opts); + case llvm::Triple::FreeBSD: + return std::make_unique<FreeBSDTargetInfo<LoongArch64TargetInfo>>(Triple, + Opts); default: return std::make_unique<LoongArch64TargetInfo>(Triple, Opts); } diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h index 75f53e96ce28f6..a39d8526e958f3 100644 --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -231,6 +231,9 @@ class LLVM_LIBRARY_VISIBILITY FreeBSDTargetInfo : public OSTargetInfo<Target> { case llvm::Triple::riscv32: case llvm::Triple::riscv64: break; + case llvm::Triple::loongarch32: + case llvm::Triple::loongarch64: + break; } } }; diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp b/clang/lib/Driver/ToolChains/FreeBSD.cpp index 3d744bc087f467..be44fc4fe1a84d 100644 --- a/clang/lib/Driver/ToolChains/FreeBSD.cpp +++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -213,6 +213,14 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-m"); CmdArgs.push_back("elf64lriscv"); break; + case llvm::Triple::loongarch32: + CmdArgs.push_back("-m"); + CmdArgs.push_back("elf32loongarch"); + break; + case llvm::Triple::loongarch64: + CmdArgs.push_back("-m"); + CmdArgs.push_back("elf64loongarch"); + break; default: break; } @@ -223,6 +231,12 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("--no-relax"); } + if (Triple.isLoongArch64()) { + CmdArgs.push_back("-X"); + if (Args.hasArg(options::OPT_mno_relax)) + CmdArgs.push_back("--no-relax"); + } + if (Arg *A = Args.getLastArg(options::OPT_G)) { if (ToolChain.getTriple().isMIPS()) { StringRef v = A->getValue(); diff --git a/clang/test/Driver/freebsd.c b/clang/test/Driver/freebsd.c index 10fe155fee8744..c99beade607343 100644 --- a/clang/test/Driver/freebsd.c +++ b/clang/test/Driver/freebsd.c @@ -77,6 +77,15 @@ // RUN: | FileCheck --check-prefix=CHECK-RV64I-LD %s // CHECK-RV64I-LD: ld{{.*}}" {{.*}} "-m" "elf64lriscv" // +// Check that LOONGARCH passes the correct linker emulation. +// +// RUN: %clang --target=loongarch32-freebsd -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LOONG32-LD %s +// CHECK-LOONG32-LD: ld{{.*}}" {{.*}} "-m" "elf32loongarch" +// RUN: %clang --target=loongarch64-freebsd -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LOONG64-LD %s +// CHECK-LOONG64-LD: ld{{.*}}" {{.*}} "-m" "elf64loongarch" +// // Check that the new linker flags are passed to FreeBSD // RUN: %clang --target=x86_64-pc-freebsd10.0 -m32 %s \ // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ `````````` </details> https://github.com/llvm/llvm-project/pull/119191 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits