| # Copyright 2018 The ANGLE Project Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("../../gni/angle.gni") |
| |
| vulkan_gen_dir = "$target_gen_dir/angle/vulkan" |
| raw_vulkan_gen_dir = rebase_path(vulkan_gen_dir, root_build_dir) |
| |
| # SPIRV-tools |
| # ----------- |
| |
| spirv_tools_dir = "$third_party_dir/spirv-tools-angle/src" |
| spirv_source_dir = "$spirv_tools_dir/source" |
| spirv_headers_dir = "$third_party_dir/spirv-headers/src" |
| spirv_include_dir = "$spirv_headers_dir/include/spirv" |
| raw_spirv_source_dir = rebase_path(spirv_source_dir, root_build_dir) |
| raw_spirv_headers_dir = rebase_path(spirv_headers_dir, root_build_dir) |
| raw_spirv_include_dir = rebase_path(spirv_include_dir, root_build_dir) |
| |
| grammar_processing_script = "$spirv_tools_dir/utils/generate_grammar_tables.py" |
| |
| action("spirv_tools_gen_enum_string_mapping") { |
| script = grammar_processing_script |
| sources = [ |
| "$spirv_include_dir/1.2/spirv.core.grammar.json", |
| ] |
| outputs = [ |
| "$vulkan_gen_dir/extension_enum.inc", |
| "$vulkan_gen_dir/enum_string_mapping.inc", |
| ] |
| args = [ |
| "--spirv-core-grammar=$raw_spirv_include_dir/1.2/spirv.core.grammar.json", |
| "--extension-enum-output=$raw_vulkan_gen_dir/extension_enum.inc", |
| "--enum-string-mapping-output=$raw_vulkan_gen_dir/enum_string_mapping.inc", |
| ] |
| } |
| |
| spvtools_core_tables = [ |
| "1.0", |
| "1.1", |
| "1.2", |
| ] |
| |
| foreach(version, spvtools_core_tables) { |
| action("spirv_tools_gen_core_tables_" + version) { |
| script = grammar_processing_script |
| sources = [ |
| "$spirv_include_dir/$version/spirv.core.grammar.json", |
| ] |
| outputs = [ |
| "$vulkan_gen_dir/core.insts-$version.inc", |
| "$vulkan_gen_dir/operand.kinds-$version.inc", |
| ] |
| args = [ |
| "--spirv-core-grammar=$raw_spirv_include_dir/$version/spirv.core.grammar.json", |
| "--core-insts-output=$raw_vulkan_gen_dir/core.insts-$version.inc", |
| "--operand-kinds-output=$raw_vulkan_gen_dir/operand.kinds-$version.inc", |
| ] |
| } |
| } |
| |
| action("spirv_tools_gen_glsl_tables") { |
| script = grammar_processing_script |
| sources = [ |
| "$spirv_include_dir/1.0/extinst.glsl.std.450.grammar.json", |
| "$spirv_include_dir/1.0/spirv.core.grammar.json", |
| ] |
| outputs = [ |
| "$vulkan_gen_dir/glsl.std.450.insts-1.0.inc", |
| ] |
| args = [ |
| "--spirv-core-grammar=$raw_spirv_include_dir/1.0/spirv.core.grammar.json", |
| "--extinst-glsl-grammar=$raw_spirv_include_dir/1.0/extinst.glsl.std.450.grammar.json", |
| "--glsl-insts-output=$raw_vulkan_gen_dir/glsl.std.450.insts-1.0.inc", |
| ] |
| } |
| |
| action("spirv_tools_gen_opencl_tables") { |
| script = grammar_processing_script |
| sources = [ |
| "$spirv_include_dir/1.0/extinst.opencl.std.100.grammar.json", |
| "$spirv_include_dir/1.0/spirv.core.grammar.json", |
| ] |
| outputs = [ |
| "$vulkan_gen_dir/opencl.std.insts-1.0.inc", |
| ] |
| args = [ |
| "--spirv-core-grammar=$raw_spirv_include_dir/1.0/spirv.core.grammar.json", |
| "--extinst-opencl-grammar=$raw_spirv_include_dir/1.0/extinst.opencl.std.100.grammar.json", |
| "--opencl-insts-output=$raw_vulkan_gen_dir/opencl.std.insts-1.0.inc", |
| ] |
| } |
| |
| action("spirv_tools_gen_generators_inc") { |
| script = "$spirv_tools_dir/utils/generate_registry_tables.py" |
| sources = [ |
| "$spirv_headers_dir/include/spirv/spir-v.xml", |
| ] |
| outputs = [ |
| "$vulkan_gen_dir/generators.inc", |
| ] |
| args = [ |
| "--xml=$raw_spirv_headers_dir/include/spirv/spir-v.xml", |
| "--generator-output=$raw_vulkan_gen_dir/generators.inc", |
| ] |
| } |
| |
| spvtools_vendor_tables = [ |
| "spv-amd-shader-explicit-vertex-parameter", |
| "spv-amd-shader-trinary-minmax", |
| "spv-amd-gcn-shader", |
| "spv-amd-shader-ballot", |
| ] |
| |
| foreach(target_name, spvtools_vendor_tables) { |
| insts_file = "$target_name.insts.inc" |
| grammar_file = "extinst.$target_name.grammar.json" |
| |
| action(target_name) { |
| script = grammar_processing_script |
| |
| sources = [ |
| "$spirv_source_dir/$grammar_file", |
| ] |
| |
| outputs = [ |
| "$vulkan_gen_dir/$insts_file", |
| ] |
| |
| args = [ |
| "--extinst-vendor-grammar=$raw_spirv_source_dir/$grammar_file", |
| "--vendor-insts-output=$raw_vulkan_gen_dir/$insts_file", |
| ] |
| } |
| } |
| |
| config("spirv_tools_config") { |
| include_dirs = [ "$spirv_tools_dir/include" ] |
| if (is_win) { |
| cflags = [ |
| "/wd4706", |
| |
| # These are triggered in higher optimization levels. Disable for now until |
| # fixes are landed upstream. See https://crbug.com/677837. |
| "/wd4701", |
| "/wd4703", |
| ] |
| } |
| } |
| config("spirv_tools_internal_config") { |
| if (is_clang) { |
| # TODO(thakis): Consider enabling this, https://crbug.com/807632 |
| cflags = [ "-Wno-implicit-fallthrough" ] |
| } |
| } |
| |
| static_library("spirv_tools") { |
| deps = [ |
| ":spirv_tools_gen_core_tables_1.0", |
| ":spirv_tools_gen_core_tables_1.1", |
| ":spirv_tools_gen_core_tables_1.2", |
| ":spirv_tools_gen_enum_string_mapping", |
| ":spirv_tools_gen_generators_inc", |
| ":spirv_tools_gen_glsl_tables", |
| ":spirv_tools_gen_opencl_tables", |
| ] |
| include_dirs = [ |
| vulkan_gen_dir, |
| "$spirv_headers_dir/include", |
| "$spirv_tools_dir/source", |
| ] |
| sources = [ |
| "$spirv_tools_dir/source/assembly_grammar.cpp", |
| "$spirv_tools_dir/source/assembly_grammar.h", |
| "$spirv_tools_dir/source/binary.cpp", |
| "$spirv_tools_dir/source/binary.h", |
| "$spirv_tools_dir/source/diagnostic.cpp", |
| "$spirv_tools_dir/source/diagnostic.h", |
| "$spirv_tools_dir/source/disassemble.cpp", |
| "$spirv_tools_dir/source/enum_set.h", |
| "$spirv_tools_dir/source/ext_inst.cpp", |
| "$spirv_tools_dir/source/ext_inst.h", |
| "$spirv_tools_dir/source/instruction.h", |
| "$spirv_tools_dir/source/libspirv.cpp", |
| "$spirv_tools_dir/source/macro.h", |
| "$spirv_tools_dir/source/message.cpp", |
| "$spirv_tools_dir/source/name_mapper.cpp", |
| "$spirv_tools_dir/source/name_mapper.h", |
| "$spirv_tools_dir/source/opcode.cpp", |
| "$spirv_tools_dir/source/opcode.h", |
| "$spirv_tools_dir/source/operand.cpp", |
| "$spirv_tools_dir/source/operand.h", |
| "$spirv_tools_dir/source/parsed_operand.cpp", |
| "$spirv_tools_dir/source/parsed_operand.h", |
| "$spirv_tools_dir/source/print.cpp", |
| "$spirv_tools_dir/source/print.h", |
| |
| # TODO(jmadill): Determine if this is ever needed. |
| #"$spirv_tools_dir/source/software_version.cpp", |
| "$spirv_tools_dir/source/enum_string_mapping.cpp", |
| "$spirv_tools_dir/source/extensions.cpp", |
| "$spirv_tools_dir/source/extensions.h", |
| "$spirv_tools_dir/source/spirv_constant.h", |
| "$spirv_tools_dir/source/spirv_definition.h", |
| "$spirv_tools_dir/source/spirv_endian.cpp", |
| "$spirv_tools_dir/source/spirv_endian.h", |
| "$spirv_tools_dir/source/spirv_target_env.cpp", |
| "$spirv_tools_dir/source/spirv_target_env.h", |
| "$spirv_tools_dir/source/spirv_validator_options.cpp", |
| "$spirv_tools_dir/source/spirv_validator_options.h", |
| "$spirv_tools_dir/source/table.cpp", |
| "$spirv_tools_dir/source/table.h", |
| "$spirv_tools_dir/source/text.cpp", |
| "$spirv_tools_dir/source/text.h", |
| "$spirv_tools_dir/source/text_handler.cpp", |
| "$spirv_tools_dir/source/text_handler.h", |
| "$spirv_tools_dir/source/util/bitutils.h", |
| "$spirv_tools_dir/source/util/hex_float.h", |
| "$spirv_tools_dir/source/util/parse_number.cpp", |
| "$spirv_tools_dir/source/util/parse_number.h", |
| "$spirv_tools_dir/source/util/string_utils.cpp", |
| "$spirv_tools_dir/source/util/string_utils.h", |
| "$spirv_tools_dir/source/val/basic_block.cpp", |
| "$spirv_tools_dir/source/val/construct.cpp", |
| "$spirv_tools_dir/source/val/function.cpp", |
| "$spirv_tools_dir/source/val/instruction.cpp", |
| "$spirv_tools_dir/source/val/validation_state.cpp", |
| "$spirv_tools_dir/source/validate.cpp", |
| "$spirv_tools_dir/source/validate.h", |
| "$spirv_tools_dir/source/validate_arithmetics.cpp", |
| "$spirv_tools_dir/source/validate_bitwise.cpp", |
| "$spirv_tools_dir/source/validate_capability.cpp", |
| "$spirv_tools_dir/source/validate_cfg.cpp", |
| "$spirv_tools_dir/source/validate_conversion.cpp", |
| "$spirv_tools_dir/source/validate_datarules.cpp", |
| "$spirv_tools_dir/source/validate_decorations.cpp", |
| "$spirv_tools_dir/source/validate_derivatives.cpp", |
| "$spirv_tools_dir/source/validate_id.cpp", |
| "$spirv_tools_dir/source/validate_image.cpp", |
| "$spirv_tools_dir/source/validate_instruction.cpp", |
| "$spirv_tools_dir/source/validate_layout.cpp", |
| "$spirv_tools_dir/source/validate_logicals.cpp", |
| "$spirv_tools_dir/source/validate_type_unique.cpp", |
| ] |
| public_configs = [ ":spirv_tools_config" ] |
| configs += [ ":spirv_tools_internal_config" ] |
| |
| foreach(target_name, spvtools_vendor_tables) { |
| deps += [ ":$target_name" ] |
| } |
| } |