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

# The GN build for Glslang.
# See the DEPS for usage instructions.

import("gn_scripts/glslang_overrides_with_defaults.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" ]
}

if (current_toolchain == default_toolchain) {
  if (defined(is_fuchsia_tree) && is_fuchsia_tree) {
    import("//build/git/git_revisions.gni")
  }

  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,
    ]
    if (defined(is_fuchsia_tree) && is_fuchsia_tree) {
      inputs += [ git_paths.glslang_head ]
    }
    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),
    ]
  }
} else {
  group("glslang_build_info") {
    public_deps = [ ":glslang_build_info($default_toolchain)" ]
  }
}

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/NonSemanticShaderDebugInfo.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.hpp11",
      "SPIRV/spvIR.h",
      "SPIRV/spvUtil.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/defer.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 = [ get_label_info(":glslang_build_info($default_toolchain)",
                                    "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 = glslang_enable_hlsl
}

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

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",
  ]
  if (glslang_enable_hlsl) {
    public_configs = [ ":glslang_hlsl" ]
  }

  include_dirs = [
    get_label_info(":glslang_build_info($default_toolchain)",
                   "target_gen_dir") + "/include",
    "${spirv_tools_dir}/include",
  ]

  configs -= _configs_to_remove
  configs += _configs_to_add
}
