Adding Subzero to Chromium on Windows
Modified the BUILD.gn files in order to be able to easily switch
between Subzero and LLVM back ends. Note that Subzero
compilation should already work on Linux, as soon as the Wheezy
to Jessie update lands. For now, only Windows will build Subzero.
Also removed linux hack from libEGL build file.
Change-Id: Ic584b604496c4b4f745b05d72a752f056495055b
Reviewed-on: https://swiftshader-review.googlesource.com/8630
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Reactor/BUILD.gn b/src/Reactor/BUILD.gn
index d98b74c..87b1bd8 100644
--- a/src/Reactor/BUILD.gn
+++ b/src/Reactor/BUILD.gn
@@ -13,6 +13,111 @@
# limitations under the License.
# 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 (target_cpu == "x64") {
+ defines += [
+ "SZTARGET=X8664",
+ "SUBZERO_TARGET=X8664",
+ ]
+ } else {
+ defines += [
+ "SZTARGET=X8632",
+ "SUBZERO_TARGET=X8632",
+ ]
+ }
+
+ include_dirs = [
+ "../../third_party/pnacl-subzero",
+ "../../third_party/pnacl-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_mac) {
+ include_dirs += [ "../../third_party/llvm-subzero/build/MacOS/include/" ]
+ }
+}
+
+config("swiftshader_subzero_private_config") {
+# cflags_cc = [ "--sysroot=/" ] #FIXME
+ cflags = []
+
+ if (is_win) {
+ cflags += [
+ "/wd4005",
+ "/wd4018",
+ "/wd4141",
+ "/wd4146",
+ "/wd4245", # conversion from int to unsigned int (llvm)
+ "/wd4267",
+ "/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) {
+ cflags += [ "-Wno-macro-redefined" ]
+ }
+
+ if (is_clang) {
+ cflags += [ "-Wno-header-hygiene" ]
+ }
+}
+
+config("swiftshader_reactor_with_subzero_private_config") {
+# cflags_cc = [ "--sysroot=/" ] #FIXME
+ cflags = []
+
+ if (is_win) {
+ cflags += [
+ "/wd4141",
+ "/wd4146",
+ "/wd4245", # conversion from int to unsigned int (llvm)
+ "/wd4267",
+ "/wd4702",
+ "/wd4800",
+ ]
+
+ if (is_clang) {
+ if (is_debug) {
+ cflags += [ "-Wno-sign-compare" ]
+ }
+ }
+ }
+
+ if (is_clang) {
+ cflags += [ "-Wno-header-hygiene" ]
+ }
+}
+
config("swiftshader_reactor_private_config") {
if (is_win) {
cflags = [
@@ -30,28 +135,142 @@
}
}
-source_set("swiftshader_reactor") {
- deps = [
- "../../third_party/LLVM:swiftshader_llvm",
- "../OpenGL/common:swiftshader_opengl_common",
- ]
+source_set("swiftshader_subzero") {
+ subzero_dir = "../../third_party/pnacl-subzero"
+ subzero_llvm_dir = "../../third_party/llvm-subzero"
sources = [
- "LLVMReactor.cpp",
- "LLVMRoutine.cpp",
- "LLVMRoutineManager.cpp",
- "Routine.cpp",
+ "$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 {
+ sources += [
+ "$subzero_dir/src/IceInstX8632.cpp",
+ "$subzero_dir/src/IceTargetLoweringX8632.cpp",
+ ]
+ }
+
if (is_win) {
configs -= [ "//build/config/win:unicode" ]
}
-
- configs += [ ":swiftshader_reactor_private_config" ]
-
- include_dirs = [
- "..",
- "../Common",
- "../../third_party/LLVM/include/",
+ configs += [
+ ":swiftshader_subzero_common_private_config",
+ ":swiftshader_subzero_private_config",
]
}
+
+source_set("swiftshader_reactor") {
+ deps = [ "../OpenGL/common:swiftshader_opengl_common" ]
+
+ sources = [ "Routine.cpp" ]
+
+ # Currently, Subzero will only be used on Windows
+ # LLVM will be used on Linux and MacOS
+ use_subzero = is_win
+
+ if(use_subzero) {
+ deps += [ ":swiftshader_subzero" ]
+
+ sources += [
+ "Optimizer.cpp",
+ "SubzeroReactor.cpp",
+ ]
+
+ configs += [
+ ":swiftshader_subzero_common_private_config",
+ ":swiftshader_reactor_with_subzero_private_config",
+ ]
+ } else {
+ deps += [ "../../third_party/LLVM:swiftshader_llvm" ]
+
+ sources += [
+ "LLVMReactor.cpp",
+ "LLVMRoutine.cpp",
+ "LLVMRoutineManager.cpp",
+ ]
+
+ configs += [ ":swiftshader_reactor_private_config" ]
+
+ include_dirs = [
+ "..",
+ "../Common",
+ "../../third_party/LLVM/include/",
+ ]
+ }
+
+ if (is_win) {
+ configs -= [ "//build/config/win:unicode" ]
+ }
+}