1 // Copyright (C) 2016 The Android Open Source Project
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
21 "android/soong/android"
22 "android/soong/genrule"
24 "github.com/google/blueprint"
28 android.RegisterModuleType("llvm90_tblgen", llvm90TblgenFactory)
32 pctx = android.NewPackageContext("android/soong/llvm90")
34 llvm90Tblgen = pctx.HostBinToolVariable("llvm90Tblgen", "llvm90-tblgen")
36 tblgenRule90 = pctx.StaticRule("tblgenRule90", blueprint.RuleParams{
38 Deps: blueprint.DepsGCC,
39 Command: "${llvm90Tblgen} ${includes} ${generator} -d ${depfile} -o ${out} ${in}",
40 CommandDeps: []string{"${llvm90Tblgen}"},
41 Description: "LLVM90 TableGen $in => $out",
43 }, "includes", "depfile", "generator")
46 type tblgenProperties struct {
54 properties tblgenProperties
56 exportedHeaderDirs android.Paths
57 generatedHeaders android.Paths
60 var _ genrule.SourceFileGenerator = (*tblgen)(nil)
62 func (t *tblgen) GenerateAndroidBuildActions(ctx android.ModuleContext) {
63 in := android.PathForModuleSrc(ctx, t.properties.In)
66 "-I " + ctx.ModuleDir(),
67 "-I external/llvm90/include",
68 "-I external/llvm90/lib/Target",
69 "-I " + filepath.Dir(in.String()),
72 for _, o := range t.properties.Outs {
73 out := android.PathForModuleGen(ctx, o)
74 generator := outToGenerator(ctx, o)
76 ctx.ModuleBuild(pctx, android.ModuleBuildParams{
80 Args: map[string]string{
81 "includes": strings.Join(includes, " "),
82 "generator": generator,
85 t.generatedHeaders = append(t.generatedHeaders, out)
88 t.exportedHeaderDirs = append(t.exportedHeaderDirs, android.PathForModuleGen(ctx, ""))
91 func outToGenerator(ctx android.ModuleContext, out string) string {
92 out = filepath.Base(out)
94 case strings.HasSuffix(out, "GenRegisterInfo.inc"):
95 return "-gen-register-info"
96 case strings.HasSuffix(out, "GenInstrInfo.inc"):
97 return "-gen-instr-info"
98 case strings.HasSuffix(out, "GenAsmWriter.inc"):
99 return "-gen-asm-writer"
100 case strings.HasSuffix(out, "GenAsmWriter1.inc"):
101 return "-gen-asm-writer -asmwriternum=1"
102 case strings.HasSuffix(out, "GenAsmMatcher.inc"):
103 return "-gen-asm-matcher"
104 case strings.HasSuffix(out, "GenCodeEmitter.inc"):
105 return "-gen-emitter"
106 case strings.HasSuffix(out, "GenMCCodeEmitter.inc"):
107 return "-gen-emitter"
108 case strings.HasSuffix(out, "GenMCPseudoLowering.inc"):
109 return "-gen-pseudo-lowering"
110 case strings.HasSuffix(out, "GenDAGISel.inc"):
111 return "-gen-dag-isel"
112 case strings.HasSuffix(out, "GenDisassemblerTables.inc"):
113 return "-gen-disassembler"
114 case strings.HasSuffix(out, "GenSearchableTables.inc"):
115 return "-gen-searchable-tables"
116 case strings.HasSuffix(out, "GenSystemOperands.inc"):
117 return "-gen-searchable-tables"
118 case strings.HasSuffix(out, "GenSystemRegister.inc"):
119 return "-gen-searchable-tables"
120 case strings.HasSuffix(out, "InstCombineTables.inc"):
121 return "-gen-searchable-tables"
122 case strings.HasSuffix(out, "GenEDInfo.inc"):
123 return "-gen-enhanced-disassembly-info"
124 case strings.HasSuffix(out, "GenFastISel.inc"):
125 return "-gen-fast-isel"
126 case strings.HasSuffix(out, "GenSubtargetInfo.inc"):
127 return "-gen-subtarget"
128 case strings.HasSuffix(out, "GenCallingConv.inc"):
129 return "-gen-callingconv"
130 case strings.HasSuffix(out, "GenIntrinsicEnums.inc"):
131 return "-gen-tgt-intrinsic-enums"
132 case strings.HasSuffix(out, "GenIntrinsicImpl.inc"):
133 return "-gen-tgt-intrinsic-impl"
134 case strings.HasSuffix(out, "GenDecoderTables.inc"):
135 return "-gen-arm-decoder"
136 case strings.HasSuffix(out, "Options.inc"):
137 return "-gen-opt-parser-defs"
138 case strings.HasSuffix(out, "GenDFAPacketizer.inc"):
139 return "-gen-dfa-packetizer"
140 case strings.HasSuffix(out, "GenRegisterBank.inc"):
141 return "-gen-register-bank"
142 case strings.HasSuffix(out, "GenGlobalISel.inc"):
143 return "-gen-global-isel"
144 case strings.HasSuffix(out, "X86GenEVEX2VEXTables.inc"):
145 return "-gen-x86-EVEX2VEX-tables"
146 case out == "Attributes.inc", out == "AttributesCompatFunc.inc":
148 case out == "IntrinsicEnums.inc":
149 return "-gen-intrinsic-enums"
150 case out == "IntrinsicImpl.inc":
151 return "-gen-intrinsic-impl"
154 ctx.ModuleErrorf("couldn't map output file %q to a generator", out)
158 func (t *tblgen) DepsMutator(ctx android.BottomUpMutatorContext) {
161 func (t *tblgen) GeneratedHeaderDirs() android.Paths {
162 return t.exportedHeaderDirs
165 func (t *tblgen) GeneratedSourceFiles() android.Paths {
169 func (t *tblgen) GeneratedDeps() android.Paths {
170 return t.generatedHeaders
173 func llvm90TblgenFactory() android.Module {
175 t.AddProperties(&t.properties)
176 android.InitAndroidModule(t)