Home | History | Annotate | Download | only in Reactor
      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 
     15 import("../swiftshader.gni")
     16 
     17 declare_args() {
     18   # Currently, Subzero is not used by default
     19   # LLVM is still the default backend
     20   use_swiftshader_with_subzero = is_win || is_linux || is_mac || is_chromeos
     21 }
     22 
     23 # Need a separate config to ensure the warnings are added to the end.
     24 config("swiftshader_subzero_common_private_config") {
     25   defines = [
     26     "ALLOW_DUMP=0",
     27     "ALLOW_TIMERS=0",
     28     "ALLOW_LLVM_CL=0",
     29     "ALLOW_LLVM_IR=0",
     30     "ALLOW_LLVM_IR_AS_INPUT=0",
     31     "ALLOW_MINIMAL_BUILD=0",
     32     "ALLOW_WASM=0",
     33     "ICE_THREAD_LOCAL_HACK=0",
     34   ]
     35 
     36   if (is_win) {
     37     defines += [ "SUBZERO_USE_MICROSOFT_ABI" ]
     38   }
     39 
     40   if (target_cpu == "x64") {
     41     defines += [
     42       "SZTARGET=X8664",
     43       "SUBZERO_TARGET=X8664",
     44     ]
     45   } else {
     46     defines += [
     47       "SZTARGET=X8632",
     48       "SUBZERO_TARGET=X8632",
     49     ]
     50   }
     51 
     52   include_dirs = [
     53     "../../third_party/subzero",
     54     "../../third_party/subzero/pnacl-llvm/include/",
     55     "../../third_party/llvm-subzero/include/",
     56   ]
     57 
     58   if (is_win) {
     59     include_dirs += [ "../../third_party/llvm-subzero/build/Windows/include/" ]
     60   } else if (is_linux) {
     61     include_dirs += [ "../../third_party/llvm-subzero/build/Linux/include/" ]
     62   } else if (is_mac) {
     63     include_dirs += [ "../../third_party/llvm-subzero/build/MacOS/include/" ]
     64   }
     65 }
     66 
     67 config("swiftshader_subzero_private_config") {
     68   cflags = []
     69 
     70   if (is_win) {
     71     cflags += [
     72       "/wd4005",
     73       "/wd4018",
     74       "/wd4141",
     75       "/wd4146",
     76       "/wd4245",  # conversion from int to unsigned int (llvm)
     77       "/wd4267",
     78       "/wd4291",
     79       "/wd4310",
     80       "/wd4334",
     81       "/wd4389",
     82       "/wd4701",
     83       "/wd4702",
     84       "/wd4703",
     85       "/wd4706",
     86       "/wd4800",
     87     ]
     88 
     89     if (!is_debug) {
     90       cflags += [ "/wd4718" ]
     91     }
     92 
     93     if (is_clang) {
     94       if (is_debug) {
     95         cflags += [ "-Wno-sign-compare" ]
     96       }
     97     }
     98   } else if (is_linux || is_mac) {
     99     cflags += [ "-Wno-macro-redefined" ]
    100   }
    101 
    102   if (is_clang) {
    103     cflags += [ "-Wno-header-hygiene" ]
    104   }
    105 }
    106 
    107 config("swiftshader_reactor_with_subzero_private_config") {
    108   cflags = []
    109 
    110   if (is_win) {
    111     cflags += [
    112       "/wd4141",
    113       "/wd4146",
    114       "/wd4245",  # conversion from int to unsigned int (llvm)
    115       "/wd4267",
    116       "/wd4291",
    117       "/wd4309",
    118       "/wd4702",
    119       "/wd4800",
    120     ]
    121 
    122     if (use_swiftshader_with_subzero) {
    123       cflags += [
    124         "/wd4018",  # signed/unsigned mismatch (llvm)
    125         "/wd4310",  # cast truncates constant value (llvm)
    126       ]
    127     }
    128 
    129     if (is_clang) {
    130       if (is_debug) {
    131         cflags += [ "-Wno-sign-compare" ]
    132       }
    133     }
    134   }
    135 
    136   if (is_clang) {
    137     cflags += [ "-Wno-header-hygiene" ]
    138   }
    139 }
    140 
    141 config("swiftshader_reactor_private_config") {
    142   if (is_win) {
    143     cflags = [
    144       "/wd4201",  # nameless struct/union
    145       "/wd4245",  # conversion from int to unsigned int (llvm)
    146     ]
    147   } else {
    148     cflags = [
    149       "-Wno-unused-local-typedef",
    150       "-msse2",
    151     ]
    152 
    153     defines = [
    154       "__STDC_CONSTANT_MACROS",
    155       "__STDC_LIMIT_MACROS",
    156     ]
    157   }
    158 }
    159 
    160 if (use_swiftshader_with_subzero) {
    161   swiftshader_source_set("swiftshader_subzero") {
    162     subzero_dir = "../../third_party/subzero"
    163     subzero_llvm_dir = "../../third_party/llvm-subzero"
    164 
    165     sources = [
    166       "$subzero_dir/src/IceAssembler.cpp",
    167       "$subzero_dir/src/IceCfg.cpp",
    168       "$subzero_dir/src/IceCfgNode.cpp",
    169       "$subzero_dir/src/IceClFlags.cpp",
    170       "$subzero_dir/src/IceELFObjectWriter.cpp",
    171       "$subzero_dir/src/IceELFSection.cpp",
    172       "$subzero_dir/src/IceFixups.cpp",
    173       "$subzero_dir/src/IceGlobalContext.cpp",
    174       "$subzero_dir/src/IceGlobalInits.cpp",
    175       "$subzero_dir/src/IceInst.cpp",
    176       "$subzero_dir/src/IceInstrumentation.cpp",
    177       "$subzero_dir/src/IceIntrinsics.cpp",
    178       "$subzero_dir/src/IceLiveness.cpp",
    179       "$subzero_dir/src/IceLoopAnalyzer.cpp",
    180       "$subzero_dir/src/IceMangling.cpp",
    181       "$subzero_dir/src/IceMemory.cpp",
    182       "$subzero_dir/src/IceOperand.cpp",
    183       "$subzero_dir/src/IceRNG.cpp",
    184       "$subzero_dir/src/IceRangeSpec.cpp",
    185       "$subzero_dir/src/IceRegAlloc.cpp",
    186       "$subzero_dir/src/IceRevision.cpp",
    187       "$subzero_dir/src/IceSwitchLowering.cpp",
    188       "$subzero_dir/src/IceTargetLowering.cpp",
    189       "$subzero_dir/src/IceTargetLoweringX86.cpp",
    190       "$subzero_dir/src/IceThreading.cpp",
    191       "$subzero_dir/src/IceTimerTree.cpp",
    192       "$subzero_dir/src/IceTypes.cpp",
    193       "$subzero_dir/src/IceVariableSplitting.cpp",
    194       "$subzero_llvm_dir/lib/Demangle/ItaniumDemangle.cpp",
    195       "$subzero_llvm_dir/lib/Support/APInt.cpp",
    196       "$subzero_llvm_dir/lib/Support/Atomic.cpp",
    197       "$subzero_llvm_dir/lib/Support/CommandLine.cpp",
    198       "$subzero_llvm_dir/lib/Support/ConvertUTF.cpp",
    199       "$subzero_llvm_dir/lib/Support/ConvertUTFWrapper.cpp",
    200       "$subzero_llvm_dir/lib/Support/Debug.cpp",
    201       "$subzero_llvm_dir/lib/Support/Errno.cpp",
    202       "$subzero_llvm_dir/lib/Support/ErrorHandling.cpp",
    203       "$subzero_llvm_dir/lib/Support/FoldingSet.cpp",
    204       "$subzero_llvm_dir/lib/Support/Hashing.cpp",
    205       "$subzero_llvm_dir/lib/Support/Host.cpp",
    206       "$subzero_llvm_dir/lib/Support/ManagedStatic.cpp",
    207       "$subzero_llvm_dir/lib/Support/MemoryBuffer.cpp",
    208       "$subzero_llvm_dir/lib/Support/Mutex.cpp",
    209       "$subzero_llvm_dir/lib/Support/NativeFormatting.cpp",
    210       "$subzero_llvm_dir/lib/Support/Path.cpp",
    211       "$subzero_llvm_dir/lib/Support/Process.cpp",
    212       "$subzero_llvm_dir/lib/Support/Program.cpp",
    213       "$subzero_llvm_dir/lib/Support/Regex.cpp",
    214       "$subzero_llvm_dir/lib/Support/Signals.cpp",
    215       "$subzero_llvm_dir/lib/Support/SmallPtrSet.cpp",
    216       "$subzero_llvm_dir/lib/Support/SmallVector.cpp",
    217       "$subzero_llvm_dir/lib/Support/StringExtras.cpp",
    218       "$subzero_llvm_dir/lib/Support/StringMap.cpp",
    219       "$subzero_llvm_dir/lib/Support/StringRef.cpp",
    220       "$subzero_llvm_dir/lib/Support/StringSaver.cpp",
    221       "$subzero_llvm_dir/lib/Support/TargetParser.cpp",
    222       "$subzero_llvm_dir/lib/Support/Threading.cpp",
    223       "$subzero_llvm_dir/lib/Support/Timer.cpp",
    224       "$subzero_llvm_dir/lib/Support/Triple.cpp",
    225       "$subzero_llvm_dir/lib/Support/Twine.cpp",
    226       "$subzero_llvm_dir/lib/Support/circular_raw_ostream.cpp",
    227       "$subzero_llvm_dir/lib/Support/raw_os_ostream.cpp",
    228       "$subzero_llvm_dir/lib/Support/raw_ostream.cpp",
    229       "$subzero_llvm_dir/lib/Support/regcomp.c",
    230       "$subzero_llvm_dir/lib/Support/regerror.c",
    231       "$subzero_llvm_dir/lib/Support/regexec.c",
    232       "$subzero_llvm_dir/lib/Support/regfree.c",
    233       "$subzero_llvm_dir/lib/Support/regstrlcpy.c",
    234     ]
    235 
    236     if (target_cpu == "x64") {
    237       sources += [
    238         "$subzero_dir/src/IceInstX8664.cpp",
    239         "$subzero_dir/src/IceTargetLoweringX8664.cpp",
    240       ]
    241     } else {
    242       sources += [
    243         "$subzero_dir/src/IceInstX8632.cpp",
    244         "$subzero_dir/src/IceTargetLoweringX8632.cpp",
    245       ]
    246     }
    247 
    248     configs = [
    249       ":swiftshader_subzero_common_private_config",
    250       ":swiftshader_subzero_private_config",
    251     ]
    252   }
    253 }
    254 
    255 swiftshader_source_set("swiftshader_reactor") {
    256   deps = [
    257     "../OpenGL/common:swiftshader_opengl_common",
    258   ]
    259 
    260   sources = [
    261     "Routine.cpp",
    262   ]
    263 
    264   if (use_swiftshader_with_subzero) {
    265     deps += [ ":swiftshader_subzero" ]
    266 
    267     sources += [
    268       "Optimizer.cpp",
    269       "SubzeroReactor.cpp",
    270     ]
    271 
    272     configs = [
    273       ":swiftshader_subzero_common_private_config",
    274       ":swiftshader_reactor_with_subzero_private_config",
    275     ]
    276   } else {
    277     deps += [ "../../third_party/LLVM:swiftshader_llvm" ]
    278 
    279     sources += [
    280       "LLVMReactor.cpp",
    281       "LLVMRoutine.cpp",
    282       "LLVMRoutineManager.cpp",
    283     ]
    284 
    285     configs = [ ":swiftshader_reactor_private_config" ]
    286 
    287     include_dirs = [
    288       "..",
    289       "../Common",
    290       "../../third_party/LLVM/include/",
    291     ]
    292   }
    293 }
    294