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" ] + } +}