# Copyright 2020 Google LLC.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

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

glslang_root = "../externals/glslang"

spirv_tools_dir = glslang_spirv_tools_dir

third_party("glslang_sources") {
  public_include_dirs = [ "$glslang_root" ]
  public_defines = [ "ENABLE_HLSL=1" ]

  sources =
      rebase_path([
                    "OGLCompilersDLL/InitializeDll.cpp",
                    "OGLCompilersDLL/InitializeDll.h",
                    "SPIRV/GLSL.ext.AMD.h",
                    "SPIRV/GLSL.ext.EXT.h",
                    "SPIRV/GLSL.ext.KHR.h",
                    "SPIRV/GLSL.ext.NV.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/SPVRemapper.cpp",
                    "SPIRV/SPVRemapper.h",
                    "SPIRV/SpvBuilder.cpp",
                    "SPIRV/SpvBuilder.h",
                    "SPIRV/SpvPostProcess.cpp",
                    "SPIRV/SpvTools.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/Types.h",
                    "glslang/Include/arrays.h",
                    "glslang/Include/intermediate.h",
                    "glslang/Include/revision.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/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",
                    "hlsl/hlslAttributes.cpp",
                    "hlsl/hlslAttributes.h",
                    "hlsl/hlslGrammar.cpp",
                    "hlsl/hlslGrammar.h",
                    "hlsl/hlslOpMap.cpp",
                    "hlsl/hlslOpMap.h",
                    "hlsl/hlslParseHelper.cpp",
                    "hlsl/hlslParseHelper.h",
                    "hlsl/hlslParseables.cpp",
                    "hlsl/hlslParseables.h",
                    "hlsl/hlslScanContext.cpp",
                    "hlsl/hlslScanContext.h",
                    "hlsl/hlslTokenStream.cpp",
                    "hlsl/hlslTokenStream.h",
                    "hlsl/hlslTokens.h",
                  ],
                  ".",
                  "$glslang_root")

  defines = [ "ENABLE_OPT=1" ]

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

  deps = [
    "${spirv_tools_dir}:spvtools_val",
  ]
}
