load("//bazel:macros.bzl", "exports_files_legacy", "skia_cc_binary_with_flags")

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_srcs",
    ],
    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_sksl": ["True"],
        "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: exec_tools are not transitive, so anything that depends on sksl_minify_srcs.sh
    # should also specify these so they are properly built/available.
    exec_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,
    exec_tools = [
        ":sksl_minify",
        "//gn:minify_sksl_tests",
        ":test_input_list.txt",
    ],
)

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) > $@",
)
