Skip to content

Commit e4a68d1

Browse files
committedDec 12, 2018
[gn build] Add build files for Target/X86/... and for tools/llc
The tablegen setup for Target/X86 is a bit different from the CMake build: In the CMake build, Target/X86/CMakeLists.txt has a single tablegen target that does everything. But some of the generated files are only used privately by a subproject, so in the GN build some of the tablegen invocations are smaller-scoped, mostly for build cleanliness. (It helps also a tiny bit with build parallelism since now e.g. the cpp files in MCTargetDesc can build after just 3 .inc files are generated instead of being blocked on all 13. But it's not a big win, since things depending on Target still need to wait for all 11, even though all .inc file use is internal to lib/Target.) Also add a build file for llc, since now all its dependencies have build files. Differential Revision: https://reviews.llvm.org/D55524 llvm-svn: 348903
1 parent 9571c80 commit e4a68d1

File tree

11 files changed

+407
-20
lines changed

11 files changed

+407
-20
lines changed
 

‎llvm/utils/gn/secondary/BUILD.gn

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
group("default") {
22
deps = [
3-
"//llvm/lib/CodeGen",
4-
"//llvm/lib/Object",
3+
"//llvm/tools/llc",
54
"//llvm/tools/llvm-undname",
6-
"//llvm/utils/TableGen:llvm-tblgen",
75
]
86
}
97

‎llvm/utils/gn/secondary/llvm/lib/Target/BUILD.gn

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
import("//llvm/lib/Target/targets.gni")
22

3+
# This build file has two parts:
4+
# 1. The actual //llvm/lib/Target build target, which is just a static
5+
# library containing the cpp files in this directory. It contains general
6+
# shared target code.
7+
# 2. Forwarding targets that forward to the concrete targets (X86, ARM, ...).
8+
# These are defined in subdirectories, and the forwarding names match
9+
# the names of the forwarding targets in CMake. They all (indirectly,
10+
# through CodeGen) depend on the //llvm/lib/Target build target.
11+
# (See also `gn help labels`).
12+
# The dependency chain is:
13+
# //llvm/lib/Target:TargetsToBuild (a target in this file) ->
14+
# /llvm/lib/Target/(X86|ARM|...) (in the subdirectories) ->
15+
# //llvm/lib/CodeGen ->
16+
# //llvm/lib/Target (a target in this file again)
17+
# Note that while this file appears twice in that stack, it's with different
18+
# targets in this file, so there's no cyclic dependency.
19+
20+
# 1. Actual build target.
321
static_library("Target") {
422
output_name = "LLVMTarget"
523
deps = [
@@ -24,3 +42,49 @@ static_library("Target") {
2442
"TargetMachineC.cpp",
2543
]
2644
}
45+
46+
# 2. Forwarding targets.
47+
group("NativeTarget") {
48+
deps = [
49+
"$native_target",
50+
]
51+
}
52+
53+
group("TargetsToBuild") {
54+
deps = llvm_targets_to_build
55+
}
56+
57+
group("AllTargetsAsmParsers") {
58+
deps = []
59+
foreach(target, llvm_targets_to_build) {
60+
deps += [ "$target/AsmParser" ]
61+
}
62+
}
63+
64+
group("AllTargetsAsmPrinters") {
65+
deps = []
66+
foreach(target, llvm_targets_to_build) {
67+
deps += [ "$target/InstPrinter" ]
68+
}
69+
}
70+
71+
group("AllTargetsDescs") {
72+
deps = []
73+
foreach(target, llvm_targets_to_build) {
74+
deps += [ "$target/MCTargetDesc" ]
75+
}
76+
}
77+
78+
group("AllTargetsDisassemblers") {
79+
deps = []
80+
foreach(target, llvm_targets_to_build) {
81+
deps += [ "$target/Disassembler" ]
82+
}
83+
}
84+
85+
group("AllTargetsInfos") {
86+
deps = []
87+
foreach(target, llvm_targets_to_build) {
88+
deps += [ "$target/TargetInfo" ]
89+
}
90+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import("//llvm/utils/TableGen/tablegen.gni")
2+
3+
tablegen("X86GenAsmMatcher") {
4+
visibility = [ ":AsmParser" ]
5+
args = [ "-gen-asm-matcher" ]
6+
td_file = "../X86.td"
7+
}
8+
9+
static_library("AsmParser") {
10+
output_name = "LLVMX86AsmParser"
11+
deps = [
12+
":X86GenAsmMatcher",
13+
"//llvm/lib/MC",
14+
"//llvm/lib/MC/MCParser",
15+
"//llvm/lib/Support",
16+
"//llvm/lib/Target/X86/InstPrinter",
17+
"//llvm/lib/Target/X86/MCTargetDesc",
18+
"//llvm/lib/Target/X86/TargetInfo",
19+
]
20+
include_dirs = [ ".." ]
21+
sources = [
22+
"X86AsmInstrumentation.cpp",
23+
"X86AsmParser.cpp",
24+
]
25+
}
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
import("//llvm/utils/TableGen/tablegen.gni")
2+
3+
declare_args() {
4+
# Buggy, only use if you know what you're doing.
5+
x86_gen_fold_tables = false
6+
}
7+
8+
tablegen("X86GenCallingConv") {
9+
visibility = [ ":LLVMX86CodeGen" ]
10+
args = [ "-gen-callingconv" ]
11+
td_file = "X86.td"
12+
}
13+
14+
tablegen("X86GenDAGISel") {
15+
visibility = [ ":LLVMX86CodeGen" ]
16+
args = [ "-gen-dag-isel" ]
17+
td_file = "X86.td"
18+
}
19+
20+
tablegen("X86GenEVEX2VEXTables") {
21+
visibility = [ ":LLVMX86CodeGen" ]
22+
args = [ "-gen-x86-EVEX2VEX-tables" ]
23+
td_file = "X86.td"
24+
}
25+
26+
tablegen("X86GenFastISel") {
27+
visibility = [ ":LLVMX86CodeGen" ]
28+
args = [ "-gen-fast-isel" ]
29+
td_file = "X86.td"
30+
}
31+
32+
tablegen("X86GenGlobalISel") {
33+
visibility = [ ":LLVMX86CodeGen" ]
34+
args = [ "-gen-global-isel" ]
35+
td_file = "X86.td"
36+
}
37+
38+
tablegen("X86GenRegisterBank") {
39+
visibility = [ ":LLVMX86CodeGen" ]
40+
args = [ "-gen-register-bank" ]
41+
td_file = "X86.td"
42+
}
43+
44+
if (x86_gen_fold_tables) {
45+
tablegen("X86GenFoldTables") {
46+
visibility = [ ":LLVMX86CodeGen" ]
47+
args = [ "-gen-x86-fold-tables" ]
48+
td_file = "X86.td"
49+
}
50+
}
51+
52+
static_library("LLVMX86CodeGen") {
53+
deps = [
54+
":X86GenCallingConv",
55+
":X86GenDAGISel",
56+
":X86GenEVEX2VEXTables",
57+
":X86GenFastISel",
58+
":X86GenGlobalISel",
59+
":X86GenRegisterBank",
60+
"InstPrinter",
61+
"MCTargetDesc",
62+
"TargetInfo",
63+
"Utils",
64+
"//llvm/include/llvm/Config:llvm-config",
65+
"//llvm/lib/Analysis",
66+
"//llvm/lib/CodeGen",
67+
"//llvm/lib/CodeGen/AsmPrinter",
68+
"//llvm/lib/CodeGen/GlobalISel",
69+
"//llvm/lib/CodeGen/SelectionDAG",
70+
"//llvm/lib/IR",
71+
"//llvm/lib/MC",
72+
"//llvm/lib/Support",
73+
"//llvm/lib/Target",
74+
]
75+
if (x86_gen_fold_tables) {
76+
deps += [ ":X86GenFoldTables" ]
77+
}
78+
sources = [
79+
"ShadowCallStack.cpp",
80+
"X86AsmPrinter.cpp",
81+
"X86AvoidStoreForwardingBlocks.cpp",
82+
"X86CallFrameOptimization.cpp",
83+
"X86CallLowering.cpp",
84+
"X86CallingConv.cpp",
85+
"X86CmovConversion.cpp",
86+
"X86CondBrFolding.cpp",
87+
"X86DiscriminateMemOps.cpp",
88+
"X86DomainReassignment.cpp",
89+
"X86EvexToVex.cpp",
90+
"X86ExpandPseudo.cpp",
91+
"X86FastISel.cpp",
92+
"X86FixupBWInsts.cpp",
93+
"X86FixupLEAs.cpp",
94+
"X86FixupSetCC.cpp",
95+
"X86FlagsCopyLowering.cpp",
96+
"X86FloatingPoint.cpp",
97+
"X86FrameLowering.cpp",
98+
"X86ISelDAGToDAG.cpp",
99+
"X86ISelLowering.cpp",
100+
"X86IndirectBranchTracking.cpp",
101+
"X86InsertPrefetch.cpp",
102+
"X86InstrFMA3Info.cpp",
103+
"X86InstrFoldTables.cpp",
104+
"X86InstrInfo.cpp",
105+
"X86InstructionSelector.cpp",
106+
"X86InterleavedAccess.cpp",
107+
"X86LegalizerInfo.cpp",
108+
"X86MCInstLower.cpp",
109+
"X86MachineFunctionInfo.cpp",
110+
"X86MacroFusion.cpp",
111+
"X86OptimizeLEAs.cpp",
112+
"X86PadShortFunction.cpp",
113+
"X86RegisterBankInfo.cpp",
114+
"X86RegisterInfo.cpp",
115+
"X86RetpolineThunks.cpp",
116+
"X86SelectionDAGInfo.cpp",
117+
"X86ShuffleDecodeConstantPool.cpp",
118+
"X86SpeculativeLoadHardening.cpp",
119+
"X86Subtarget.cpp",
120+
"X86TargetMachine.cpp",
121+
"X86TargetObjectFile.cpp",
122+
"X86TargetTransformInfo.cpp",
123+
"X86VZeroUpper.cpp",
124+
"X86WinAllocaExpander.cpp",
125+
"X86WinEHState.cpp",
126+
]
127+
}
128+
129+
# This is a bit different from most build files: Due to this group
130+
# having the directory's name, "//llvm/lib/Target/X86" will refer to this
131+
# target, which pulls in the code in this directory *and all subdirectories*.
132+
# For most other directories, "//llvm/lib/Foo" only pulls in the code directly
133+
# in "llvm/lib/Foo". The forwarding targets in //llvm/lib/Target expect this
134+
# different behavior.
135+
group("X86") {
136+
deps = [
137+
":LLVMX86CodeGen",
138+
"AsmParser",
139+
"Disassembler",
140+
"InstPrinter",
141+
"MCTargetDesc",
142+
"TargetInfo",
143+
"Utils",
144+
]
145+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import("//llvm/utils/TableGen/tablegen.gni")
2+
3+
tablegen("X86GenDisassemblerTables") {
4+
visibility = [ ":Disassembler" ]
5+
args = [ "-gen-disassembler" ]
6+
td_file = "../X86.td"
7+
}
8+
9+
static_library("Disassembler") {
10+
output_name = "LLVMX86Disassembler"
11+
deps = [
12+
":X86GenDisassemblerTables",
13+
"//llvm/lib/MC/MCDisassembler",
14+
"//llvm/lib/Support",
15+
"//llvm/lib/Target/X86/MCTargetDesc",
16+
"//llvm/lib/Target/X86/TargetInfo",
17+
]
18+
include_dirs = [ ".." ]
19+
sources = [
20+
"X86Disassembler.cpp",
21+
"X86DisassemblerDecoder.cpp",
22+
]
23+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import("//llvm/utils/TableGen/tablegen.gni")
2+
3+
tablegen("X86GenAsmWriter") {
4+
visibility = [ ":InstPrinter" ]
5+
args = [ "-gen-asm-writer" ]
6+
td_file = "../X86.td"
7+
}
8+
9+
tablegen("X86GenAsmWriter1") {
10+
visibility = [ ":InstPrinter" ]
11+
args = [
12+
"-gen-asm-writer",
13+
"-asmwriternum=1",
14+
]
15+
td_file = "../X86.td"
16+
}
17+
18+
static_library("InstPrinter") {
19+
output_name = "LLVMX86AsmPrinter"
20+
deps = [
21+
":X86GenAsmWriter",
22+
":X86GenAsmWriter1",
23+
"//llvm/lib/MC",
24+
"//llvm/lib/Support",
25+
26+
# MCTargetDesc depends on InstPrinter, so we can't depend on the full
27+
# MCTargetDesc target here: it would form a cycle.
28+
"//llvm/lib/Target/X86/MCTargetDesc:tablegen",
29+
"//llvm/lib/Target/X86/Utils",
30+
]
31+
include_dirs = [ ".." ]
32+
sources = [
33+
"X86ATTInstPrinter.cpp",
34+
"X86InstComments.cpp",
35+
"X86InstPrinterCommon.cpp",
36+
"X86IntelInstPrinter.cpp",
37+
]
38+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import("//llvm/utils/TableGen/tablegen.gni")
2+
3+
tablegen("X86GenInstrInfo") {
4+
visibility = [ ":tablegen" ]
5+
args = [ "-gen-instr-info" ]
6+
td_file = "../X86.td"
7+
}
8+
9+
tablegen("X86GenRegisterInfo") {
10+
visibility = [ ":tablegen" ]
11+
args = [ "-gen-register-info" ]
12+
td_file = "../X86.td"
13+
}
14+
15+
tablegen("X86GenSubtargetInfo") {
16+
visibility = [ ":tablegen" ]
17+
args = [ "-gen-subtarget" ]
18+
td_file = "../X86.td"
19+
}
20+
21+
group("tablegen") {
22+
visibility = [
23+
":MCTargetDesc",
24+
"../InstPrinter",
25+
"../TargetInfo",
26+
]
27+
public_deps = [
28+
":X86GenInstrInfo",
29+
":X86GenRegisterInfo",
30+
":X86GenSubtargetInfo",
31+
]
32+
}
33+
34+
static_library("MCTargetDesc") {
35+
output_name = "LLVMX86Desc"
36+
public_deps = [
37+
":tablegen",
38+
]
39+
deps = [
40+
"//llvm/lib/MC",
41+
"//llvm/lib/MC/MCDisassembler",
42+
"//llvm/lib/Object",
43+
"//llvm/lib/Support",
44+
"//llvm/lib/Target/X86/InstPrinter",
45+
"//llvm/lib/Target/X86/TargetInfo",
46+
]
47+
include_dirs = [ ".." ]
48+
sources = [
49+
"X86AsmBackend.cpp",
50+
"X86ELFObjectWriter.cpp",
51+
"X86MCAsmInfo.cpp",
52+
"X86MCCodeEmitter.cpp",
53+
"X86MCTargetDesc.cpp",
54+
"X86MachObjectWriter.cpp",
55+
"X86WinCOFFObjectWriter.cpp",
56+
"X86WinCOFFStreamer.cpp",
57+
"X86WinCOFFTargetStreamer.cpp",
58+
]
59+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
static_library("TargetInfo") {
2+
output_name = "LLVMX86Info"
3+
deps = [
4+
"//llvm/lib/Support",
5+
6+
# MCTargetDesc depends on TargetInfo, so we can't depend on the full
7+
# MCTargetDesc target here: it would form a cycle.
8+
"//llvm/lib/Target/X86/MCTargetDesc:tablegen",
9+
]
10+
include_dirs = [ ".." ]
11+
sources = [
12+
"X86TargetInfo.cpp",
13+
]
14+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
static_library("Utils") {
2+
output_name = "LLVMX86Utils"
3+
deps = [
4+
"//llvm/lib/Support",
5+
]
6+
sources = [
7+
"X86ShuffleDecode.cpp",
8+
]
9+
}

‎llvm/utils/gn/secondary/llvm/lib/Target/targets.gni

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,21 @@ declare_args() {
88
if (llvm_targets_to_build == "host") {
99
if (host_cpu == "x86" || host_cpu == "x64") {
1010
llvm_targets_to_build = [ "X86" ]
11-
} else if (host_cpu == "arm") {
12-
llvm_targets_to_build = [ "ARM" ]
13-
} else if (host_cpu == "arm64") {
14-
llvm_targets_to_build = [ "AArch64" ]
1511
} else {
1612
assert(false, "add your host_cpu above")
1713
}
1814
} else if (llvm_targets_to_build == "all") {
1915
# FIXME: Port the remaining targets.
2016
llvm_targets_to_build = [
21-
"AArch64",
22-
"ARM",
2317
"X86",
2418
]
2519
}
2620

2721
# Validate that llvm_targets_to_build is set to a list of valid targets,
2822
# and remember which targets are built.
29-
llvm_build_AArch64 = false
30-
llvm_build_ARM = false
3123
llvm_build_X86 = false
3224
foreach(target, llvm_targets_to_build) {
33-
if (target == "AArch64") {
34-
llvm_build_AArch64 = true
35-
} else if (target == "ARM") {
36-
llvm_build_ARM = true
37-
} else if (target == "X86") {
25+
if (target == "X86") {
3826
llvm_build_X86 = true
3927
} else {
4028
#FIXME : Port the remaining targets.
@@ -45,10 +33,6 @@ foreach(target, llvm_targets_to_build) {
4533
# FIXME: This should be based off target_cpu once cross compiles work.
4634
if (host_cpu == "x86" || host_cpu == "x64") {
4735
native_target = "X86"
48-
} else if (host_cpu == "arm") {
49-
native_target = "ARM"
50-
} else if (host_cpu == "arm64") {
51-
native_target = "AArch64"
5236
} else {
5337
assert(false, "Unsuppored host_cpu '$host_cpu'.")
5438
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
executable("llc") {
2+
deps = [
3+
"//llvm/lib/Analysis",
4+
"//llvm/lib/CodeGen",
5+
"//llvm/lib/CodeGen/AsmPrinter",
6+
"//llvm/lib/CodeGen/MIRParser",
7+
"//llvm/lib/CodeGen/SelectionDAG",
8+
"//llvm/lib/IR",
9+
"//llvm/lib/IRReader",
10+
"//llvm/lib/MC",
11+
"//llvm/lib/Support",
12+
"//llvm/lib/Target",
13+
"//llvm/lib/Target:TargetsToBuild",
14+
"//llvm/lib/Transforms/Scalar",
15+
"//llvm/lib/Transforms/Utils",
16+
"//llvm/lib/Transforms/Vectorize",
17+
]
18+
sources = [
19+
"llc.cpp",
20+
]
21+
22+
# Support plugins.
23+
# FIXME: Disable dead stripping once other binaries are dead-stripped
24+
if (host_os == "linux") {
25+
# Corresponds to export_executable_symbols() in cmake.
26+
ldflags = [ "-rdynamic" ]
27+
}
28+
}

0 commit comments

Comments
 (0)
Please sign in to comment.