xref: /aosp_15_r20/external/swiftshader/src/Reactor/BUILD.gn (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1# Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2#
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
6#
7#    http://www.apache.org/licenses/LICENSE-2.0
8#
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.
14
15import("reactor.gni")
16import("../swiftshader.gni")
17
18config("swiftshader_llvm_reactor_private_config") {
19  if (is_win) {
20    cflags = [
21      "/wd4141",  # 'inline' used more than once. (LLVM 7.0)
22      "/wd4146",  # unary minus operator applied to unsigned type. (LLVM 7.0)
23      "/wd4201",  # nameless struct/union
24      "/wd4244",  # conversion' conversion from 'type1' to 'type2'
25      "/wd4245",  # conversion from int to unsigned int (llvm)
26      "/wd4624",  # destructor was implicitly defined as deleted (LLVM 7.0)
27    ]
28  } else {
29    cflags = [ "-Wno-unused-local-typedef" ]
30  }
31}
32
33config("swiftshader_reactor_base_private_config") {
34  defines = [
35    "REACTOR_ANONYMOUS_MMAP_NAME=swiftshader_jit",
36  ]
37}
38
39swiftshader_source_set("swiftshader_reactor_base") {
40  sources = [
41    "Assert.cpp",
42    "Debug.cpp",
43    "ExecutableMemory.cpp",
44    "Pragma.cpp",
45    "Reactor.cpp",
46    "SIMD.cpp",
47  ]
48
49  configs = [
50      ":swiftshader_reactor_base_private_config",
51  ]
52}
53
54if (supports_subzero) {
55  # Need a separate config to ensure the warnings are added to the end.
56  config("swiftshader_subzero_common_private_config") {
57    defines = [
58      "ALLOW_DUMP=0",
59      "ALLOW_TIMERS=0",
60      "ALLOW_LLVM_CL=0",
61      "ALLOW_LLVM_IR=0",
62      "ALLOW_LLVM_IR_AS_INPUT=0",
63      "ALLOW_MINIMAL_BUILD=0",
64      "ALLOW_WASM=0",
65      "ICE_THREAD_LOCAL_HACK=0",
66    ]
67
68    if (current_cpu == "x64") {
69      defines += [
70        "SZTARGET=X8664",
71        "SUBZERO_TARGET=X8664",
72      ]
73    } else if (current_cpu == "x86") {
74      defines += [
75        "SZTARGET=X8632",
76        "SUBZERO_TARGET=X8632",
77      ]
78    } else if (current_cpu == "mipsel") {
79      defines += [
80        "SZTARGET=MIPS32",
81        "SUBZERO_TARGET=MIPS32",
82      ]
83    } else if (current_cpu == "arm") {
84      defines += [
85        "SZTARGET=ARM32",
86        "SUBZERO_TARGET=ARM32",
87      ]
88    }
89
90    include_dirs = [
91      "../../third_party/subzero",
92      "../../third_party/subzero/pnacl-llvm/include/",
93      "../../third_party/llvm-subzero/include/",
94    ]
95
96    if (is_win) {
97      include_dirs +=
98          [ "../../third_party/llvm-subzero/build/Windows/include/" ]
99    } else if (is_linux || is_chromeos) {
100      include_dirs += [ "../../third_party/llvm-subzero/build/Linux/include/" ]
101    } else if (is_fuchsia) {
102      include_dirs +=
103          [ "../../third_party/llvm-subzero/build/Fuchsia/include/" ]
104    } else if (is_mac) {
105      include_dirs += [ "../../third_party/llvm-subzero/build/MacOS/include/" ]
106    }
107  }
108
109  config("swiftshader_subzero_private_config") {
110    cflags = []
111
112    if (is_win) {
113      cflags += [
114        "/wd4005",
115        "/wd4018",
116        "/wd4141",
117        "/wd4146",
118        "/wd4245",  # conversion from int to unsigned int (llvm)
119        "/wd4267",
120        "/wd4291",
121        "/wd4310",
122        "/wd4334",
123        "/wd4389",
124        "/wd4701",
125        "/wd4702",
126        "/wd4703",
127        "/wd4706",
128        "/wd4800",
129      ]
130
131      if (!is_debug) {
132        cflags += [ "/wd4718" ]
133      }
134
135      if (is_clang) {
136        if (is_debug) {
137          cflags += [ "-Wno-sign-compare" ]
138        }
139      }
140    } else if (is_linux || is_chromeos || is_mac || is_fuchsia) {
141      cflags += [ "-Wno-macro-redefined" ]
142    }
143
144    if (is_clang) {
145      cflags += [
146        "-Wno-header-hygiene",
147        "-Wno-deprecated-declarations", # (llvm)
148        "-Wno-enum-compare-switch",
149        "-Wno-unused-lambda-capture",
150        "-Wno-unused-function",
151      ]
152    }
153  }
154
155  config("swiftshader_reactor_with_subzero_private_config") {
156    cflags = []
157
158    if (is_win) {
159      cflags += [
160        "/wd4141",
161        "/wd4146",
162        "/wd4245",  # conversion from int to unsigned int (llvm)
163        "/wd4267",
164        "/wd4291",
165        "/wd4309",
166        "/wd4702",
167        "/wd4800",
168      ]
169
170      cflags += [
171        "/wd4018",  # signed/unsigned mismatch (llvm)
172        "/wd4310",  # cast truncates constant value (llvm)
173      ]
174
175      if (is_clang) {
176        if (is_debug) {
177          cflags += [ "-Wno-sign-compare" ]
178        }
179      }
180    }
181
182    if (is_clang) {
183      cflags += [
184        "-Wno-header-hygiene",
185        "-Wno-deprecated-declarations", # (llvm)
186      ]
187    }
188  }
189
190  swiftshader_source_set("swiftshader_subzero") {
191    subzero_dir = "../../third_party/subzero"
192    subzero_llvm_dir = "../../third_party/llvm-subzero"
193
194    sources = [
195      "$subzero_dir/src/IceAssembler.cpp",
196      "$subzero_dir/src/IceCfg.cpp",
197      "$subzero_dir/src/IceCfgNode.cpp",
198      "$subzero_dir/src/IceClFlags.cpp",
199      "$subzero_dir/src/IceELFObjectWriter.cpp",
200      "$subzero_dir/src/IceELFSection.cpp",
201      "$subzero_dir/src/IceFixups.cpp",
202      "$subzero_dir/src/IceGlobalContext.cpp",
203      "$subzero_dir/src/IceGlobalInits.cpp",
204      "$subzero_dir/src/IceInst.cpp",
205      "$subzero_dir/src/IceInstrumentation.cpp",
206      "$subzero_dir/src/IceIntrinsics.cpp",
207      "$subzero_dir/src/IceLiveness.cpp",
208      "$subzero_dir/src/IceLoopAnalyzer.cpp",
209      "$subzero_dir/src/IceMangling.cpp",
210      "$subzero_dir/src/IceMemory.cpp",
211      "$subzero_dir/src/IceOperand.cpp",
212      "$subzero_dir/src/IceRangeSpec.cpp",
213      "$subzero_dir/src/IceRegAlloc.cpp",
214      "$subzero_dir/src/IceRevision.cpp",
215      "$subzero_dir/src/IceSwitchLowering.cpp",
216      "$subzero_dir/src/IceTargetLowering.cpp",
217      "$subzero_dir/src/IceThreading.cpp",
218      "$subzero_dir/src/IceTimerTree.cpp",
219      "$subzero_dir/src/IceTypes.cpp",
220      "$subzero_dir/src/IceVariableSplitting.cpp",
221      "$subzero_llvm_dir/lib/Demangle/ItaniumDemangle.cpp",
222      "$subzero_llvm_dir/lib/Support/APInt.cpp",
223      "$subzero_llvm_dir/lib/Support/Atomic.cpp",
224      "$subzero_llvm_dir/lib/Support/CommandLine.cpp",
225      "$subzero_llvm_dir/lib/Support/Debug.cpp",
226      "$subzero_llvm_dir/lib/Support/Errno.cpp",
227      "$subzero_llvm_dir/lib/Support/ErrorHandling.cpp",
228      "$subzero_llvm_dir/lib/Support/Hashing.cpp",
229      "$subzero_llvm_dir/lib/Support/ManagedStatic.cpp",
230      "$subzero_llvm_dir/lib/Support/MemoryBuffer.cpp",
231      "$subzero_llvm_dir/lib/Support/Mutex.cpp",
232      "$subzero_llvm_dir/lib/Support/NativeFormatting.cpp",
233      "$subzero_llvm_dir/lib/Support/Path.cpp",
234      "$subzero_llvm_dir/lib/Support/Process.cpp",
235      "$subzero_llvm_dir/lib/Support/Program.cpp",
236      "$subzero_llvm_dir/lib/Support/Regex.cpp",
237      "$subzero_llvm_dir/lib/Support/Signals.cpp",
238      "$subzero_llvm_dir/lib/Support/SmallPtrSet.cpp",
239      "$subzero_llvm_dir/lib/Support/SmallVector.cpp",
240      "$subzero_llvm_dir/lib/Support/StringExtras.cpp",
241      "$subzero_llvm_dir/lib/Support/StringMap.cpp",
242      "$subzero_llvm_dir/lib/Support/StringRef.cpp",
243      "$subzero_llvm_dir/lib/Support/StringSaver.cpp",
244      "$subzero_llvm_dir/lib/Support/Threading.cpp",
245      "$subzero_llvm_dir/lib/Support/Timer.cpp",
246      "$subzero_llvm_dir/lib/Support/Twine.cpp",
247      "$subzero_llvm_dir/lib/Support/circular_raw_ostream.cpp",
248      "$subzero_llvm_dir/lib/Support/raw_os_ostream.cpp",
249      "$subzero_llvm_dir/lib/Support/raw_ostream.cpp",
250      "$subzero_llvm_dir/lib/Support/regcomp.c",
251      "$subzero_llvm_dir/lib/Support/regerror.c",
252      "$subzero_llvm_dir/lib/Support/regexec.c",
253      "$subzero_llvm_dir/lib/Support/regfree.c",
254      "$subzero_llvm_dir/lib/Support/regstrlcpy.c",
255    ]
256
257    if (current_cpu == "x64") {
258      sources += [
259        "$subzero_dir/src/IceAssemblerX8664.cpp",
260        "$subzero_dir/src/IceInstX8664.cpp",
261        "$subzero_dir/src/IceTargetLoweringX8664.cpp",
262      ]
263    } else if (current_cpu == "x86") {
264      sources += [
265        "$subzero_dir/src/IceAssemblerX8632.cpp",
266        "$subzero_dir/src/IceInstX8632.cpp",
267        "$subzero_dir/src/IceTargetLoweringX8632.cpp",
268      ]
269    } else if (current_cpu == "mipsel") {
270      sources += [
271        "$subzero_dir/src/IceAssemblerMIPS32.cpp",
272        "$subzero_dir/src/IceInstMIPS32.cpp",
273        "$subzero_dir/src/IceTargetLoweringMIPS32.cpp",
274      ]
275    } else if (current_cpu == "arm") {
276      sources += [
277        "$subzero_dir/src/IceAssemblerARM32.cpp",
278        "$subzero_dir/src/IceInstARM32.cpp",
279        "$subzero_dir/src/IceTargetLoweringARM32.cpp",
280      ]
281    }
282
283    configs = [
284      ":swiftshader_subzero_common_private_config",
285      ":swiftshader_subzero_private_config",
286    ]
287  }
288
289  swiftshader_source_set("swiftshader_subzero_reactor") {
290    deps = [
291      "../../third_party/marl:Marl",
292      ":swiftshader_reactor_base",
293      ":swiftshader_subzero",
294    ]
295
296    sources = [
297      "Optimizer.cpp",
298      "SubzeroReactor.cpp",
299    ]
300
301    configs = [
302      ":swiftshader_subzero_common_private_config",
303      ":swiftshader_reactor_with_subzero_private_config",
304    ]
305  }
306}
307
308if (supports_llvm) {
309  swiftshader_source_set("swiftshader_llvm_reactor") {
310    llvm_dir = "../../third_party/llvm-10.0"
311
312    deps = [
313      ":swiftshader_reactor_base",
314      "$llvm_dir:swiftshader_llvm",
315    ]
316
317    sources = [
318      "CPUID.cpp",
319      "LLVMJIT.cpp",
320      "LLVMReactor.cpp",
321    ]
322
323    configs = [ ":swiftshader_llvm_reactor_private_config" ]
324
325    include_dirs = [
326      "$llvm_dir/llvm/include/",
327      "$llvm_dir/configs/common/include/",
328    ]
329
330    if (is_linux || is_chromeos) {
331      include_dirs += [ "$llvm_dir/configs/linux/include/" ]
332    } else if (is_fuchsia) {
333      include_dirs += [ "$llvm_dir/configs/fuchsia/include/" ]
334    } else if (is_win) {
335      include_dirs += [ "$llvm_dir/configs/windows/include/" ]
336    } else if (is_android) {
337      include_dirs += [ "$llvm_dir/configs/android/include/" ]
338    } else if (is_mac) {
339      include_dirs += [ "$llvm_dir/configs/darwin/include/" ]
340    } else {
341      assert(false, "llvm not configured for target platform")
342    }
343  }
344}
345
346swiftshader_source_set("swiftshader_reactor") {
347  if (use_swiftshader_with_subzero) {
348    deps = [
349      ":swiftshader_subzero_reactor",
350    ]
351  } else {
352    deps = [
353      ":swiftshader_llvm_reactor",
354    ]
355  }
356}
357