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

config("swiftshader_config") {
  cflags = []
  defines = []

  if (!is_debug) {
    defines += [ "ANGLE_DISABLE_TRACE" ]
  }

  if (!is_win || is_clang) {
    defines +=
        [ "NO_SANITIZE_FUNCTION=__attribute__((no_sanitize(\"function\")))" ]
  } else {
    defines += [ "NO_SANITIZE_FUNCTION=" ]
  }

  if (is_win) {
    # Disable MSVC warnings about std::aligned_storage being broken before
    # VS 2017 15.8
    defines += [ "_ENABLE_EXTENDED_ALIGNED_STORAGE" ]

    # Diable some MSVC warnings.
    if (!is_clang) {
      cflags += [
        "/wd4065",  # switch statement contains 'default' but no 'case' labels
        "/wd4309",  # Truncation of constant value. See PixelRoutine.cpp casts
                    # of signed shorts.
      ]
    }

    cflags_cc = [ "/std:c++17" ]
  } else {
    cflags_cc = [ "-std=c++17" ]

    if (!is_debug) {
      cflags += [ "-Os" ]
    }
  }
}

source_set("vertex_routine_fuzzer") {
  sources = [ "tests/fuzzers/VertexRoutineFuzzer.cpp" ]
  if (is_win) {
    cflags = [
      "/wd4201",  # nameless struct/union
      "/wd4065",  # switch statement contains 'default' but no 'case' labels
      "/wd5030",  # attribute is not recognized
    ]
  }
  include_dirs = [ "src/" ]
  deps = [ "src/OpenGL/libGLESv2:swiftshader_libGLESv2_static" ]
}

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

if (build_with_chromium) {
  group("swiftshader_tests") {
    testonly = true

    data_deps = [
      "tests/GLESUnitTests:swiftshader_unittests",
      "tests/SystemUnitTests:swiftshader_system_unittests",
    ]

    if (supports_llvm) {
      data_deps +=
          [ "tests/ReactorUnitTests:swiftshader_reactor_llvm_unittests" ]
    }

    if (supports_subzero) {
      data_deps +=
          [ "tests/ReactorUnitTests:swiftshader_reactor_subzero_unittests" ]
    }
  }
}
