# 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("reactor.gni")
import("../swiftshader.gni")

config("swiftshader_llvm_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" ]
    }
  }
}

config("swiftshader_reactor_base_private_config") {
  defines = [
    "REACTOR_ANONYMOUS_MMAP_NAME=swiftshader_jit",
  ]
}

swiftshader_source_set("swiftshader_reactor_base") {
  sources = [
    "Debug.cpp",
    "EmulatedIntrinsics.cpp",
    "ExecutableMemory.cpp",
    "OptimalIntrinsics.cpp",
    "Pragma.cpp",
    "Reactor.cpp",
  ]

  configs = [
      ":swiftshader_reactor_base_private_config",
  ]
}

if (supports_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 (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/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_llvm_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",
    ]
  }
}
