Merge pull request #3011 from hbatagelo/fix_type_punning_ub
[platform/upstream/glslang.git] / BUILD.gn
index 4743753..4dd0a55 100644 (file)
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -46,6 +46,55 @@ if (defined(is_fuchsia_tree) && is_fuchsia_tree) {
   _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
 if (!defined(glslang_angle)) {
   glslang_angle = false
@@ -53,6 +102,9 @@ if (!defined(glslang_angle)) {
 
 config("glslang_public") {
   include_dirs = [ "." ]
+  if (!is_win || is_clang) {
+    cflags = [ "-Wno-conversion" ]
+  }
 }
 
 config("glslang_hlsl") {
@@ -86,7 +138,6 @@ template("glslang_sources_common") {
       "SPIRV/SpvBuilder.cpp",
       "SPIRV/SpvBuilder.h",
       "SPIRV/SpvPostProcess.cpp",
-      "SPIRV/SpvTools.cpp",
       "SPIRV/SpvTools.h",
       "SPIRV/bitutils.h",
       "SPIRV/disassemble.cpp",
@@ -106,10 +157,10 @@ template("glslang_sources_common") {
       "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/revision.h",
       "glslang/MachineIndependent/Constant.cpp",
       "glslang/MachineIndependent/InfoSink.cpp",
       "glslang/MachineIndependent/Initialize.cpp",
@@ -127,6 +178,7 @@ template("glslang_sources_common") {
       "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",
@@ -186,8 +238,12 @@ template("glslang_sources_common") {
 
     defines = []
     if (invoker.enable_opt) {
+      sources += [ "SPIRV/SpvTools.cpp" ]
       defines += [ "ENABLE_OPT=1" ]
     }
+    if (invoker.is_angle) {
+      defines += [ "GLSLANG_ANGLE" ]
+    }
 
     if (is_win) {
       sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
@@ -203,10 +259,12 @@ template("glslang_sources_common") {
         "-Wno-ignored-qualifiers",
         "-Wno-implicit-fallthrough",
         "-Wno-inconsistent-missing-override",
-        "-Wno-sign-compare",
-        "-Wno-unused-variable",
         "-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) {
@@ -216,11 +274,16 @@ template("glslang_sources_common") {
       ]
     }
 
+    include_dirs = [ "${target_gen_dir}/include" ]
+
+    deps = [ ":glslang_build_info" ]
+
     if (invoker.enable_opt) {
-      deps = [
+      deps += [
         "${spirv_tools_dir}:spvtools_opt",
         "${spirv_tools_dir}:spvtools_val",
       ]
+      include_dirs += [ "${spirv_tools_dir}/include" ]
     }
 
     configs -= _configs_to_remove
@@ -231,11 +294,13 @@ template("glslang_sources_common") {
 glslang_sources_common("glslang_lib_sources") {
   enable_opt = !glslang_angle
   enable_hlsl = !glslang_angle
+  is_angle = glslang_angle
 }
 
 glslang_sources_common("glslang_sources") {
   enable_opt = true
   enable_hlsl = true
+  is_angle = false
 }
 
 source_set("glslang_default_resource_limits_sources") {
@@ -260,11 +325,18 @@ executable("glslang_validator") {
   }
   defines = [ "ENABLE_OPT=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
 }
@@ -274,6 +346,8 @@ executable("spirv-remap") {
   defines = [ "ENABLE_OPT=1" ]
   deps = [ ":glslang_sources" ]
 
+  include_dirs = [ "${spirv_tools_dir}/include" ]
+
   configs -= _configs_to_remove
   configs += _configs_to_add
 }