# Copyright (C) 2018 Google, Inc.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
#    Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#    Redistributions in binary form must reproduce the above
#    copyright notice, this list of conditions and the following
#    disclaimer in the documentation and/or other materials provided
#    with the distribution.
#
#    Neither the name of Google Inc. nor the names of its
#    contributors may be used to endorse or promote products derived
#    from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

import("//build_overrides/glslang.gni")

# Both Chromium and Fuchsia use by default a set of warning errors
# that is far too strict to compile this project. These are also
# typically appended after |cflags|, overriding target-specific
# definitions. To work around this, determine which configs to
# add and remove in order to succesfully build the project.
if (defined(is_fuchsia_tree) && is_fuchsia_tree) {
  _configs_to_remove = [ "//build/config:default_warnings" ]
  _configs_to_add = []
} else {
  _configs_to_remove = [ "//build/config/compiler:chromium_code" ]
  _configs_to_add = [ "//build/config/compiler:no_chromium_code" ]
}

action("glslang_build_info") {
  script = "build_info.py"

  src_dir = "."
  changes_file = "CHANGES.md"
  template_file = "build_info.h.tmpl"
  out_file = "${target_gen_dir}/include/glslang/build_info.h"

  inputs = [
    changes_file,
    script,
    template_file,
  ]
  outputs = [ out_file ]
  args = [
    rebase_path(src_dir, root_build_dir),
    "-i",
    rebase_path(template_file, root_build_dir),
    "-o",
    rebase_path(out_file, root_build_dir),
  ]
}

action("glslang_extension_headers") {
  script = "gen_extension_headers.py"

  out_file = "${target_gen_dir}/include/glslang/glsl_intrinsic_header.h"

  # Fuchsia GN build rules require all GN actions to be hermetic and they
  # should correctly and fully state their inputs and outpus (see
  # https://fuchsia.dev/fuchsia-src/development/build/hermetic_actions
  # for details). All input files of the script should be added to the
  # |sources| list.
  sources = [
    "glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl",
  ]

  inputs = [
    script
  ]
  outputs = [ out_file ]
  args = [
    "-i",
    rebase_path("glslang/ExtensionHeaders", root_build_dir),
    "-o",
    rebase_path(out_file, root_build_dir),
  ]
}

spirv_tools_dir = glslang_spirv_tools_dir

config("glslang_public") {
  include_dirs = [ "." ]
  if (!is_win || is_clang) {
    cflags = [ "-Wno-conversion" ]
  }
}

config("glslang_hlsl") {
  defines = [ "ENABLE_HLSL=1" ]
}

