# 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("//build/config/compiler/compiler.gni")

config("swiftshader_config") {
  defines = [ "STRICT_CONFORMANCE" ]  # Disables OpenGL ES 3.0

  if (is_win) {
    cflags = [
      "/GS",  # Detects some buffer overruns
      "/Zc:wchar_t",
      "/EHsc",
      "/nologo",
      "/Gd",  # Default calling convention
    ]

    defines += [
      "_CRT_SECURE_NO_DEPRECATE",
      "NOMINMAX",
      "_WINDLL",
      "NO_SANITIZE_FUNCTION=",
      "ANGLE_DISABLE_TRACE",
    ]
  } else {
    cflags = [
      "-std=c++11",
      "-fno-exceptions",
      "-fno-operator-names",
      "-ffunction-sections",
      "-fdata-sections",
      "-fomit-frame-pointer",
      "-Os",
    ]

    defines += [
      "__STDC_CONSTANT_MACROS",
      "__STDC_LIMIT_MACROS",
      "NO_SANITIZE_FUNCTION=__attribute__((no_sanitize(\"function\")))",
      "ANGLE_DISABLE_TRACE",
      "NDEBUG",
    ]

    if (target_cpu == "x64") {  # 64 bit version
      cflags += [
        "-m64",
        "-fPIC",
        "-march=core2",
      ]
    } else {  # 32 bit version
      cflags += [
        "-m32",
        "-msse2",
        "-march=i686",
      ]
    }

    if (is_linux) {
      ldflags = [
        "-Wl,--hash-style=both",
        "-Wl,--gc-sections",
      ]

      # A bug in the gold linker prevents using ICF on 32-bit (crbug.com/729532)
      if (use_gold && target_cpu == "x86") {
        ldflags += [ "-Wl,--icf=none" ]
      }
    }
  }
}

group("swiftshader") {
  data_deps = [
    "src/OpenGL/libGLESv2:swiftshader_libGLESv2",
    "src/OpenGL/libEGL:swiftshader_libEGL",
  ]
}

group("swiftshader_tests") {
  testonly = true

  data_deps = [
    "tests/unittests:swiftshader_unittests",
  ]
}
