blob: 2f31f642ec4a2e4bf1ab246728999f412f428c3f [file] [log] [blame]
# 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 =
target_cpu != "arm64" && target_cpu != "mips64el" && target_cpu != "ppc64"
supports_llvm = is_linux || is_fuchsia || is_win || is_android || is_mac
}
config("swiftshader_reactor_private_config") {
if (is_win) {
cflags = [
"/wd4201", # nameless struct/union
"/wd4245", # conversion from int to unsigned int (llvm)
]
} else {
cflags = [ "-Wno-unused-local-typedef" ]
defines = [
"__STDC_CONSTANT_MACROS",
"__STDC_LIMIT_MACROS",
]
if (target_cpu == "x86" || target_cpu == "x64") {
cflags += [ "-msse2" ]
}
}
}
swiftshader_source_set("swiftshader_reactor_base") {
sources = [
"Debug.cpp",
"ExecutableMemory.cpp",
"Reactor.cpp",
"Routine.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 (target_cpu == "x64") {
defines += [
"SZTARGET=X8664",
"SUBZERO_TARGET=X8664",
]
} else if (target_cpu == "x86") {
defines += [
"SZTARGET=X8632",
"SUBZERO_TARGET=X8632",
]
} else if (target_cpu == "mipsel") {
defines += [
"SZTARGET=MIPS32",
"SUBZERO_TARGET=MIPS32",
]
} else if (target_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) {
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_mac || is_fuchsia) {
cflags += [ "-Wno-macro-redefined" ]
}
if (is_clang) {
cflags += [
"-Wno-header-hygiene",
"-Wno-enum-compare-switch",
"-Wno-unused-lambda-capture",
]
}
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/Host.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/TargetParser.cpp",
"$subzero_llvm_dir/lib/Support/Threading.cpp",
"$subzero_llvm_dir/lib/Support/Timer.cpp",
"$subzero_llvm_dir/lib/Support/Triple.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 (target_cpu == "x64") {
sources += [
"$subzero_dir/src/IceInstX8664.cpp",
"$subzero_dir/src/IceTargetLoweringX8664.cpp",
]
} else if (target_cpu == "x86") {
sources += [
"$subzero_dir/src/IceInstX8632.cpp",
"$subzero_dir/src/IceTargetLoweringX8632.cpp",
]
} else if (target_cpu == "mipsel") {
sources += [
"$subzero_dir/src/IceAssemblerMIPS32.cpp",
"$subzero_dir/src/IceInstMIPS32.cpp",
"$subzero_dir/src/IceTargetLoweringMIPS32.cpp",
]
} else if (target_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 = [
":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") {
llvm7_dir = "../../third_party/llvm-7.0"
deps = [
":swiftshader_reactor_base",
"$llvm7_dir:swiftshader_llvm",
]
sources = [
"CPUID.cpp",
"LLVMReactor.cpp",
"LLVMRoutine.cpp",
]
configs = [ ":swiftshader_reactor_private_config" ]
include_dirs = [
"$llvm7_dir/llvm/include/",
"$llvm7_dir/configs/common/include/",
]
if (is_linux) {
include_dirs += [ "$llvm7_dir/configs/linux/include/" ]
} else if (is_fuchsia) {
include_dirs += [ "$llvm7_dir/configs/fuchsia/include/" ]
} else if (is_win) {
include_dirs += [ "$llvm7_dir/configs/windows/include/" ]
} else if (is_android) {
include_dirs += [ "$llvm7_dir/configs/android/include/" ]
} else if (is_mac) {
include_dirs += [ "$llvm7_dir/configs/darwin/include/" ]
} else {
assert(false, "llvm-7.0 not configured for target platform")
}
}
}
swiftshader_source_set("swiftshader_reactor") {
if (use_swiftshader_with_subzero) {
deps = [
":swiftshader_subzero_reactor",
]
} else {
deps = [
":swiftshader_llvm_reactor",
]
}
}