| # Copyright 2016 The SwiftShader Authors. All Rights Reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import("../swiftshader.gni") |
| |
| declare_args() { |
| # Subzero produces smaller binaries, but doesn't support ARM64, MIPS64, and |
| # PPC64. |
| use_swiftshader_with_subzero = |
| current_cpu != "arm64" && current_cpu != "mips64el" && current_cpu != "ppc64" |
| supports_llvm = is_linux || is_chromeos || is_fuchsia || is_win || is_android || is_mac |
| } |
| |
| config("swiftshader_reactor_private_config") { |
| if (is_win) { |
| cflags = [ |
| "/wd4141", # 'inline' used more than once. (LLVM 7.0) |
| "/wd4146", # unary minus operator applied to unsigned type. (LLVM 7.0) |
| "/wd4201", # nameless struct/union |
| "/wd4245", # conversion from int to unsigned int (llvm) |
| "/wd4624", # destructor was implicitly defined as deleted (LLVM 7.0) |
| ] |
| } else { |
| cflags = [ "-Wno-unused-local-typedef" ] |
| defines = [ |
| "__STDC_CONSTANT_MACROS", |
| "__STDC_LIMIT_MACROS", |
| ] |
| |
| if (current_cpu == "x86" || current_cpu == "x64") { |
| cflags += [ "-msse2" ] |
| } |
| } |
| } |
| |
| swiftshader_source_set("swiftshader_reactor_base") { |
| sources = [ |
| "Debug.cpp", |
| "EmulatedIntrinsics.cpp", |
| "ExecutableMemory.cpp", |
| "OptimalIntrinsics.cpp", |
| "Reactor.cpp", |
| ] |
| } |
| |
| if (use_swiftshader_with_subzero) { |
| # Need a separate config to ensure the warnings are added to the end. |
| config("swiftshader_subzero_common_private_config") { |
| defines = [ |
| "ALLOW_DUMP=0", |
| "ALLOW_TIMERS=0", |
| "ALLOW_LLVM_CL=0", |
| "ALLOW_LLVM_IR=0", |
| "ALLOW_LLVM_IR_AS_INPUT=0", |
| "ALLOW_MINIMAL_BUILD=0", |
| "ALLOW_WASM=0", |
| "ICE_THREAD_LOCAL_HACK=0", |
| ] |
| |
| if (is_win) { |
| defines += [ "SUBZERO_USE_MICROSOFT_ABI" ] |
| } |
| |
| if (current_cpu == "x64") { |
| defines += [ |
| "SZTARGET=X8664", |
| "SUBZERO_TARGET=X8664", |
| ] |
| } else if (current_cpu == "x86") { |
| defines += [ |
| "SZTARGET=X8632", |
| "SUBZERO_TARGET=X8632", |
| ] |
| } else if (current_cpu == "mipsel") { |
| defines += [ |
| "SZTARGET=MIPS32", |
| "SUBZERO_TARGET=MIPS32", |
| ] |
| } else if (current_cpu == "arm") { |
| defines += [ |
| "SZTARGET=ARM32", |
| "SUBZERO_TARGET=ARM32", |
| ] |
| } |
| |
| include_dirs = [ |
| "../../third_party/subzero", |
| "../../third_party/subzero/pnacl-llvm/include/", |
| "../../third_party/llvm-subzero/include/", |
| ] |
| |
| if (is_win) { |
| include_dirs += |
| [ "../../third_party/llvm-subzero/build/Windows/include/" ] |
| } else if (is_linux || is_chromeos) { |
| include_dirs += [ "../../third_party/llvm-subzero/build/Linux/include/" ] |
| } else if (is_fuchsia) { |
| include_dirs += |
| [ "../../third_party/llvm-subzero/build/Fuchsia/include/" ] |
| } else if (is_mac) { |
| include_dirs += [ "../../third_party/llvm-subzero/build/MacOS/include/" ] |
| } |
| } |
| |
| config("swiftshader_subzero_private_config") { |
| cflags = [] |
| |
| if (is_win) { |
| cflags += [ |
| "/wd4005", |
| "/wd4018", |
| "/wd4141", |
| "/wd4146", |
| "/wd4245", # conversion from int to unsigned int (llvm) |
| "/wd4267", |
| "/wd4291", |
| "/wd4310", |
| "/wd4334", |
| "/wd4389", |
| "/wd4701", |
| "/wd4702", |
| "/wd4703", |
| "/wd4706", |
| "/wd4800", |
| ] |
| |
| if (!is_debug) { |
| cflags += [ "/wd4718" ] |
| } |
| |
| if (is_clang) { |
| if (is_debug) { |
| cflags += [ "-Wno-sign-compare" ] |
| } |
| } |
| } else if (is_linux || is_chromeos || is_mac || is_fuchsia) { |
| cflags += [ "-Wno-macro-redefined" ] |
| } |
| |
| if (is_clang) { |
| cflags += [ |
| "-Wno-header-hygiene", |
| "-Wno-enum-compare-switch", |
| "-Wno-unused-lambda-capture", |
| "-Wno-unused-function", |
| ] |
| } |
| |
| if (is_fuchsia) { |
| cflags += [ "-Wno-error" ] |
| } |
| } |
| |
| config("swiftshader_reactor_with_subzero_private_config") { |
| cflags = [] |
| |
| if (is_win) { |
| cflags += [ |
| "/wd4141", |
| "/wd4146", |
| "/wd4245", # conversion from int to unsigned int (llvm) |
| "/wd4267", |
| "/wd4291", |
| "/wd4309", |
| "/wd4702", |
| "/wd4800", |
| ] |
| |
| cflags += [ |
| "/wd4018", # signed/unsigned mismatch (llvm) |
| "/wd4310", # cast truncates constant value (llvm) |
| ] |
| |
| if (is_clang) { |
| if (is_debug) { |
| cflags += [ "-Wno-sign-compare" ] |
| } |
| } |
| } |
| |
| if (is_clang) { |
| cflags += [ "-Wno-header-hygiene" ] |
| } |
| |
| if (is_fuchsia) { |
| cflags += [ "-Wno-error" ] |
| } |
| } |
| |
| swiftshader_source_set("swiftshader_subzero") { |
| subzero_dir = "../../third_party/subzero" |
| subzero_llvm_dir = "../../third_party/llvm-subzero" |
| |
| sources = [ |
| "$subzero_dir/src/IceAssembler.cpp", |
| "$subzero_dir/src/IceCfg.cpp", |
| "$subzero_dir/src/IceCfgNode.cpp", |
| "$subzero_dir/src/IceClFlags.cpp", |
| "$subzero_dir/src/IceELFObjectWriter.cpp", |
| "$subzero_dir/src/IceELFSection.cpp", |
| "$subzero_dir/src/IceFixups.cpp", |
| "$subzero_dir/src/IceGlobalContext.cpp", |
| "$subzero_dir/src/IceGlobalInits.cpp", |
| "$subzero_dir/src/IceInst.cpp", |
| "$subzero_dir/src/IceInstrumentation.cpp", |
| "$subzero_dir/src/IceIntrinsics.cpp", |
| "$subzero_dir/src/IceLiveness.cpp", |
| "$subzero_dir/src/IceLoopAnalyzer.cpp", |
| "$subzero_dir/src/IceMangling.cpp", |
| "$subzero_dir/src/IceMemory.cpp", |
| "$subzero_dir/src/IceOperand.cpp", |
| "$subzero_dir/src/IceRNG.cpp", |
| "$subzero_dir/src/IceRangeSpec.cpp", |
| "$subzero_dir/src/IceRegAlloc.cpp", |
| "$subzero_dir/src/IceRevision.cpp", |
| "$subzero_dir/src/IceSwitchLowering.cpp", |
| "$subzero_dir/src/IceTargetLowering.cpp", |
| "$subzero_dir/src/IceTargetLoweringX86.cpp", |
| "$subzero_dir/src/IceThreading.cpp", |
| "$subzero_dir/src/IceTimerTree.cpp", |
| "$subzero_dir/src/IceTypes.cpp", |
| "$subzero_dir/src/IceVariableSplitting.cpp", |
| "$subzero_llvm_dir/lib/Demangle/ItaniumDemangle.cpp", |
| "$subzero_llvm_dir/lib/Support/APInt.cpp", |
| "$subzero_llvm_dir/lib/Support/Atomic.cpp", |
| "$subzero_llvm_dir/lib/Support/CommandLine.cpp", |
| "$subzero_llvm_dir/lib/Support/ConvertUTF.cpp", |
| "$subzero_llvm_dir/lib/Support/ConvertUTFWrapper.cpp", |
| "$subzero_llvm_dir/lib/Support/Debug.cpp", |
| "$subzero_llvm_dir/lib/Support/Errno.cpp", |
| "$subzero_llvm_dir/lib/Support/ErrorHandling.cpp", |
| "$subzero_llvm_dir/lib/Support/FoldingSet.cpp", |
| "$subzero_llvm_dir/lib/Support/Hashing.cpp", |
| "$subzero_llvm_dir/lib/Support/ManagedStatic.cpp", |
| "$subzero_llvm_dir/lib/Support/MemoryBuffer.cpp", |
| "$subzero_llvm_dir/lib/Support/Mutex.cpp", |
| "$subzero_llvm_dir/lib/Support/NativeFormatting.cpp", |
| "$subzero_llvm_dir/lib/Support/Path.cpp", |
| "$subzero_llvm_dir/lib/Support/Process.cpp", |
| "$subzero_llvm_dir/lib/Support/Program.cpp", |
| "$subzero_llvm_dir/lib/Support/Regex.cpp", |
| "$subzero_llvm_dir/lib/Support/Signals.cpp", |
| "$subzero_llvm_dir/lib/Support/SmallPtrSet.cpp", |
| "$subzero_llvm_dir/lib/Support/SmallVector.cpp", |
| "$subzero_llvm_dir/lib/Support/StringExtras.cpp", |
| "$subzero_llvm_dir/lib/Support/StringMap.cpp", |
| "$subzero_llvm_dir/lib/Support/StringRef.cpp", |
| "$subzero_llvm_dir/lib/Support/StringSaver.cpp", |
| "$subzero_llvm_dir/lib/Support/Threading.cpp", |
| "$subzero_llvm_dir/lib/Support/Timer.cpp", |
| "$subzero_llvm_dir/lib/Support/Twine.cpp", |
| "$subzero_llvm_dir/lib/Support/circular_raw_ostream.cpp", |
| "$subzero_llvm_dir/lib/Support/raw_os_ostream.cpp", |
| "$subzero_llvm_dir/lib/Support/raw_ostream.cpp", |
| "$subzero_llvm_dir/lib/Support/regcomp.c", |
| "$subzero_llvm_dir/lib/Support/regerror.c", |
| "$subzero_llvm_dir/lib/Support/regexec.c", |
| "$subzero_llvm_dir/lib/Support/regfree.c", |
| "$subzero_llvm_dir/lib/Support/regstrlcpy.c", |
| ] |
| |
| if (current_cpu == "x64") { |
| sources += [ |
| "$subzero_dir/src/IceInstX8664.cpp", |
| "$subzero_dir/src/IceTargetLoweringX8664.cpp", |
| ] |
| } else if (current_cpu == "x86") { |
| sources += [ |
| "$subzero_dir/src/IceInstX8632.cpp", |
| "$subzero_dir/src/IceTargetLoweringX8632.cpp", |
| ] |
| } else if (current_cpu == "mipsel") { |
| sources += [ |
| "$subzero_dir/src/IceAssemblerMIPS32.cpp", |
| "$subzero_dir/src/IceInstMIPS32.cpp", |
| "$subzero_dir/src/IceTargetLoweringMIPS32.cpp", |
| ] |
| } else if (current_cpu == "arm") { |
| sources += [ |
| "$subzero_dir/src/IceAssemblerARM32.cpp", |
| "$subzero_dir/src/IceInstARM32.cpp", |
| "$subzero_dir/src/IceTargetLoweringARM32.cpp", |
| ] |
| } |
| |
| configs = [ |
| ":swiftshader_subzero_common_private_config", |
| ":swiftshader_subzero_private_config", |
| ] |
| } |
| swiftshader_source_set("swiftshader_subzero_reactor") { |
| deps = [ |
| "../../third_party/marl:Marl", |
| ":swiftshader_reactor_base", |
| ":swiftshader_subzero", |
| ] |
| |
| sources = [ |
| "Optimizer.cpp", |
| "SubzeroReactor.cpp", |
| ] |
| |
| configs = [ |
| ":swiftshader_subzero_common_private_config", |
| ":swiftshader_reactor_with_subzero_private_config", |
| ] |
| } |
| } |
| |
| if (supports_llvm) { |
| swiftshader_source_set("swiftshader_llvm_reactor") { |
| llvm_dir = "../../third_party/llvm-10.0" |
| |
| deps = [ |
| ":swiftshader_reactor_base", |
| "$llvm_dir:swiftshader_llvm", |
| ] |
| |
| sources = [ |
| "CPUID.cpp", |
| "LLVMJIT.cpp", |
| "LLVMReactor.cpp", |
| ] |
| |
| configs = [ ":swiftshader_reactor_private_config" ] |
| |
| include_dirs = [ |
| "$llvm_dir/llvm/include/", |
| "$llvm_dir/configs/common/include/", |
| ] |
| |
| if (is_linux || is_chromeos) { |
| include_dirs += [ "$llvm_dir/configs/linux/include/" ] |
| } else if (is_fuchsia) { |
| include_dirs += [ "$llvm_dir/configs/fuchsia/include/" ] |
| } else if (is_win) { |
| include_dirs += [ "$llvm_dir/configs/windows/include/" ] |
| } else if (is_android) { |
| include_dirs += [ "$llvm_dir/configs/android/include/" ] |
| } else if (is_mac) { |
| include_dirs += [ "$llvm_dir/configs/darwin/include/" ] |
| } else { |
| assert(false, "llvm not configured for target platform") |
| } |
| } |
| } |
| |
| swiftshader_source_set("swiftshader_reactor") { |
| if (use_swiftshader_with_subzero) { |
| deps = [ |
| ":swiftshader_subzero_reactor", |
| ] |
| } else { |
| deps = [ |
| ":swiftshader_llvm_reactor", |
| ] |
| } |
| } |