blob: c56fe99eb58f670caae90a8383bdf7511f890c3b [file] [log] [blame]
# 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" ]
}
}