Compiler projects using llvm
import("//llvm/utils/TableGen/tablegen.gni")

tablegen("MipsGenCallingConv") {
  visibility = [ ":LLVMMipsCodeGen" ]
  args = [ "-gen-callingconv" ]
  td_file = "Mips.td"
}

tablegen("MipsGenDAGISel") {
  visibility = [ ":LLVMMipsCodeGen" ]
  args = [ "-gen-dag-isel" ]
  td_file = "Mips.td"
}

tablegen("MipsGenFastISel") {
  visibility = [ ":LLVMMipsCodeGen" ]
  args = [ "-gen-fast-isel" ]
  td_file = "Mips.td"
}

tablegen("MipsGenGlobalISel") {
  visibility = [ ":LLVMMipsCodeGen" ]
  args = [ "-gen-global-isel" ]
  td_file = "Mips.td"
}

tablegen("MipsGenMCPseudoLowering") {
  visibility = [ ":LLVMMipsCodeGen" ]
  args = [ "-gen-pseudo-lowering" ]
  td_file = "Mips.td"
}

tablegen("MipsGenPostLegalizeGICombiner") {
  visibility = [ ":LLVMMipsCodeGen" ]
  args = [
    "-gen-global-isel-combiner",
    "-combiners=MipsPostLegalizerCombinerHelper",
  ]
  td_file = "Mips.td"
}

tablegen("MipsGenRegisterBank") {
  visibility = [ ":LLVMMipsCodeGen" ]
  args = [ "-gen-register-bank" ]
  td_file = "Mips.td"
}

static_library("LLVMMipsCodeGen") {
  deps = [
    ":MipsGenCallingConv",
    ":MipsGenDAGISel",
    ":MipsGenFastISel",
    ":MipsGenGlobalISel",
    ":MipsGenMCPseudoLowering",
    ":MipsGenPostLegalizeGICombiner",
    ":MipsGenRegisterBank",
    "MCTargetDesc",
    "TargetInfo",
    "//llvm/include/llvm/Config:llvm-config",
    "//llvm/lib/Analysis",
    "//llvm/lib/CodeGen",
    "//llvm/lib/CodeGen/AsmPrinter",
    "//llvm/lib/CodeGen/GlobalISel",
    "//llvm/lib/CodeGen/SelectionDAG",
    "//llvm/lib/IR",
    "//llvm/lib/MC",
    "//llvm/lib/Support",
    "//llvm/lib/Target",
  ]
  include_dirs = [ "." ]
  sources = [
    "MicroMipsSizeReduction.cpp",
    "Mips16FrameLowering.cpp",
    "Mips16HardFloat.cpp",
    "Mips16HardFloatInfo.cpp",
    "Mips16ISelDAGToDAG.cpp",
    "Mips16ISelLowering.cpp",
    "Mips16InstrInfo.cpp",
    "Mips16RegisterInfo.cpp",
    "MipsAnalyzeImmediate.cpp",
    "MipsAsmPrinter.cpp",
    "MipsBranchExpansion.cpp",
    "MipsCCState.cpp",
    "MipsCallLowering.cpp",
    "MipsConstantIslandPass.cpp",
    "MipsDelaySlotFiller.cpp",
    "MipsExpandPseudo.cpp",
    "MipsFastISel.cpp",
    "MipsFrameLowering.cpp",
    "MipsISelDAGToDAG.cpp",
    "MipsISelLowering.cpp",
    "MipsInstrInfo.cpp",
    "MipsInstructionSelector.cpp",
    "MipsLegalizerInfo.cpp",
    "MipsMCInstLower.cpp",
    "MipsMachineFunction.cpp",
    "MipsModuleISelDAGToDAG.cpp",
    "MipsMulMulBugPass.cpp",
    "MipsOptimizePICCall.cpp",
    "MipsOs16.cpp",
    "MipsPostLegalizerCombiner.cpp",
    "MipsPreLegalizerCombiner.cpp",
    "MipsRegisterBankInfo.cpp",
    "MipsRegisterInfo.cpp",
    "MipsSEFrameLowering.cpp",
    "MipsSEISelDAGToDAG.cpp",
    "MipsSEISelLowering.cpp",
    "MipsSEInstrInfo.cpp",
    "MipsSERegisterInfo.cpp",
    "MipsSubtarget.cpp",
    "MipsTargetMachine.cpp",
    "MipsTargetObjectFile.cpp",
    "MipsTargetTransformInfo.cpp",
  ]
}

# This is a bit different from most build files: Due to this group
# having the directory's name, "//llvm/lib/Target/Mips" 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("Mips") {
  deps = [
    ":LLVMMipsCodeGen",
    "AsmParser",
    "Disassembler",
    "MCTargetDesc",
    "TargetInfo",
  ]
}