# 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")
import("//testing/libfuzzer/fuzzer_test.gni")

# Need a separate config to ensure the warnings are added to the end.
config("swiftshader_opengl_compiler_private_config") {
  if (is_win) {
    cflags = [
      "/wd4005",  # macro redefinition (in autogenerated code)
      "/wd4201",  # nameless struct/union
      "/wd4267",  # conversion from size_t to int/unsigned int
      "/wd4702",  # unreachable code (in autogenerated code)
      "/wd5030",  # attribute is not recognized
    ]

    if (!is_debug) {
      cflags += [ "/wd4189" ]  # local variable is initialized but not referenced (variables only used in ASSERTS)
    }
  } else {
    cflags = [ "-Wno-sign-compare" ]

    if (!is_debug) {
      cflags += [ "-Wno-unused-variable" ]  # local variable is initialized but not referenced (variables only used in ASSERTS)
    }
  }
}

config("swiftshader_translator_disable_pool_alloc") {
    defines = [ "SWIFTSHADER_TRANSLATOR_DISABLE_POOL_ALLOC" ]
}

swiftshader_source_set("swiftshader_opengl_compiler") {
  deps = [
    "preprocessor:swiftshader_opengl_preprocessor",
  ]

  sources = [
    "AnalyzeCallDepth.cpp",
    "Compiler.cpp",
    "Diagnostics.cpp",
    "DirectiveHandler.cpp",
    "InfoSink.cpp",
    "Initialize.cpp",
    "InitializeParseContext.cpp",
    "IntermTraverse.cpp",
    "Intermediate.cpp",
    "OutputASM.cpp",
    "ParseHelper.cpp",
    "PoolAlloc.cpp",
    "SymbolTable.cpp",
    "TranslatorASM.cpp",
    "ValidateLimitations.cpp",
    "ValidateSwitch.cpp",
    "debug.cpp",
    "glslang_lex.cpp",
    "glslang_tab.cpp",
    "intermOut.cpp",
    "parseConst.cpp",
    "util.cpp",
  ]

  if (use_fuzzing_engine) {
    all_dependent_configs = [ ":swiftshader_translator_disable_pool_alloc" ]
  }

  if (is_linux || is_mac || is_fuchsia) {
    sources += [ "ossource_posix.cpp" ]
  } else if (is_win) {
    sources += [ "ossource_win.cpp" ]
  }

  configs = [ ":swiftshader_opengl_compiler_private_config" ]

  include_dirs = [
    "..",
    "../..",
    "../../../include",
  ]
}