From f5ae25214af5fd44a156b18e7a8b6d50207d7ec6 Mon Sep 17 00:00:00 2001 From: Sergiusz Bazanski Date: Sun, 26 Jul 2020 14:59:11 +0200 Subject: [PATCH] third_party/shaderc: init --- WORKSPACE | 8 +-- engine/shaders/BUILD | 6 +- third_party/shaderc/BUILD | 0 third_party/shaderc/BUILD.external | 91 +++++++++++++++++++++++++++ third_party/shaderc/build-version.bzl | 26 ++++++++ third_party/shaderc/deps.bzl | 22 +++++++ third_party/shaderc/version.bzl | 13 ++++ 7 files changed, 158 insertions(+), 8 deletions(-) create mode 100644 third_party/shaderc/BUILD create mode 100644 third_party/shaderc/BUILD.external create mode 100644 third_party/shaderc/build-version.bzl create mode 100644 third_party/shaderc/deps.bzl create mode 100644 third_party/shaderc/version.bzl diff --git a/WORKSPACE b/WORKSPACE index 918c02d..d39db26 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -33,12 +33,8 @@ rust_repository_set( load("@io_bazel_rules_rust//:workspace.bzl", "bazel_version") bazel_version(name = "bazel_version") -http_archive( - name = "glslang", - sha256 = "0b79a120ac7826ac31bcd47ba3e11d79d8d2709bfaf17125aa759eeec6799dd3", - strip_prefix = "glslang-b0ada80356ca7b560c600b93a596af1331442542", - url = "https://github.com/KhronosGroup/glslang/archive/b0ada80356ca7b560c600b93a596af1331442542.tar.gz", -) +load("//third_party/shaderc:deps.bzl", "shaderc_deps") +shaderc_deps() http_archive( name = "rules_pkg", diff --git a/engine/shaders/BUILD b/engine/shaders/BUILD index 10fb1b2..34dd84b 100644 --- a/engine/shaders/BUILD +++ b/engine/shaders/BUILD @@ -3,7 +3,7 @@ load("//tools/bzl:glsl.bzl", "glsl_binary") glsl_binary( name = "forward_vert", srcs = [ - "forward.vert" + "forward.vert", ], visibility = ["//engine:__pkg__"], ) @@ -11,7 +11,9 @@ glsl_binary( glsl_binary( name = "forward_frag", srcs = [ - "forward.frag" + "forward.frag", + "forward_brdf.frag", + #"forward_camera.frag", ], visibility = ["//engine:__pkg__"], ) diff --git a/third_party/shaderc/BUILD b/third_party/shaderc/BUILD new file mode 100644 index 0000000..e69de29 diff --git a/third_party/shaderc/BUILD.external b/third_party/shaderc/BUILD.external new file mode 100644 index 0000000..537b1f9 --- /dev/null +++ b/third_party/shaderc/BUILD.external @@ -0,0 +1,91 @@ +load("@abrasion//third_party/shaderc:build-version.bzl", "build_version") + +build_version( + name = "build-version", +) + +cc_library( + name = "libshaderc_util", + hdrs = [ + "libshaderc_util/include/libshaderc_util/args.h", + "libshaderc_util/include/libshaderc_util/compiler.h", + "libshaderc_util/include/libshaderc_util/counting_includer.h", + "libshaderc_util/include/libshaderc_util/file_finder.h", + "libshaderc_util/include/libshaderc_util/io.h", + "libshaderc_util/include/libshaderc_util/mutex.h", + "libshaderc_util/include/libshaderc_util/resources.h", + "libshaderc_util/include/libshaderc_util/resources.inc", + "libshaderc_util/include/libshaderc_util/string_piece.h", + + # should go to srcs? + "libshaderc_util/include/libshaderc_util/format.h", + "libshaderc_util/include/libshaderc_util/message.h", + "libshaderc_util/include/libshaderc_util/shader_stage.h", + "libshaderc_util/include/libshaderc_util/spirv_tools_wrapper.h", + "libshaderc_util/include/libshaderc_util/universal_unistd.h", + "libshaderc_util/include/libshaderc_util/version_profile.h", + ], + srcs = [ + "libshaderc_util/src/args.cc", + "libshaderc_util/src/compiler.cc", + "libshaderc_util/src/file_finder.cc", + "libshaderc_util/src/io.cc", + "libshaderc_util/src/message.cc", + "libshaderc_util/src/resources.cc", + "libshaderc_util/src/shader_stage.cc", + "libshaderc_util/src/spirv_tools_wrapper.cc", + "libshaderc_util/src/version_profile.cc", + ], + deps = [ + "@glslang//:glslang", + "@glslang//:SPIRV", + "@spirv_tools//:spirv_tools", + "@spirv_tools//:spirv_tools_opt", + ], + strip_include_prefix = "libshaderc_util/include/", +) + +cc_library( + name = "libshaderc", + hdrs = [ + "libshaderc/include/shaderc/env.h", + "libshaderc/include/shaderc/shaderc.h", + "libshaderc/include/shaderc/shaderc.hpp", + "libshaderc/include/shaderc/status.h", + "libshaderc/include/shaderc/visibility.h", + ], + srcs = [ + "libshaderc/src/shaderc.cc", + "libshaderc/src/shaderc_private.h", + ], + deps = [ + ":libshaderc_util", + ], + strip_include_prefix = "libshaderc/include", +) + +cc_binary( + name = "glslc", + srcs = [ + "build-version", + + "glslc/src/dependency_info.h", + "glslc/src/dependency_info.cc", + "glslc/src/file.h", + "glslc/src/file.cc", + "glslc/src/file_includer.h", + "glslc/src/file_includer.cc", + "glslc/src/file_compiler.h", + "glslc/src/file_compiler.cc", + "glslc/src/resource_parse.h", + "glslc/src/resource_parse.cc", + "glslc/src/shader_stage.h", + "glslc/src/shader_stage.cc", + + "glslc/src/main.cc", + ], + deps = [ + ":libshaderc", + ":libshaderc_util", + ], +) diff --git a/third_party/shaderc/build-version.bzl b/third_party/shaderc/build-version.bzl new file mode 100644 index 0000000..3bf5641 --- /dev/null +++ b/third_party/shaderc/build-version.bzl @@ -0,0 +1,26 @@ +load("//third_party/shaderc:version.bzl", "shaderc_version") + +# Shaderc build-version.inc genrule. +# This replaces the python script from shaderc's release machinery, and instead +# generates a file with the same format using version strings defined in +# version.bzl. + +def _build_version(ctx): + v_shaderc = shaderc_version["shaderc"][0] + v_spvtools = shaderc_version["spirv_tools"][0] + v_glslang = shaderc_version["glslang"][0] + + versions = [ + "shaderc v{} v{}-abrasion".format(v_shaderc, v_shaderc), + "spirv-tools v{} v{}-abrasion".format(v_spvtools, v_spvtools), + "glslang {}-abrasion".format(v_glslang), + ] + out = "\n".join(['"{}\\n"'.format(v) for v in versions]) + ctx.actions.write(ctx.outputs.inc, out + "\n") + +build_version = rule( + implementation = _build_version, + outputs = { + "inc": "%{name}.inc", + }, +) diff --git a/third_party/shaderc/deps.bzl b/third_party/shaderc/deps.bzl new file mode 100644 index 0000000..b023966 --- /dev/null +++ b/third_party/shaderc/deps.bzl @@ -0,0 +1,22 @@ +load("//third_party/shaderc:version.bzl", "shaderc_version") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +# Shaderc workspace rules (external repositories). +# This downloads shaderc and its dependencies, at versions specified in +# version.bzl. + +def _http_archive(name, strip_prefix, gh_name, **kw): + version, remote, sha = shaderc_version[name] + http_archive( + name = name, + sha256 = sha, + strip_prefix = "{}-{}".format(strip_prefix, remote), + url = "https://github.com/{}/archive/{}.tar.gz".format(gh_name, remote), + **kw, + ) + +def shaderc_deps(): + _http_archive("spirv_headers", "SPIRV-Headers", "KhronosGroup/SPIRV-Headers") + _http_archive("spirv_tools", "SPIRV-Tools", "KhronosGroup/SPIRV-Tools") + _http_archive("glslang", "glslang", "KhronosGroup/glslang") + _http_archive("shaderc", "shaderc", "google/shaderc", build_file="//third_party/shaderc:BUILD.external") diff --git a/third_party/shaderc/version.bzl b/third_party/shaderc/version.bzl new file mode 100644 index 0000000..5347d07 --- /dev/null +++ b/third_party/shaderc/version.bzl @@ -0,0 +1,13 @@ +# Shaderc version definitions. +# This should mirror DEPS from github.com/google/shaderc, but you will need two +# extra things that aren't there: +# - the sha256 of the tarball +# - the pretty 'release' version of the tool (which you can get from the changelog) + +shaderc_version = { + # dep: (version, GH remote ver, sha256) + "shaderc": ("2020.2", "2020.2", "a4d5680d4f0199e29ab77b357c88c147c5704f9ee2ac0a2d117e640e6f87d030"), + "spirv_tools": ("2020.5", "969f0286479b89267b6c89f6d5223285c265e6ae", "6915b4bca8b2369e26812ffb3c1b726089bb9cd38d1cb7e9b8ef0d3bb7dd8162"), + "spirv_headers": ("2020.5", "979924c8bc839e4cb1b69d03d48398551f369ce7", "7ebc04ebb4602c051d4886c9544de684195adac2a179e949469d29beb1f034e4"), + "glslang": ("11.0.0-dev", "3ee5f2f1d3316e228916788b300d786bb574d337", "7b2f8b93958c7594942f730659c00dec0bffeafaa6853b67b5f72f915c287b1f"), +}