template("glslang_sources_common") {
  source_set(target_name) {
    public_configs = [ ":glslang_public" ]

    if (invoker.enable_hlsl) {
      public_configs += [ ":glslang_hlsl" ]
    }

    sources = [
      "SPIRV/GLSL.ext.AMD.h",
      "SPIRV/GLSL.ext.EXT.h",
      "SPIRV/GLSL.ext.KHR.h",
      "SPIRV/GLSL.ext.NV.h",
      "SPIRV/GLSL.ext.ARM.h",
      "SPIRV/GLSL.ext.QCOM.h",
      "SPIRV/GLSL.std.450.h",
      "SPIRV/GlslangToSpv.cpp",
      "SPIRV/GlslangToSpv.h",
      "SPIRV/InReadableOrder.cpp",
      "SPIRV/Logger.cpp",
      "SPIRV/Logger.h",
      "SPIRV/NonSemanticDebugPrintf.h",
      "SPIRV/NonSemanticShaderDebugInfo100.h",
      "SPIRV/SPVRemapper.cpp",
      "SPIRV/SPVRemapper.h",
      "SPIRV/SpvBuilder.cpp",
      "SPIRV/SpvBuilder.h",
      "SPIRV/SpvPostProcess.cpp",
      "SPIRV/SpvTools.h",
      "SPIRV/bitutils.h",
      "SPIRV/disassemble.cpp",
      "SPIRV/disassemble.h",
      "SPIRV/doc.cpp",
      "SPIRV/doc.h",
      "SPIRV/hex_float.h",
      "SPIRV/spirv.hpp",
      "SPIRV/spvIR.h",
      "glslang/GenericCodeGen/CodeGen.cpp",
      "glslang/GenericCodeGen/Link.cpp",
      "glslang/Include/BaseTypes.h",
      "glslang/Include/Common.h",
      "glslang/Include/ConstantUnion.h",
      "glslang/Include/InfoSink.h",
      "glslang/Include/InitializeGlobals.h",
      "glslang/Include/PoolAlloc.h",
      "glslang/Include/ResourceLimits.h",
      "glslang/Include/ShHandle.h",
      "glslang/Include/SpirvIntrinsics.h",
      "glslang/Include/Types.h",
      "glslang/Include/arrays.h",
      "glslang/Include/intermediate.h",
      "glslang/Include/visibility.h",
      "glslang/MachineIndependent/Constant.cpp",
      "glslang/MachineIndependent/InfoSink.cpp",
      "glslang/MachineIndependent/Initialize.cpp",
      "glslang/MachineIndependent/Initialize.h",
      "glslang/MachineIndependent/IntermTraverse.cpp",
      "glslang/MachineIndependent/Intermediate.cpp",
      "glslang/MachineIndependent/LiveTraverser.h",
      "glslang/MachineIndependent/ParseContextBase.cpp",
      "glslang/MachineIndependent/ParseHelper.cpp",
      "glslang/MachineIndependent/ParseHelper.h",
      "glslang/MachineIndependent/PoolAlloc.cpp",
      "glslang/MachineIndependent/RemoveTree.cpp",
      "glslang/MachineIndependent/RemoveTree.h",
      "glslang/MachineIndependent/Scan.cpp",
      "glslang/MachineIndependent/Scan.h",
      "glslang/MachineIndependent/ScanContext.h",
      "glslang/MachineIndependent/ShaderLang.cpp",
      "glslang/MachineIndependent/SpirvIntrinsics.cpp",
      "glslang/MachineIndependent/SymbolTable.cpp",
      "glslang/MachineIndependent/SymbolTable.h",
      "glslang/MachineIndependent/Versions.cpp",
      "glslang/MachineIndependent/Versions.h",
      "glslang/MachineIndependent/attribute.cpp",
      "glslang/MachineIndependent/attribute.h",
      "glslang/MachineIndependent/gl_types.h",
      "glslang/MachineIndependent/glslang_tab.cpp",
      "glslang/MachineIndependent/glslang_tab.cpp.h",
      "glslang/MachineIndependent/intermOut.cpp",
      "glslang/MachineIndependent/iomapper.cpp",
      "glslang/MachineIndependent/iomapper.h",
      "glslang/MachineIndependent/limits.cpp",
      "glslang/MachineIndependent/linkValidate.cpp",
      "glslang/MachineIndependent/localintermediate.h",
      "glslang/MachineIndependent/parseConst.cpp",
      "glslang/MachineIndependent/parseVersions.h",
      "glslang/MachineIndependent/preprocessor/Pp.cpp",
      "glslang/MachineIndependent/preprocessor/PpAtom.cpp",
      "glslang/MachineIndependent/preprocessor/PpContext.cpp",
      "glslang/MachineIndependent/preprocessor/PpContext.h",
      "glslang/MachineIndependent/preprocessor/PpScanner.cpp",
      "glslang/MachineIndependent/preprocessor/PpTokens.cpp",
      "glslang/MachineIndependent/preprocessor/PpTokens.h",
      "glslang/MachineIndependent/propagateNoContraction.cpp",
      "glslang/MachineIndependent/propagateNoContraction.h",
      "glslang/MachineIndependent/reflection.cpp",
      "glslang/MachineIndependent/reflection.h",
      "glslang/OSDependent/osinclude.h",
      "glslang/Public/ShaderLang.h",
    ]

    # Workaround gn issue complaining about these not being allowed even though GLSLANG_HLSL is not
    # defined.
    sources += [
      "glslang/HLSL/hlslParseHelper.h",
      "glslang/HLSL/hlslParseables.h",
      "glslang/HLSL/hlslScanContext.h",
      "glslang/HLSL/hlslTokens.h",
    ]

    if (invoker.enable_hlsl) {
      sources += [
        "glslang/HLSL/hlslAttributes.cpp",
        "glslang/HLSL/hlslAttributes.h",
        "glslang/HLSL/hlslGrammar.cpp",
        "glslang/HLSL/hlslGrammar.h",
        "glslang/HLSL/hlslOpMap.cpp",
        "glslang/HLSL/hlslOpMap.h",
        "glslang/HLSL/hlslParseHelper.cpp",
        "glslang/HLSL/hlslParseables.cpp",
        "glslang/HLSL/hlslScanContext.cpp",
        "glslang/HLSL/hlslTokenStream.cpp",
        "glslang/HLSL/hlslTokenStream.h",
      ]
    }

    defines = [ "ENABLE_SPIRV=1" ]
    if (invoker.enable_opt) {
      sources += [ "SPIRV/SpvTools.cpp" ]
      defines += [ "ENABLE_OPT=1" ]
    }

    if (is_win) {
      sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
      defines += [ "GLSLANG_OSINCLUDE_WIN32" ]
    } else {
      sources += [ "glslang/OSDependent/Unix/ossource.cpp" ]
      defines += [ "GLSLANG_OSINCLUDE_UNIX" ]
    }

    if (is_clang) {
      cflags = [
        "-Wno-extra-semi",
        "-Wno-ignored-qualifiers",
        "-Wno-implicit-fallthrough",
        "-Wno-inconsistent-missing-override",
        "-Wno-missing-field-initializers",
        "-Wno-newline-eof",
        "-Wno-sign-compare",
        "-Wno-suggest-destructor-override",
        "-Wno-suggest-override",
        "-Wno-unused-variable",
      ]
    }
    if (is_win && !is_clang) {
      cflags = [
        "/wd4018",  # signed/unsigned mismatch
        "/wd4189",  # local variable is initialized but not referenced
      ]
    }

    include_dirs = [ "${target_gen_dir}/include" ]

    deps = [ ":glslang_build_info" ]

    if (invoker.enable_opt) {
      deps += [
        "${spirv_tools_dir}:spvtools_opt",
        "${spirv_tools_dir}:spvtools_val",
      ]
      include_dirs += [ "${spirv_tools_dir}/include" ]
    }

    configs -= _configs_to_remove
    configs += _configs_to_add
  }
}

