From b58028831e9d6137238930bc6dd36cfbc06200a6 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Sat, 3 Dec 2022 07:52:00 -0500 Subject: [PATCH] [gn build] Add LoongArch target Differential Revision: https://reviews.llvm.org/D139256 --- .../llvm/lib/Target/LoongArch/AsmParser/BUILD.gn | 24 ++++++++ .../secondary/llvm/lib/Target/LoongArch/BUILD.gn | 65 ++++++++++++++++++++++ .../lib/Target/LoongArch/Disassembler/BUILD.gn | 20 +++++++ .../lib/Target/LoongArch/MCTargetDesc/BUILD.gn | 65 ++++++++++++++++++++++ .../llvm/lib/Target/LoongArch/TargetInfo/BUILD.gn | 6 ++ .../utils/gn/secondary/llvm/lib/Target/targets.gni | 5 +- 6 files changed, 183 insertions(+), 2 deletions(-) create mode 100644 llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/AsmParser/BUILD.gn create mode 100644 llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/BUILD.gn create mode 100644 llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/Disassembler/BUILD.gn create mode 100644 llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/MCTargetDesc/BUILD.gn create mode 100644 llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/TargetInfo/BUILD.gn diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/AsmParser/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/AsmParser/BUILD.gn new file mode 100644 index 0000000..2d31092 --- /dev/null +++ b/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/AsmParser/BUILD.gn @@ -0,0 +1,24 @@ +import("//llvm/utils/TableGen/tablegen.gni") + +tablegen("LoongArchGenAsmMatcher") { + visibility = [ + ":AsmParser", + "//llvm/lib/Target/LoongArch:LLVMLoongArchCodeGen", + ] + args = [ "-gen-asm-matcher" ] + td_file = "../LoongArch.td" +} + +static_library("AsmParser") { + output_name = "LLVMLoongArchAsmParser" + deps = [ + ":LoongArchGenAsmMatcher", + "//llvm/lib/MC", + "//llvm/lib/MC/MCParser", + "//llvm/lib/Support", + "//llvm/lib/Target/LoongArch/MCTargetDesc", + "//llvm/lib/Target/LoongArch/TargetInfo", + ] + include_dirs = [ ".." ] + sources = [ "LoongArchAsmParser.cpp" ] +} diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/BUILD.gn new file mode 100644 index 0000000..cf7fe99 --- /dev/null +++ b/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/BUILD.gn @@ -0,0 +1,65 @@ +import("//llvm/utils/TableGen/tablegen.gni") + +tablegen("LoongArchGenDAGISel") { + visibility = [ ":LLVMLoongArchCodeGen" ] + args = [ "-gen-dag-isel" ] + td_file = "LoongArch.td" +} + +tablegen("LoongArchGenMCPseudoLowering") { + visibility = [ ":LLVMLoongArchCodeGen" ] + args = [ "-gen-pseudo-lowering" ] + td_file = "LoongArch.td" +} + + +static_library("LLVMLoongArchCodeGen") { + deps = [ + ":LoongArchGenDAGISel", + ":LoongArchGenMCPseudoLowering", + + # See https://reviews.llvm.org/D137532 + "AsmParser:LoongArchGenAsmMatcher", + "MCTargetDesc", + "TargetInfo", + "//llvm/include/llvm/Config:llvm-config", + "//llvm/lib/Analysis", + "//llvm/lib/CodeGen", + "//llvm/lib/CodeGen/AsmPrinter", + "//llvm/lib/CodeGen/SelectionDAG", + "//llvm/lib/IR", + "//llvm/lib/MC", + "//llvm/lib/Support", + "//llvm/lib/Target", + ] + include_dirs = [ "." ] + sources = [ + "LoongArchAsmPrinter.cpp", + "LoongArchExpandAtomicPseudoInsts.cpp", + "LoongArchExpandPseudoInsts.cpp", + "LoongArchFrameLowering.cpp", + "LoongArchInstrInfo.cpp", + "LoongArchISelDAGToDAG.cpp", + "LoongArchISelLowering.cpp", + "LoongArchMCInstLower.cpp", + "LoongArchRegisterInfo.cpp", + "LoongArchSubtarget.cpp", + "LoongArchTargetMachine.cpp", + ] +} + +# This is a bit different from most build files: Due to this group +# having the directory's name, "//llvm/lib/Target/LoongArch" will refer to this +# target, which pulls in the code in this directory *and all subdirectories*. +# For most other directories, "//llvm/lib/Foo" only pulls in the code directly +# in "llvm/lib/Foo". The forwarding targets in //llvm/lib/Target expect this +# different behavior. +group("LoongArch") { + deps = [ + ":LLVMLoongArchCodeGen", + "AsmParser", + "Disassembler", + "MCTargetDesc", + "TargetInfo", + ] +} diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/Disassembler/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/Disassembler/BUILD.gn new file mode 100644 index 0000000..0eac793 --- /dev/null +++ b/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/Disassembler/BUILD.gn @@ -0,0 +1,20 @@ +import("//llvm/utils/TableGen/tablegen.gni") + +tablegen("LoongArchGenDisassemblerTables") { + visibility = [ ":Disassembler" ] + args = [ "-gen-disassembler" ] + td_file = "../LoongArch.td" +} + +static_library("Disassembler") { + output_name = "LLVMLoongArchDisassembler" + deps = [ + ":LoongArchGenDisassemblerTables", + "//llvm/lib/MC/MCDisassembler", + "//llvm/lib/Support", + "//llvm/lib/Target/LoongArch/MCTargetDesc", + "//llvm/lib/Target/LoongArch/TargetInfo", + ] + include_dirs = [ ".." ] + sources = [ "LoongArchDisassembler.cpp" ] +} diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/MCTargetDesc/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/MCTargetDesc/BUILD.gn new file mode 100644 index 0000000..424502b --- /dev/null +++ b/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/MCTargetDesc/BUILD.gn @@ -0,0 +1,65 @@ +import("//llvm/utils/TableGen/tablegen.gni") + +tablegen("LoongArchGenAsmWriter") { + visibility = [ ":MCTargetDesc" ] + args = [ "-gen-asm-writer" ] + td_file = "../LoongArch.td" +} + +tablegen("LoongArchGenInstrInfo") { + visibility = [ ":MCTargetDesc" ] + args = [ "-gen-instr-info" ] + td_file = "../LoongArch.td" +} + +tablegen("LoongArchGenMCCodeEmitter") { + visibility = [ ":MCTargetDesc" ] + args = [ "-gen-emitter" ] + td_file = "../LoongArch.td" +} + +tablegen("LoongArchGenRegisterInfo") { + visibility = [ ":MCTargetDesc" ] + args = [ "-gen-register-info" ] + td_file = "../LoongArch.td" +} + +tablegen("LoongArchGenSubtargetInfo") { + visibility = [ ":MCTargetDesc" ] + args = [ "-gen-subtarget" ] + td_file = "../LoongArch.td" +} + +static_library("MCTargetDesc") { + output_name = "LLVMLoongArchDesc" + + # This should contain tablegen targets generating .inc files included + # by other targets. .inc files only used by .cpp files in this directory + # should be in deps instead. + public_deps = [ + ":LoongArchGenInstrInfo", + ":LoongArchGenRegisterInfo", + ":LoongArchGenSubtargetInfo", + ] + deps = [ + ":LoongArchGenAsmWriter", + ":LoongArchGenMCCodeEmitter", + "//llvm/lib/MC", + "//llvm/lib/Support", + "//llvm/lib/Target/LoongArch/TargetInfo", + ] + include_dirs = [ ".." ] + sources = [ + "LoongArchAsmBackend.cpp", + "LoongArchBaseInfo.cpp", + "LoongArchELFObjectWriter.cpp", + "LoongArchELFStreamer.cpp", + "LoongArchInstPrinter.cpp", + "LoongArchMCAsmInfo.cpp", + "LoongArchMCCodeEmitter.cpp", + "LoongArchMCExpr.cpp", + "LoongArchMCTargetDesc.cpp", + "LoongArchMatInt.cpp", + "LoongArchTargetStreamer.cpp", + ] +} diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/TargetInfo/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/TargetInfo/BUILD.gn new file mode 100644 index 0000000..9512d41 --- /dev/null +++ b/llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/TargetInfo/BUILD.gn @@ -0,0 +1,6 @@ +static_library("TargetInfo") { + output_name = "LLVMLoongArchInfo" + deps = [ "//llvm/lib/Support" ] + include_dirs = [ ".." ] + sources = [ "LoongArchTargetInfo.cpp" ] +} diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/targets.gni b/llvm/utils/gn/secondary/llvm/lib/Target/targets.gni index f5048f2..42e48e6 100644 --- a/llvm/utils/gn/secondary/llvm/lib/Target/targets.gni +++ b/llvm/utils/gn/secondary/llvm/lib/Target/targets.gni @@ -16,6 +16,7 @@ llvm_all_targets = [ "BPF", "Hexagon", "Lanai", + "LoongArch", "Mips", "NVPTX", "PowerPC", @@ -81,8 +82,8 @@ foreach(target, llvm_targets_to_build) { } else if (target == "X86") { llvm_build_X86 = true } else if (target == "AVR" || target == "Hexagon" || target == "Lanai" || - target == "NVPTX" || target == "RISCV" || target == "Sparc" || - target == "SystemZ") { + target == "LoongArch" || target == "NVPTX" || target == "RISCV" || + target == "Sparc" || target == "SystemZ") { # Nothing to do. } else { all_targets_string = "" -- 2.7.4