//
// Copyright (C) 2018 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

// SPIRV Tools

// genrules were obtained from the CMake build:
// $ cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Debug
// $ ninja -v -j 1 >log.log
// Find Python invocations.
// Use regex replacements to get "cmd:" lines below.

genrule {
    name: "swiftshader_spvtools_generate_grammar_tables",
    out: [
        "core.insts-unified1.inc",
        "debuginfo.insts.inc",
        "enum_string_mapping.inc",
        "extension_enum.inc",
        "glsl.std.450.insts.inc",
        "opencl.debuginfo.100.insts.inc",
        "opencl.std.insts.inc",
        "operand.kinds-unified1.inc",
        "spv-amd-gcn-shader.insts.inc",
        "spv-amd-shader-ballot.insts.inc",
        "spv-amd-shader-explicit-vertex-parameter.insts.inc",
        "spv-amd-shader-trinary-minmax.insts.inc",
    ],
    srcs: [
        ":swiftshader_spirv_headers_unified1_extinst.glsl.std.450.grammar.json",
        ":swiftshader_spirv_headers_unified1_extinst.opencl.std.100.grammar.json",
        ":swiftshader_spirv_headers_unified1_spirv.core.grammar.json",
        "source/extinst.debuginfo.grammar.json",
        "source/extinst.opencl.debuginfo.100.grammar.json",
        "source/extinst.spv-amd-gcn-shader.grammar.json",
        "source/extinst.spv-amd-shader-ballot.grammar.json",
        "source/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json",
        "source/extinst.spv-amd-shader-trinary-minmax.grammar.json",
    ],
    tool_files: ["utils/generate_grammar_tables.py"],
    cmd:
        "$(location) --extinst-vendor-grammar=$(location source/extinst.spv-amd-gcn-shader.grammar.json) --vendor-insts-output=$(location spv-amd-gcn-shader.insts.inc) --vendor-operand-kind-prefix=; "+
        "$(location) --spirv-core-grammar=$(location :swiftshader_spirv_headers_unified1_spirv.core.grammar.json) --extinst-debuginfo-grammar=$(location source/extinst.debuginfo.grammar.json) --extinst-cldebuginfo100-grammar=$(location source/extinst.opencl.debuginfo.100.grammar.json) --core-insts-output=$(location core.insts-unified1.inc) --operand-kinds-output=$(location operand.kinds-unified1.inc); "+
        "$(location) --extinst-vendor-grammar=$(location source/extinst.debuginfo.grammar.json) --vendor-insts-output=$(location debuginfo.insts.inc) --vendor-operand-kind-prefix=; "+
        "$(location) --extinst-vendor-grammar=$(location source/extinst.spv-amd-shader-ballot.grammar.json) --vendor-insts-output=$(location spv-amd-shader-ballot.insts.inc) --vendor-operand-kind-prefix=; "+
        "$(location) --extinst-vendor-grammar=$(location source/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json) --vendor-insts-output=$(location spv-amd-shader-explicit-vertex-parameter.insts.inc) --vendor-operand-kind-prefix=; "+
        "$(location) --extinst-vendor-grammar=$(location source/extinst.spv-amd-shader-trinary-minmax.grammar.json) --vendor-insts-output=$(location spv-amd-shader-trinary-minmax.insts.inc) --vendor-operand-kind-prefix=; "+
        "$(location) --extinst-vendor-grammar=$(location source/extinst.opencl.debuginfo.100.grammar.json) --vendor-insts-output=$(location opencl.debuginfo.100.insts.inc) --vendor-operand-kind-prefix=CLDEBUG100_; "+
        "$(location) --spirv-core-grammar=$(location :swiftshader_spirv_headers_unified1_spirv.core.grammar.json) --extinst-debuginfo-grammar=$(location source/extinst.debuginfo.grammar.json) --extinst-cldebuginfo100-grammar=$(location source/extinst.opencl.debuginfo.100.grammar.json) --extension-enum-output=$(location extension_enum.inc) --enum-string-mapping-output=$(location enum_string_mapping.inc); "+
        "$(location) --extinst-opencl-grammar=$(location :swiftshader_spirv_headers_unified1_extinst.opencl.std.100.grammar.json) --opencl-insts-output=$(location opencl.std.insts.inc); "+
        "$(location) --extinst-glsl-grammar=$(location :swiftshader_spirv_headers_unified1_extinst.glsl.std.450.grammar.json) --glsl-insts-output=$(location glsl.std.450.insts.inc); "
}


genrule {
    name: "swiftshader_spvtools_generate_language_headers",
    out: [
        "DebugInfo.h",
        "OpenCLDebugInfo100.h",
    ],
    srcs: [
        "source/extinst.debuginfo.grammar.json",
        "source/extinst.opencl.debuginfo.100.grammar.json",
    ],
    tool_files: ["utils/generate_language_headers.py"],
    cmd: 
        "$(location) --extinst-grammar=$(location source/extinst.debuginfo.grammar.json) --extinst-output-path=$(location DebugInfo.h); "+
        "$(location) --extinst-grammar=$(location source/extinst.opencl.debuginfo.100.grammar.json) --extinst-output-path=$(location OpenCLDebugInfo100.h); "
}

genrule {
    name: "swiftshader_spvtools_generate_registry_tables",
    out: [
        "generators.inc"
    ],
    srcs: [
        ":swiftshader_spirv_headers_spir-v.xml"
    ],
    tool_files: ["utils/generate_registry_tables.py"],
    cmd: "$(location) --xml=$(location :swiftshader_spirv_headers_spir-v.xml) --generator-output=$(location generators.inc)",
}

genrule { // FIXME this relies on `git` which is no good on build machines
    name: "swiftshader_spvtools_update_build_version",
    out: ["build-version.inc"],
    srcs: ["CHANGES"],
    tool_files: ["utils/update_build_version.py"],
    cmd: "$(location) $$(dirname $(location CHANGES)) " +
         "$(location build-version.inc)",
}

cc_library_static {
    name: "swiftshader_spirv-tools",
    vendor_available: true,
    srcs: [
        "source/*.cpp",
        "source/util/*.cpp",
        "source/val/*.cpp",
        "source/opt/*.cpp",
    ],
    local_include_dirs: [
        "source",
    ],
    export_include_dirs: [
        "include",
    ],
    include_dirs: [
        "external/swiftshader/third_party/SPIRV-Headers/include"
    ],
    generated_headers: [
        "swiftshader_spvtools_generate_grammar_tables",
        "swiftshader_spvtools_generate_language_headers",
        "swiftshader_spvtools_update_build_version",
        "swiftshader_spvtools_generate_registry_tables",
    ],
    stl: "libc++_static",
    cppflags: [
        "-Wno-implicit-fallthrough"
    ],
}