glslang_sources_common("glslang_lib_sources") {
  enable_opt = true
  enable_hlsl = true
}

glslang_sources_common("glslang_sources") {
  enable_opt = true
  enable_hlsl = true
}

source_set("glslang_default_resource_limits_sources") {
  sources = [
    "glslang/ResourceLimits/ResourceLimits.cpp",
    "glslang/Public/ResourceLimits.h",
    "glslang/Include/ResourceLimits.h",
    "glslang/Include/visibility.h",
  ]
  public_configs = [ ":glslang_public" ]

  configs -= _configs_to_remove
  configs += _configs_to_add
}

executable("glslang_validator") {
  sources = [
    "StandAlone/DirStackFileIncluder.h",
    "StandAlone/StandAlone.cpp",
  ]
  if (!is_win) {
    cflags = [ "-Woverflow" ]
  }
  defines = [
    "ENABLE_OPT=1",
    "ENABLE_SPIRV=1",
  ]
  deps = [
    ":glslang_build_info",
    ":glslang_default_resource_limits_sources",
    ":glslang_sources",
    ":glslang_extension_headers",
  ]
  public_configs = [ ":glslang_hlsl" ]

  include_dirs = [
    "${target_gen_dir}/include",
    "${spirv_tools_dir}/include",
  ]

  configs -= _configs_to_remove
  configs += _configs_to_add
}

executable("spirv-remap") {
  sources = [ "StandAlone/spirv-remap.cpp" ]
  defines = [
    "ENABLE_OPT=1",
    "ENABLE_SPIRV=1",
  ]
  deps = [ ":glslang_sources" ]

  include_dirs = [ "${spirv_tools_dir}/include" ]

  configs -= _configs_to_remove
  configs += _configs_to_add
}
