blob: 0d321346d340bc2a218081b8dd04d30016fc5747 [file] [log] [blame]
load("//bazel:macros.bzl", "py_binary")
load("//bazel:skia_rules.bzl", "exports_files_legacy", "skia_cc_binary_with_flags")
package(
default_applicable_licenses = ["//:license"],
)
licenses(["notice"])
exports_files_legacy()
# Run these py_binary rules like bazel run //tools/sksl-minify:minify_srcs
# https://bazel.build/reference/be/python#py_binary
py_binary(
name = "minify_srcs",
srcs = [":sksl_minify_srcs.py"],
data = [
":sksl_minify",
"//gn:minify_sksl",
"//src/sksl:sksl_data",
],
main = ":sksl_minify_srcs.py",
# We can compile remotely, but because we are running the executable to modify files in
# the source tree, running it in a remote, sandboxed would have no effect locally.
tags = ["no-remote"],
)
py_binary(
name = "minify_tests",
srcs = [":sksl_minify_tests.py"],
data = [
":sksl_minify",
"//gn:minify_sksl_tests",
"//resources/sksl:sksl_minify_tests_sources",
],
main = ":sksl_minify_tests.py",
tags = ["no-remote"],
)
skia_cc_binary_with_flags(
name = "sksl_minify",
srcs = ["SkSLMinify.cpp"],
set_flags = {
"enable_skslc": ["True"],
},
deps = [
"//:skia_internal",
"//tools:get_executable_path",
"//tools/skslc:process_worklist",
],
)
_SKSL_MINIFY_SRCS = """
import os
import subprocess
import glob
# Change into the Skia root directory
# https://bazel.build/docs/user-manual#running-executables
# Note: Bazel eats single quotes, so we must use double quotes.
os.chdir(os.environ["BUILD_WORKSPACE_DIRECTORY"])
# execpath returns the path to the given label relative to the Skia root.
# This will be something like:
# bazel-out/k8-opt-exec-81C6BA4F/bin/tools/sksl-minify/sksl_minify
# https://bazel.build/reference/be/make-variables#predefined_label_variables
# We then find the absolute path because this is easier to debug and more
# consistent if the script we are calling changes the working directory.
sksl_minify_exe = os.path.abspath("$(execpath //tools/sksl-minify:sksl_minify)")
minify_script = os.path.abspath("$(execpath //gn:minify_sksl)")
print(subprocess.check_output([
minify_script,
sksl_minify_exe,
"src/sksl/generated",
] + glob.glob("src/sksl/*.sksl"), encoding="utf-8"))
"""
genrule(
name = "create_sksl_minify_srcs_script",
outs = ["sksl_minify_srcs.py"],
cmd = "echo '%s' > $@" % _SKSL_MINIFY_SRCS,
# note: tools are not transitive, so anything that depends on sksl_minify_srcs.sh
# should also specify these so they are properly built/available.
tools = [
":sksl_minify",
"//gn:minify_sksl",
],
)
_SKSL_MINIFY_TESTS = """
import os
import subprocess
import sys
# Change into the Skia root directory
# https://bazel.build/docs/user-manual#running-executables
# Note: Bazel eats single quotes, so we must use double quotes.
os.chdir(os.environ["BUILD_WORKSPACE_DIRECTORY"])
# execpath returns the path to the given label relative to the Skia root.
# This will be something like:
# bazel-out/k8-opt-exec-81C6BA4F/bin/tools/sksl-minify/sksl_minify
# https://bazel.build/reference/be/make-variables#predefined_label_variables
# We then find the absolute path because this is easier to debug and more
# consistent if the script we are calling changes the working directory.
sksl_minify_exe = os.path.abspath("$(execpath //tools/sksl-minify:sksl_minify)")
minify_script = os.path.abspath("$(execpath //gn:minify_sksl_tests)")
test_inputs = os.path.abspath("$(execpath :test_input_list.txt)")
result = subprocess.run([
minify_script,
sksl_minify_exe,
"src/sksl/sksl_shared.sksl",
"src/sksl/sksl_public.sksl",
"resources",
"tests",
test_inputs,
], capture_output=True, encoding="utf-8")
if result.returncode != 0:
print(result.stdout)
print(result.stderr)
sys.exit(result.returncode)
"""
genrule(
name = "create_sksl_minify_tests_script",
outs = ["sksl_minify_tests.py"],
cmd = "echo '%s' > $@" % _SKSL_MINIFY_TESTS,
tools = [
":sksl_minify",
":test_input_list.txt",
"//gn:minify_sksl_tests",
],
)
genrule(
name = "enumerate_test_input_list",
srcs = ["//resources/sksl:sksl_minify_tests_sources"],
outs = ["test_input_list.txt"],
# Put a space seperated list of file names into the one output
# This is done because the list could be quite long and overflow
# the command line length
# https://bazel.build/reference/be/make-variables#predefined_genrule_variables
cmd = "echo $(SRCS) > $@",
)