Compilation files for Android

Bug: b/122837488
Change-Id: I45fce8c0b6ef9f6a42f1d3745d7a0434dd08832e
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/28231
Tested-by: Chris Forbes <chrisforbes@google.com>
Presubmit-Ready: Chris Forbes <chrisforbes@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/Android.bp b/Android.bp
index b81c37c..be71dcc 100644
--- a/Android.bp
+++ b/Android.bp
@@ -101,6 +101,13 @@
     export_include_dirs: ["include/Android"],
 }
 
+cc_library_headers {
+    name: "swiftshadervk_platform_headers",
+    vendor: true,
+    device_supported: true,
+    export_include_dirs: ["include"],
+}
+
 subdirs = [
     "src",
     "third_party/llvm-subzero",
diff --git a/src/Android.bp b/src/Android.bp
index 368087b..f1d5e6f 100644
--- a/src/Android.bp
+++ b/src/Android.bp
@@ -533,3 +533,166 @@
 
     static_libs: [ "libswiftshader_compiler_debug" ],
 }
+
+
+
+// Vulkan
+
+cc_defaults {
+    name: "libvk_swiftshader",
+
+    device_supported: true,
+    host_supported: true,
+    vendor: true,
+
+    defaults: [ "swiftshader_common" ],
+
+    cflags: [
+        "-D_GNU_SOURCE",
+        "-D__STDC_LIMIT_MACROS",
+        "-D__STDC_CONSTANT_MACROS",
+        "-D__STDC_FORMAT_MACROS",
+        "-DHAVE_GRALLOC1",
+        "-DNO_SANITIZE_FUNCTION=",
+        // FIXME: Use <android/api-level.h> instead?
+        "-DANDROID_PLATFORM_SDK_VERSION=10000",
+        "-Wno-implicit-fallthrough",
+        "-Wno-unused-parameter",
+        "-Wno-unused-local-typedef",
+    ],
+
+    cppflags: [
+        "-Wno-sign-promo",
+        "-Wno-non-virtual-dtor",
+    ],
+
+    local_include_dirs: [ "Vulkan" ],
+
+    target: {
+        android: {
+            relative_install_path: "hw",
+            header_libs: [
+                "swiftshadervk_platform_headers",
+            ],
+            shared_libs: [
+                "libnativewindow",
+                "libhardware",
+                "libcutils",
+                "libsync",
+                "liblog",
+            ],
+        },
+        android_arm64: {
+            enabled: false,
+        }
+    },
+}
+
+cc_defaults {
+    name: "libvk_swiftshader_common_defaults",
+
+    cflags: [
+        "-DLOG_TAG=\"swiftshader\"",
+    ],
+
+    srcs: [
+        "Common/CPUID.cpp",
+        "Common/Configurator.cpp",
+        "Common/Half.cpp",
+        "Common/Math.cpp",
+        "Common/Memory.cpp",
+        "Common/Resource.cpp",
+        "Common/Socket.cpp",
+        "Common/Thread.cpp",
+        "Common/Timer.cpp",
+        "Device/Blitter.cpp",
+        "Device/Clipper.cpp",
+        "Device/Color.cpp",
+        "Device/Config.cpp",
+        "Device/Context.cpp",
+        "Device/ETC_Decoder.cpp",
+        "Device/Matrix.cpp",
+        "Device/PixelProcessor.cpp",
+        "Device/Plane.cpp",
+        "Device/Point.cpp",
+        "Device/QuadRasterizer.cpp",
+        "Device/Renderer.cpp",
+        "Device/Sampler.cpp",
+        "Device/SetupProcessor.cpp",
+        "Device/SwiftConfig.cpp",
+        "Device/Vector.cpp",
+        "Device/VertexProcessor.cpp",
+        "Pipeline/ComputeProgram.cpp",
+        "Pipeline/Constants.cpp",
+        "Pipeline/PixelProgram.cpp",
+        "Pipeline/PixelRoutine.cpp",
+        "Pipeline/SamplerCore.cpp",
+        "Pipeline/SetupRoutine.cpp",
+        "Pipeline/ShaderCore.cpp",
+        "Pipeline/SpirvShader.cpp",
+        "Pipeline/SpirvShader_dbg.cpp",
+        "Pipeline/VertexProgram.cpp",
+        "Pipeline/VertexRoutine.cpp",
+    ],
+
+    include_dirs: [
+        "external/swiftshader/third_party/SPIRV-Headers/include",
+        "external/swiftshader/include"
+    ],
+}
+
+cc_defaults {
+    name: "libvk_swiftshader_debug_default",
+
+    defaults: [ "libvk_swiftshader" ],
+
+    cflags: [
+        "-UNDEBUG",
+        "-g",
+        "-O0",
+        "-DDEFAULT_THREAD_COUNT=1",
+    ],
+}
+
+cc_defaults {
+    name: "swiftshadervk_client_libraries_subzero_or_llvm_debug",
+
+    defaults: [ "libvk_swiftshader_debug_default" ],
+
+    target: {
+        android_arm: {
+            static_libs: [
+                "libswiftshader_subzero_debug",
+                "libsubzero",
+                "libLLVMSupport_subzero",
+            ],
+        },
+
+        android: {
+            static_libs: [
+                "libswiftshader_llvm_debug",
+                "libLLVM_swiftshader",
+            ],
+        },
+
+        host: {
+            static_libs: [
+                "libswiftshader_llvm_debug",
+                "libLLVM_swiftshader",
+            ],
+        },
+    },
+}
+
+cc_library_shared {
+    name: "libvk_swiftshader_debug",
+
+    device_supported: true,
+
+
+    defaults: [
+        "swiftshadervk_client_libraries_subzero_or_llvm_debug",
+        "libvk_swiftshader_common_defaults",
+        "libvk_swiftshader"
+    ],
+}
\ No newline at end of file
diff --git a/third_party/SPIRV-Headers/Android.bp b/third_party/SPIRV-Headers/Android.bp
new file mode 100644
index 0000000..96b7faa
--- /dev/null
+++ b/third_party/SPIRV-Headers/Android.bp
@@ -0,0 +1,34 @@
+filegroup {
+    name: "swiftshader_spirv.core.grammar.json-1.0",
+    srcs: ["include/spirv/1.0/spirv.core.grammar.json"],
+}
+
+filegroup {
+    name: "swiftshader_spirv.core.grammar.json-1.1",
+    srcs: ["include/spirv/1.1/spirv.core.grammar.json"],
+}
+
+filegroup {
+    name: "swiftshader_spirv.core.grammar.json-1.2",
+    srcs: ["include/spirv/1.2/spirv.core.grammar.json"],
+}
+
+filegroup {
+    name: "swiftshader_spirv.core.grammar.json-unified1",
+    srcs: ["include/spirv/unified1/spirv.core.grammar.json"],
+}
+
+filegroup {
+    name: "swiftshader_spirv.glsl.grammar.json",
+    srcs: ["include/spirv/1.2/extinst.glsl.std.450.grammar.json"],
+}
+
+filegroup {
+    name: "swiftshader_spirv.opencl.grammar.json",
+    srcs: ["include/spirv/1.2/extinst.opencl.std.100.grammar.json"],
+}
+
+filegroup {
+    name: "swiftshader_spirv.registry.xml",
+    srcs: ["include/spirv/spir-v.xml"],
+}
diff --git a/third_party/SPIRV-Tools/Android.bp b/third_party/SPIRV-Tools/Android.bp
new file mode 100644
index 0000000..2231425
--- /dev/null
+++ b/third_party/SPIRV-Tools/Android.bp
@@ -0,0 +1,254 @@
+//
+// 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
+
+filegroup {
+    name: "swiftshader_spirv.debuginfo.grammar.json",
+    srcs: ["source/extinst.debuginfo.grammar.json"],
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_grammar_tables_1.0",
+    out: [
+        "core.insts-1.0.inc",
+        "operand.kinds-1.0.inc",
+        "glsl.std.450.insts.inc",
+        "opencl.std.insts.inc",
+    ],
+    srcs: [
+        ":swiftshader_spirv.core.grammar.json-1.0",
+        ":swiftshader_spirv.glsl.grammar.json",
+        ":swiftshader_spirv.opencl.grammar.json",
+        ":swiftshader_spirv.debuginfo.grammar.json",
+    ],
+    tool_files: ["utils/generate_grammar_tables.py"],
+    cmd: "$(location) --spirv-core-grammar=$(location :swiftshader_spirv.core.grammar.json-1.0) "+
+         "--extinst-glsl-grammar=$(location :swiftshader_spirv.glsl.grammar.json) "+
+         "--extinst-opencl-grammar=$(location :swiftshader_spirv.opencl.grammar.json) "+
+         "--extinst-debuginfo-grammar=$(location :swiftshader_spirv.debuginfo.grammar.json) "+
+         "--core-insts-output=$(location core.insts-1.0.inc) "+
+         "--glsl-insts-output=$(location glsl.std.450.insts.inc) "+
+         "--opencl-insts-output=$(location opencl.std.insts.inc) "+
+         "--operand-kinds-output=$(location operand.kinds-1.0.inc)",
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_grammar_tables_1.1",
+    out: [
+        "core.insts-1.1.inc",
+        "operand.kinds-1.1.inc",
+    ],
+    srcs: [
+        ":swiftshader_spirv.core.grammar.json-1.1",
+        ":swiftshader_spirv.debuginfo.grammar.json",
+    ],
+    tool_files: ["utils/generate_grammar_tables.py"],
+    cmd: "$(location) --spirv-core-grammar=$(location :swiftshader_spirv.core.grammar.json-1.1) "+
+         "--extinst-debuginfo-grammar=$(location :swiftshader_spirv.debuginfo.grammar.json) "+
+         "--core-insts-output=$(location core.insts-1.1.inc) "+
+         "--operand-kinds-output=$(location operand.kinds-1.1.inc)",
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_grammar_tables_1.2",
+    out: [
+        "core.insts-1.2.inc",
+        "operand.kinds-1.2.inc",
+    ],
+    srcs: [
+        ":swiftshader_spirv.core.grammar.json-1.2",
+        ":swiftshader_spirv.debuginfo.grammar.json",
+    ],
+    tool_files: ["utils/generate_grammar_tables.py"],
+    cmd: "$(location) --spirv-core-grammar=$(location :swiftshader_spirv.core.grammar.json-1.2) "+
+         "--extinst-debuginfo-grammar=$(location :swiftshader_spirv.debuginfo.grammar.json) "+
+         "--core-insts-output=$(location core.insts-1.2.inc) "+
+         "--operand-kinds-output=$(location operand.kinds-1.2.inc)",
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_grammar_tables_unified1",
+    out: [
+        "core.insts-unified1.inc",
+        "operand.kinds-unified1.inc",
+    ],
+    srcs: [
+        ":swiftshader_spirv.core.grammar.json-unified1",
+        ":swiftshader_spirv.debuginfo.grammar.json",
+    ],
+    tool_files: ["utils/generate_grammar_tables.py"],
+    cmd: "$(location) --spirv-core-grammar=$(location :swiftshader_spirv.core.grammar.json-unified1) "+
+         "--extinst-debuginfo-grammar=$(location :swiftshader_spirv.debuginfo.grammar.json) "+
+         "--core-insts-output=$(location core.insts-unified1.inc) "+
+         "--operand-kinds-output=$(location operand.kinds-unified1.inc)",
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_grammar_tables_debuginfo",
+    out: [
+        "debuginfo.insts.inc",
+    ],
+    srcs: [
+        ":swiftshader_spirv.debuginfo.grammar.json",
+    ],
+    tool_files: ["utils/generate_grammar_tables.py"],
+    cmd: "$(location) --extinst-vendor-grammar=$(in) "+
+         "--vendor-insts-output=$(out)"
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_grammar_tables_amd-gcn-shader",
+    out: [
+        "spv-amd-gcn-shader.insts.inc",
+    ],
+    srcs: [
+        "source/extinst.spv-amd-gcn-shader.grammar.json",
+    ],
+    tool_files: ["utils/generate_grammar_tables.py"],
+    cmd: "$(location) --extinst-vendor-grammar=$(in) "+
+         "--vendor-insts-output=$(out)"
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_grammar_tables_amd-shader-ballot",
+    out: [
+        "spv-amd-shader-ballot.insts.inc",
+    ],
+    srcs: [
+        "source/extinst.spv-amd-shader-ballot.grammar.json",
+    ],
+    tool_files: ["utils/generate_grammar_tables.py"],
+    cmd: "$(location) --extinst-vendor-grammar=$(in) "+
+         "--vendor-insts-output=$(out)"
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_grammar_tables_amd-shader-explicit-vertex-parameter",
+    out: [
+        "spv-amd-shader-explicit-vertex-parameter.insts.inc",
+    ],
+    srcs: [
+        "source/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json",
+    ],
+    tool_files: ["utils/generate_grammar_tables.py"],
+    cmd: "$(location) --extinst-vendor-grammar=$(in) "+
+         "--vendor-insts-output=$(out)"
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_grammar_tables_amd-shader-trinary-minmax",
+    out: [
+        "spv-amd-shader-trinary-minmax.insts.inc",
+    ],
+    srcs: [
+        "source/extinst.spv-amd-shader-trinary-minmax.grammar.json",
+    ],
+    tool_files: ["utils/generate_grammar_tables.py"],
+    cmd: "$(location) --extinst-vendor-grammar=$(in) "+
+         "--vendor-insts-output=$(out)"
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_lang_headers",
+    out: [
+        "DebugInfo.h",
+    ],
+    srcs: [
+        ":swiftshader_spirv.debuginfo.grammar.json",
+    ],
+    tool_files: ["utils/generate_language_headers.py"],
+    cmd: "$(location) --extinst-name=DebugInfo "+
+         "--extinst-grammar=$(location :swiftshader_spirv.debuginfo.grammar.json) "+
+         "--extinst-output-base=$$(dirname $(location DebugInfo.h))/DebugInfo",
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_enum_string_mapping",
+    out: [
+        "extension_enum.inc",
+        "enum_string_mapping.inc",
+    ],
+    srcs: [
+        ":swiftshader_spirv.core.grammar.json-unified1",
+        ":swiftshader_spirv.debuginfo.grammar.json",
+    ],
+    tool_files: ["utils/generate_grammar_tables.py"],
+    cmd: "$(location) --spirv-core-grammar=$(location :swiftshader_spirv.core.grammar.json-unified1) "+
+         "--extinst-debuginfo-grammar=$(location :swiftshader_spirv.debuginfo.grammar.json) "+
+         "--extension-enum-output=$(location extension_enum.inc) "+
+         "--enum-string-mapping-output=$(location enum_string_mapping.inc) "
+}
+
+genrule {
+    name: "swiftshader_gen_spvtools_generators_inc",
+    out: [
+        "generators.inc"
+    ],
+    srcs: [
+        ":swiftshader_spirv.registry.xml"
+    ],
+    tool_files: ["utils/generate_registry_tables.py"],
+    cmd: "$(location) --xml=$(location :swiftshader_spirv.registry.xml) --generator-output=$(location generators.inc)",
+}
+
+genrule { // FIXME this relies on `git` which is no good on build machines
+    name: "swiftshader_gen_spvtools_build_version_inc",
+    out: ["build-version.inc"],
+    srcs: ["CHANGES"],
+    tool_files: ["utils/update_build_version.py"],
+    cmd: "$(location) $$(dirname $(location CHANGES)) " +
+         "$(location build-version.inc)",
+}
+
+cc_library {
+    name: "swiftshader_spirv-tools",
+    sdk_version: "27",
+    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_gen_spvtools_grammar_tables_1.0",
+        "swiftshader_gen_spvtools_grammar_tables_1.1",
+        "swiftshader_gen_spvtools_grammar_tables_1.2",
+        "swiftshader_gen_spvtools_grammar_tables_unified1",
+        "swiftshader_gen_spvtools_grammar_tables_debuginfo",
+        "swiftshader_gen_spvtools_grammar_tables_amd-gcn-shader",
+        "swiftshader_gen_spvtools_grammar_tables_amd-shader-ballot",
+        "swiftshader_gen_spvtools_grammar_tables_amd-shader-explicit-vertex-parameter",
+        "swiftshader_gen_spvtools_grammar_tables_amd-shader-trinary-minmax",
+        "swiftshader_gen_spvtools_enum_string_mapping",
+        "swiftshader_gen_spvtools_generators_inc",
+        "swiftshader_gen_spvtools_build_version_inc",
+        "swiftshader_gen_spvtools_lang_headers",
+    ],
+    stl: "libc++_static",
+    cppflags: [
+        "-Wno-implicit-fallthrough"
+    ],
+}