# 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 and MIPS64.
  use_swiftshader_with_subzero =
      target_cpu != "arm64" && target_cpu != "mips64el"
  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") {
  deps = [
    "../OpenGL/common:swiftshader_opengl_common",
  ]

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