# 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.

# Need a separate config to ensure the warnings are added to the end.
config("swiftshader_opengl_compiler_private_config") {
  if (is_clang) {
    cflags = [
      "-DLOG_TAG=\"swiftshader_opengl_compiler\"",
      "-Wno-sign-compare",
    ]
  } else {
    if (host_os == "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)
      ]
    }
  }

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

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

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

  if ((host_os == "linux") || (host_os == "mac")) {
    sources += [
      "ossource_posix.cpp",
    ]
  } else if (host_os == "win") {
    sources += [
      "ossource_win.cpp",
    ]
  }

  configs += [
    ":swiftshader_opengl_compiler_private_config",
  ]

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