# 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_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 += [ "/wd4189" ] # local variable is initialized but not referenced (variables only used in ASSERTS)
    }

    if (is_clang) {
      cflags += [
        "-Wno-unused-function",
        "-Wno-unused-variable",
      ]
    }
  } else {
    cflags = [
      "-DLOG_TAG=\"swiftshader_opengl_compiler\"",
      "-Wno-sign-compare",
    ]

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

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 (is_linux || is_mac) {
    sources += [ "ossource_posix.cpp" ]
  } else if (is_win) {
    sources += [ "ossource_win.cpp" ]
  }

  configs += [ ":swiftshader_opengl_compiler_private_config" ]

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