llvm: add LoongArch target support, not enabled by default

Note there is ongoing work to add LoongArch support to the base system,
but having target support in llvm is an essential component.

This must be explicitly enabled using WITH_LLVM_TARGET_LOONGARCH.

Reviewed by:	dim
MFC after:	1 week
Differential Revision: https://reviews.freebsd.org/D59899

(cherry picked from commit 2f49e40a68)
This commit is contained in:
Xiaoqiang Zhao authored and Dimitry Andric committed 2026-10-06 18:37:49 +02:00
1 parent 3108ab6747
commit bceab8be40
12 files changed
+74 -14

No files matched your search

@@ -33,6 +33,9 @@ LLVM_ASM_PARSER(ARM)
#ifdef LLVM_TARGET_ENABLE_BPF
LLVM_ASM_PARSER(BPF)
#endif
#ifdef LLVM_TARGET_ENABLE_LOONGARCH
LLVM_ASM_PARSER(LoongArch)
#endif
#ifdef LLVM_TARGET_ENABLE_POWERPC
LLVM_ASM_PARSER(PowerPC)
#endif
@@ -33,6 +33,9 @@ LLVM_ASM_PRINTER(ARM)
#ifdef LLVM_TARGET_ENABLE_BPF
LLVM_ASM_PRINTER(BPF)
#endif
#ifdef LLVM_TARGET_ENABLE_LOONGARCH
LLVM_ASM_PRINTER(LoongArch)
#endif
#ifdef LLVM_TARGET_ENABLE_POWERPC
LLVM_ASM_PRINTER(PowerPC)
#endif
@@ -33,6 +33,9 @@ LLVM_DISASSEMBLER(ARM)
#ifdef LLVM_TARGET_ENABLE_BPF
LLVM_DISASSEMBLER(BPF)
#endif
#ifdef LLVM_TARGET_ENABLE_LOONGARCH
LLVM_DISASSEMBLER(LoongArch)
#endif
#ifdef LLVM_TARGET_ENABLE_POWERPC
LLVM_DISASSEMBLER(PowerPC)
#endif
@@ -32,6 +32,9 @@ LLVM_TARGET(ARM)
#ifdef LLVM_TARGET_ENABLE_BPF
LLVM_TARGET(BPF)
#endif
#ifdef LLVM_TARGET_ENABLE_LOONGARCH
LLVM_TARGET(LoongArch)
#endif
#ifdef LLVM_TARGET_ENABLE_POWERPC
LLVM_TARGET(PowerPC)
#endif
+49 -6
View File
@@ -23,14 +23,15 @@ CFLAGS+= -I${.OBJDIR}
CFLAGS+= -I${SRCTOP}/sys/contrib/zstd/lib
.if ${MK_LLVM_TARGET_AARCH64} == "no" && ${MK_LLVM_TARGET_ARM} == "no" && \
${MK_LLVM_TARGET_BPF} == "no" && ${MK_LLVM_TARGET_POWERPC} == "no" && \
${MK_LLVM_TARGET_RISCV} == "no" && ${MK_LLVM_TARGET_X86} == "no"
${MK_LLVM_TARGET_BPF} == "no" && ${MK_LLVM_TARGET_LOONGARCH} == "no" && \
${MK_LLVM_TARGET_POWERPC} == "no" && ${MK_LLVM_TARGET_RISCV} == "no" && \
${MK_LLVM_TARGET_X86} == "no"
.error Please enable at least one of: MK_LLVM_TARGET_AARCH64,\
MK_LLVM_TARGET_ARM, MK_LLVM_TARGET_BPF, MK_LLVM_TARGET_POWERPC,\
MK_LLVM_TARGET_RISCV, or MK_LLVM_TARGET_X86
MK_LLVM_TARGET_ARM, MK_LLVM_TARGET_BPF, MK_LLVM_TARGET_LOONGARCH, \
MK_LLVM_TARGET_POWERPC, MK_LLVM_TARGET_RISCV, or MK_LLVM_TARGET_X86
.endif
.for arch in AArch64 ARM BPF PowerPC RISCV X86
.for arch in AArch64 ARM BPF LoongArch PowerPC RISCV X86
. if ${MK_LLVM_TARGET_${arch:tu}} != "no"
CFLAGS+= -I${LLVM_SRCS}/lib/Target/${arch}
. endif
@@ -1754,6 +1755,36 @@ SRCS_MIN+= Target/X86/X86VZeroUpper.cpp
SRCS_MIN+= Target/X86/X86WinEHState.cpp
SRCS_MIN+= Target/X86/X86WinEHUnwindV2.cpp
.endif # MK_LLVM_TARGET_X86
.if ${MK_LLVM_TARGET_LOONGARCH} != "no"
SRCS_MIN+= Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
SRCS_MIN+= Target/LoongArch/Disassembler/LoongArchDisassembler.cpp
SRCS_MIN+= Target/LoongArch/LoongArchAsmPrinter.cpp
SRCS_MIN+= Target/LoongArch/LoongArchDeadRegisterDefinitions.cpp
SRCS_MIN+= Target/LoongArch/LoongArchExpandAtomicPseudoInsts.cpp
SRCS_MIN+= Target/LoongArch/LoongArchExpandPseudoInsts.cpp
SRCS_MIN+= Target/LoongArch/LoongArchFrameLowering.cpp
SRCS_MIN+= Target/LoongArch/LoongArchISelDAGToDAG.cpp
SRCS_MIN+= Target/LoongArch/LoongArchISelLowering.cpp
SRCS_MIN+= Target/LoongArch/LoongArchInstrInfo.cpp
SRCS_MIN+= Target/LoongArch/LoongArchMCInstLower.cpp
SRCS_MIN+= Target/LoongArch/LoongArchMergeBaseOffset.cpp
SRCS_MIN+= Target/LoongArch/LoongArchOptWInstrs.cpp
SRCS_MIN+= Target/LoongArch/LoongArchRegisterInfo.cpp
SRCS_MIN+= Target/LoongArch/LoongArchSubtarget.cpp
SRCS_MIN+= Target/LoongArch/LoongArchTargetMachine.cpp
SRCS_MIN+= Target/LoongArch/LoongArchTargetTransformInfo.cpp
SRCS_MIN+= Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
SRCS_MIN+= Target/LoongArch/MCTargetDesc/LoongArchBaseInfo.cpp
SRCS_MIN+= Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp
SRCS_MIN+= Target/LoongArch/MCTargetDesc/LoongArchELFStreamer.cpp
SRCS_MIN+= Target/LoongArch/MCTargetDesc/LoongArchInstPrinter.cpp
SRCS_MIN+= Target/LoongArch/MCTargetDesc/LoongArchMCAsmInfo.cpp
SRCS_MIN+= Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
SRCS_MIN+= Target/LoongArch/MCTargetDesc/LoongArchMCTargetDesc.cpp
SRCS_MIN+= Target/LoongArch/MCTargetDesc/LoongArchMatInt.cpp
SRCS_MIN+= Target/LoongArch/MCTargetDesc/LoongArchTargetStreamer.cpp
SRCS_MIN+= Target/LoongArch/TargetInfo/LoongArchTargetInfo.cpp
.endif # MK_LLVM_TARGET_LOONGARCH
SRCS_MIN+= TargetParser/AArch64TargetParser.cpp
SRCS_MIN+= TargetParser/ARMTargetParser.cpp
SRCS_MIN+= TargetParser/ARMTargetParserCommon.cpp
@@ -2268,7 +2299,8 @@ beforebuild:
# Note: some rules are superfluous, not every combination is valid.
.for arch in \
AArch64/AArch64 ARM/ARM BPF/BPF PowerPC/PPC RISCV/RISCV X86/X86
AArch64/AArch64 ARM/ARM BPF/BPF LoongArch/LoongArch PowerPC/PPC \
RISCV/RISCV X86/X86
. for hdr in \
AsmMatcher/-gen-asm-matcher \
AsmWriter/-gen-asm-writer \
@@ -2415,6 +2447,17 @@ TGHDRS+= X86GenRegisterBank.inc
TGHDRS+= X86GenRegisterInfo.inc
TGHDRS+= X86GenSubtargetInfo.inc
.endif # MK_LLVM_TARGET_X86
.if ${MK_LLVM_TARGET_LOONGARCH} != "no"
TGHDRS+= LoongArchGenAsmMatcher.inc
TGHDRS+= LoongArchGenAsmWriter.inc
TGHDRS+= LoongArchGenDAGISel.inc
TGHDRS+= LoongArchGenDisassemblerTables.inc
TGHDRS+= LoongArchGenInstrInfo.inc
TGHDRS+= LoongArchGenMCCodeEmitter.inc
TGHDRS+= LoongArchGenMCPseudoLowering.inc
TGHDRS+= LoongArchGenRegisterInfo.inc
TGHDRS+= LoongArchGenSubtargetInfo.inc
.endif # MK_LLVM_TARGET_LOONGARCH
DEPENDFILES+= ${TGHDRS:C/$/.d/}
DPSRCS+= ${TGHDRS}
+6
View File
@@ -83,6 +83,12 @@ CFLAGS+= -DLLVM_TARGET_ENABLE_RISCV
LLVM_NATIVE_ARCH= RISCV
. endif
.endif
.if ${MK_LLVM_TARGET_LOONGARCH} != "no"
CFLAGS+= -DLLVM_TARGET_ENABLE_LOONGARCH
. if ${MACHINE_CPUARCH} == "loongarch"
LLVM_NATIVE_ARCH= LoongArch
. endif
.endif
.if ${MK_LLVM_TARGET_X86} != "no"
CFLAGS+= -DLLVM_TARGET_ENABLE_X86
. if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
+3 -4
View File
@@ -1,5 +1,5 @@
.\" DO NOT EDIT-- this file is @generated by tools/build/options/makeman.
.Dd October 1, 2026
.Dd October 6, 2026
.Dt SRC.CONF 5
.Os
.Sh NAME
@@ -1021,9 +1021,8 @@ The
option should be used rather than this in most cases.
.It Va WITH_LLVM_TARGET_BPF
Build LLVM target support for BPF.
The
.Va LLVM_TARGET_ALL
option should be used rather than this in most cases.
.It Va WITH_LLVM_TARGET_LOONGARCH
Build LLVM target support for LoongArch.
.It Va WITHOUT_LLVM_TARGET_POWERPC
Do not build LLVM target support for PowerPC.
The
+1 -1
View File
@@ -288,7 +288,7 @@ __DEFAULT_DEPENDENT_OPTIONS+= LLVM_TARGET_${__llt:${__LLVM_TARGET_FILT}:tu}/LLVM
.endif
.endfor
__DEFAULT_NO_OPTIONS+=LLVM_TARGET_BPF
__DEFAULT_NO_OPTIONS+=LLVM_TARGET_BPF LLVM_TARGET_LOONGARCH
.include <bsd.compiler.mk>
@@ -0,0 +1 @@
Do not build LLVM target support for BPF.
@@ -0,0 +1 @@
Do not build LLVM target support for LoongArch.
-3
View File
@@ -1,4 +1 @@
Build LLVM target support for BPF.
The
.Va LLVM_TARGET_ALL
option should be used rather than this in most cases.
@@ -0,0 +1 @@
Build LLVM target support for LoongArch.