• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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    "EmulatedIntrinsics.cpp",
44    "ExecutableMemory.cpp",
45    "OptimalIntrinsics.cpp",
46    "Pragma.cpp",
47    "Reactor.cpp",
48  ]
49
50  configs = [
51      ":swiftshader_reactor_base_private_config",
52  ]
53}
54
55if (supports_subzero) {
56  # Need a separate config to ensure the warnings are added to the end.
57  config("swiftshader_subzero_common_private_config") {
58    defines = [
59      "ALLOW_DUMP=0",
60      "ALLOW_TIMERS=0",
61      "ALLOW_LLVM_CL=0",
62      "ALLOW_LLVM_IR=0",
63      "ALLOW_LLVM_IR_AS_INPUT=0",
64      "ALLOW_MINIMAL_BUILD=0",
65      "ALLOW_WASM=0",
66      "ICE_THREAD_LOCAL_HACK=0",
67    ]
68
69    if (current_cpu == "x64") {
70      defines += [
71        "SZTARGET=X8664",
72        "SUBZERO_TARGET=X8664",
73      ]
74    } else if (current_cpu == "x86") {
75      defines += [
76        "SZTARGET=X8632",
77        "SUBZERO_TARGET=X8632",
78      ]
79    } else if (current_cpu == "mipsel") {
80      defines += [
81        "SZTARGET=MIPS32",
82        "SUBZERO_TARGET=MIPS32",
83      ]
84    } else if (current_cpu == "arm") {
85      defines += [
86        "SZTARGET=ARM32",
87        "SUBZERO_TARGET=ARM32",
88      ]
89    }
90
91    include_dirs = [
92      "../../third_party/subzero",
93      "../../third_party/subzero/pnacl-llvm/include/",
94      "../../third_party/llvm-subzero/include/",
95    ]
96
97    if (is_win) {
98      include_dirs +=
99          [ "../../third_party/llvm-subzero/build/Windows/include/" ]
100    } else if (is_linux || is_chromeos) {
101      include_dirs += [ "../../third_party/llvm-subzero/build/Linux/include/" ]
102    } else if (is_fuchsia) {
103      include_dirs +=
104          [ "../../third_party/llvm-subzero/build/Fuchsia/include/" ]
105    } else if (is_mac) {
106      include_dirs += [ "../../third_party/llvm-subzero/build/MacOS/include/" ]
107    }
108  }
109
110  config("swiftshader_subzero_private_config") {
111    cflags = []
112
113    if (is_win) {
114      cflags += [
115        "/wd4005",
116        "/wd4018",
117        "/wd4141",
118        "/wd4146",
119        "/wd4245",  # conversion from int to unsigned int (llvm)
120        "/wd4267",
121        "/wd4291",
122        "/wd4310",
123        "/wd4334",
124        "/wd4389",
125        "/wd4701",
126        "/wd4702",
127        "/wd4703",
128        "/wd4706",
129        "/wd4800",
130      ]
131
132      if (!is_debug) {
133        cflags += [ "/wd4718" ]
134      }
135
136      if (is_clang) {
137        if (is_debug) {
138          cflags += [ "-Wno-sign-compare" ]
139        }
140      }
141    } else if (is_linux || is_chromeos || is_mac || is_fuchsia) {
142      cflags += [ "-Wno-macro-redefined" ]
143    }
144
145    if (is_clang) {
146      cflags += [
147        "-Wno-header-hygiene",
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 += [ "-Wno-header-hygiene" ]
184    }
185  }
186
187  swiftshader_source_set("swiftshader_subzero") {
188    subzero_dir = "../../third_party/subzero"
189    subzero_llvm_dir = "../../third_party/llvm-subzero"
190
191    sources = [
192      "$subzero_dir/src/IceAssembler.cpp",
193      "$subzero_dir/src/IceCfg.cpp",
194      "$subzero_dir/src/IceCfgNode.cpp",
195      "$subzero_dir/src/IceClFlags.cpp",
196      "$subzero_dir/src/IceELFObjectWriter.cpp",
197      "$subzero_dir/src/IceELFSection.cpp",
198      "$subzero_dir/src/IceFixups.cpp",
199      "$subzero_dir/src/IceGlobalContext.cpp",
200      "$subzero_dir/src/IceGlobalInits.cpp",
201      "$subzero_dir/src/IceInst.cpp",
202      "$subzero_dir/src/IceInstrumentation.cpp",
203      "$subzero_dir/src/IceIntrinsics.cpp",
204      "$subzero_dir/src/IceLiveness.cpp",
205      "$subzero_dir/src/IceLoopAnalyzer.cpp",
206      "$subzero_dir/src/IceMangling.cpp",
207      "$subzero_dir/src/IceMemory.cpp",
208      "$subzero_dir/src/IceOperand.cpp",
209      "$subzero_dir/src/IceRangeSpec.cpp",
210      "$subzero_dir/src/IceRegAlloc.cpp",
211      "$subzero_dir/src/IceRevision.cpp",
212      "$subzero_dir/src/IceSwitchLowering.cpp",
213      "$subzero_dir/src/IceTargetLowering.cpp",
214      "$subzero_dir/src/IceThreading.cpp",
215      "$subzero_dir/src/IceTimerTree.cpp",
216      "$subzero_dir/src/IceTypes.cpp",
217      "$subzero_dir/src/IceVariableSplitting.cpp",
218      "$subzero_llvm_dir/lib/Demangle/ItaniumDemangle.cpp",
219      "$subzero_llvm_dir/lib/Support/APInt.cpp",
220      "$subzero_llvm_dir/lib/Support/Atomic.cpp",
221      "$subzero_llvm_dir/lib/Support/CommandLine.cpp",
222      "$subzero_llvm_dir/lib/Support/ConvertUTF.cpp",
223      "$subzero_llvm_dir/lib/Support/ConvertUTFWrapper.cpp",
224      "$subzero_llvm_dir/lib/Support/Debug.cpp",
225      "$subzero_llvm_dir/lib/Support/Errno.cpp",
226      "$subzero_llvm_dir/lib/Support/ErrorHandling.cpp",
227      "$subzero_llvm_dir/lib/Support/Hashing.cpp",
228      "$subzero_llvm_dir/lib/Support/ManagedStatic.cpp",
229      "$subzero_llvm_dir/lib/Support/MemoryBuffer.cpp",
230      "$subzero_llvm_dir/lib/Support/Mutex.cpp",
231      "$subzero_llvm_dir/lib/Support/NativeFormatting.cpp",
232      "$subzero_llvm_dir/lib/Support/Path.cpp",
233      "$subzero_llvm_dir/lib/Support/Process.cpp",
234      "$subzero_llvm_dir/lib/Support/Program.cpp",
235      "$subzero_llvm_dir/lib/Support/Regex.cpp",
236      "$subzero_llvm_dir/lib/Support/Signals.cpp",
237      "$subzero_llvm_dir/lib/Support/SmallPtrSet.cpp",
238      "$subzero_llvm_dir/lib/Support/SmallVector.cpp",
239      "$subzero_llvm_dir/lib/Support/StringExtras.cpp",
240      "$subzero_llvm_dir/lib/Support/StringMap.cpp",
241      "$subzero_llvm_dir/lib/Support/StringRef.cpp",
242      "$subzero_llvm_dir/lib/Support/StringSaver.cpp",
243      "$subzero_llvm_dir/lib/Support/Threading.cpp",
244      "$subzero_llvm_dir/lib/Support/Timer.cpp",
245      "$subzero_llvm_dir/lib/Support/Twine.cpp",
246      "$subzero_llvm_dir/lib/Support/circular_raw_ostream.cpp",
247      "$subzero_llvm_dir/lib/Support/raw_os_ostream.cpp",
248      "$subzero_llvm_dir/lib/Support/raw_ostream.cpp",
249      "$subzero_llvm_dir/lib/Support/regcomp.c",
250      "$subzero_llvm_dir/lib/Support/regerror.c",
251      "$subzero_llvm_dir/lib/Support/regexec.c",
252      "$subzero_llvm_dir/lib/Support/regfree.c",
253      "$subzero_llvm_dir/lib/Support/regstrlcpy.c",
254    ]
255
256    if (current_cpu == "x64") {
257      sources += [
258        "$subzero_dir/src/IceAssemblerX8664.cpp",
259        "$subzero_dir/src/IceInstX8664.cpp",
260        "$subzero_dir/src/IceTargetLoweringX8664.cpp",
261      ]
262    } else if (current_cpu == "x86") {
263      sources += [
264        "$subzero_dir/src/IceAssemblerX8632.cpp",
265        "$subzero_dir/src/IceInstX8632.cpp",
266        "$subzero_dir/src/IceTargetLoweringX8632.cpp",
267      ]
268    } else if (current_cpu == "mipsel") {
269      sources += [
270        "$subzero_dir/src/IceAssemblerMIPS32.cpp",
271        "$subzero_dir/src/IceInstMIPS32.cpp",
272        "$subzero_dir/src/IceTargetLoweringMIPS32.cpp",
273      ]
274    } else if (current_cpu == "arm") {
275      sources += [
276        "$subzero_dir/src/IceAssemblerARM32.cpp",
277        "$subzero_dir/src/IceInstARM32.cpp",
278        "$subzero_dir/src/IceTargetLoweringARM32.cpp",
279      ]
280    }
281
282    configs = [
283      ":swiftshader_subzero_common_private_config",
284      ":swiftshader_subzero_private_config",
285    ]
286  }
287
288  swiftshader_source_set("swiftshader_subzero_reactor") {
289    deps = [
290      "../../third_party/marl:Marl",
291      ":swiftshader_reactor_base",
292      ":swiftshader_subzero",
293    ]
294
295    sources = [
296      "Optimizer.cpp",
297      "SubzeroReactor.cpp",
298    ]
299
300    configs = [
301      ":swiftshader_subzero_common_private_config",
302      ":swiftshader_reactor_with_subzero_private_config",
303    ]
304  }
305}
306
307if (supports_llvm) {
308  swiftshader_source_set("swiftshader_llvm_reactor") {
309    llvm_dir = "../../third_party/llvm-10.0"
310
311    deps = [
312      ":swiftshader_reactor_base",
313      "$llvm_dir:swiftshader_llvm",
314    ]
315
316    sources = [
317      "CPUID.cpp",
318      "LLVMJIT.cpp",
319      "LLVMReactor.cpp",
320    ]
321
322    configs = [ ":swiftshader_llvm_reactor_private_config" ]
323
324    include_dirs = [
325      "$llvm_dir/llvm/include/",
326      "$llvm_dir/configs/common/include/",
327    ]
328
329    if (is_linux || is_chromeos) {
330      include_dirs += [ "$llvm_dir/configs/linux/include/" ]
331    } else if (is_fuchsia) {
332      include_dirs += [ "$llvm_dir/configs/fuchsia/include/" ]
333    } else if (is_win) {
334      include_dirs += [ "$llvm_dir/configs/windows/include/" ]
335    } else if (is_android) {
336      include_dirs += [ "$llvm_dir/configs/android/include/" ]
337    } else if (is_mac) {
338      include_dirs += [ "$llvm_dir/configs/darwin/include/" ]
339    } else {
340      assert(false, "llvm not configured for target platform")
341    }
342  }
343}
344
345swiftshader_source_set("swiftshader_reactor") {
346  if (use_swiftshader_with_subzero) {
347    deps = [
348      ":swiftshader_subzero_reactor",
349    ]
350  } else {
351    deps = [
352      ":swiftshader_llvm_reactor",
353    ]
354  }
355}
356