[gn build] Add LoongArch target
authorNico Weber <thakis@chromium.org>
Sat, 3 Dec 2022 12:52:00 +0000 (07:52 -0500)
committerNico Weber <thakis@chromium.org>
Tue, 6 Dec 2022 21:11:52 +0000 (16:11 -0500)
Differential Revision: https://reviews.llvm.org/D139256

llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/AsmParser/BUILD.gn [new file with mode: 0644]
llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/BUILD.gn [new file with mode: 0644]
llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/Disassembler/BUILD.gn [new file with mode: 0644]
llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/MCTargetDesc/BUILD.gn [new file with mode: 0644]
llvm/utils/gn/secondary/llvm/lib/Target/LoongArch/TargetInfo/BUILD.gn [new file with mode: 0644]
llvm/utils/gn/secondary/llvm/lib/Target/targets.gni

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 (file)
index 0000000..2d31092
--- /dev/null
@@ -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 (file)
index 0000000..cf7fe99
--- /dev/null
@@ -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 (file)
index 0000000..0eac793
--- /dev/null
@@ -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 (file)
index 0000000..424502b
--- /dev/null
@@ -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 (file)
index 0000000..9512d41
--- /dev/null
@@ -0,0 +1,6 @@
+static_library("TargetInfo") {
+  output_name = "LLVMLoongArchInfo"
+  deps = [ "//llvm/lib/Support" ]
+  include_dirs = [ ".." ]
+  sources = [ "LoongArchTargetInfo.cpp" ]
+}
index f5048f2..42e48e6 100644 (file)
@@ -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 = ""