xref: /aosp_15_r20/external/skia/tools/sksl-minify/BUILD.bazel (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workerload("//bazel:macros.bzl", "py_binary")
2*c8dee2aaSAndroid Build Coastguard Workerload("//bazel:skia_rules.bzl", "skia_cc_binary")
3*c8dee2aaSAndroid Build Coastguard Worker
4*c8dee2aaSAndroid Build Coastguard Workerpackage(
5*c8dee2aaSAndroid Build Coastguard Worker    default_applicable_licenses = ["//:license"],
6*c8dee2aaSAndroid Build Coastguard Worker)
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Workerlicenses(["notice"])
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Worker# Run these py_binary rules like bazel run //tools/sksl-minify:minify_srcs
11*c8dee2aaSAndroid Build Coastguard Worker# https://bazel.build/reference/be/python#py_binary
12*c8dee2aaSAndroid Build Coastguard Workerpy_binary(
13*c8dee2aaSAndroid Build Coastguard Worker    name = "minify_srcs",
14*c8dee2aaSAndroid Build Coastguard Worker    srcs = [":sksl_minify_srcs.py"],
15*c8dee2aaSAndroid Build Coastguard Worker    data = [
16*c8dee2aaSAndroid Build Coastguard Worker        ":sksl_minify",
17*c8dee2aaSAndroid Build Coastguard Worker        "//gn:minify_sksl",
18*c8dee2aaSAndroid Build Coastguard Worker        "//src/sksl:sksl_data",
19*c8dee2aaSAndroid Build Coastguard Worker    ],
20*c8dee2aaSAndroid Build Coastguard Worker    main = ":sksl_minify_srcs.py",
21*c8dee2aaSAndroid Build Coastguard Worker    # We can compile remotely, but because we are running the executable to modify files in
22*c8dee2aaSAndroid Build Coastguard Worker    # the source tree, running it in a remote, sandboxed would have no effect locally.
23*c8dee2aaSAndroid Build Coastguard Worker    tags = ["no-remote-exec"],
24*c8dee2aaSAndroid Build Coastguard Worker)
25*c8dee2aaSAndroid Build Coastguard Worker
26*c8dee2aaSAndroid Build Coastguard Workerpy_binary(
27*c8dee2aaSAndroid Build Coastguard Worker    name = "minify_tests",
28*c8dee2aaSAndroid Build Coastguard Worker    srcs = [":sksl_minify_tests.py"],
29*c8dee2aaSAndroid Build Coastguard Worker    data = [
30*c8dee2aaSAndroid Build Coastguard Worker        ":sksl_minify",
31*c8dee2aaSAndroid Build Coastguard Worker        ":test_input_list.txt",
32*c8dee2aaSAndroid Build Coastguard Worker        "//gn:minify_sksl_tests",
33*c8dee2aaSAndroid Build Coastguard Worker        "//resources/sksl:sksl_minify_tests_sources",
34*c8dee2aaSAndroid Build Coastguard Worker    ],
35*c8dee2aaSAndroid Build Coastguard Worker    main = ":sksl_minify_tests.py",
36*c8dee2aaSAndroid Build Coastguard Worker    tags = ["no-remote-exec"],
37*c8dee2aaSAndroid Build Coastguard Worker)
38*c8dee2aaSAndroid Build Coastguard Worker
39*c8dee2aaSAndroid Build Coastguard Workerskia_cc_binary(
40*c8dee2aaSAndroid Build Coastguard Worker    name = "sksl_minify",
41*c8dee2aaSAndroid Build Coastguard Worker    srcs = ["SkSLMinify.cpp"],
42*c8dee2aaSAndroid Build Coastguard Worker    deps = [
43*c8dee2aaSAndroid Build Coastguard Worker        "//:core",
44*c8dee2aaSAndroid Build Coastguard Worker        "//src/utils:get_executable_path",
45*c8dee2aaSAndroid Build Coastguard Worker        "//tools/skslc:process_worklist",
46*c8dee2aaSAndroid Build Coastguard Worker    ],
47*c8dee2aaSAndroid Build Coastguard Worker)
48*c8dee2aaSAndroid Build Coastguard Worker
49*c8dee2aaSAndroid Build Coastguard Worker_SKSL_MINIFY_SRCS = """
50*c8dee2aaSAndroid Build Coastguard Workerimport os
51*c8dee2aaSAndroid Build Coastguard Workerimport subprocess
52*c8dee2aaSAndroid Build Coastguard Workerimport glob
53*c8dee2aaSAndroid Build Coastguard Worker
54*c8dee2aaSAndroid Build Coastguard Worker# Change into the Skia root directory
55*c8dee2aaSAndroid Build Coastguard Worker# https://bazel.build/docs/user-manual#running-executables
56*c8dee2aaSAndroid Build Coastguard Worker# Note: Bazel eats single quotes, so we must use double quotes.
57*c8dee2aaSAndroid Build Coastguard Workeros.chdir(os.environ["BUILD_WORKSPACE_DIRECTORY"])
58*c8dee2aaSAndroid Build Coastguard Worker
59*c8dee2aaSAndroid Build Coastguard Worker# execpath returns the path to the given label relative to the Skia root.
60*c8dee2aaSAndroid Build Coastguard Worker# This will be something like:
61*c8dee2aaSAndroid Build Coastguard Worker#   bazel-out/k8-opt-exec-81C6BA4F/bin/tools/sksl-minify/sksl_minify
62*c8dee2aaSAndroid Build Coastguard Worker# https://bazel.build/reference/be/make-variables#predefined_label_variables
63*c8dee2aaSAndroid Build Coastguard Worker# We then find the absolute path because this is easier to debug and more
64*c8dee2aaSAndroid Build Coastguard Worker# consistent if the script we are calling changes the working directory.
65*c8dee2aaSAndroid Build Coastguard Workersksl_minify_exe = os.path.abspath("$(execpath //tools/sksl-minify:sksl_minify)")
66*c8dee2aaSAndroid Build Coastguard Workerminify_script = os.path.abspath("$(execpath //gn:minify_sksl)")
67*c8dee2aaSAndroid Build Coastguard Worker
68*c8dee2aaSAndroid Build Coastguard Workerprint(subprocess.check_output([
69*c8dee2aaSAndroid Build Coastguard Worker    minify_script,
70*c8dee2aaSAndroid Build Coastguard Worker    sksl_minify_exe,
71*c8dee2aaSAndroid Build Coastguard Worker    "src/sksl/generated",
72*c8dee2aaSAndroid Build Coastguard Worker] + glob.glob("src/sksl/*.sksl"), encoding="utf-8"))
73*c8dee2aaSAndroid Build Coastguard Worker"""
74*c8dee2aaSAndroid Build Coastguard Worker
75*c8dee2aaSAndroid Build Coastguard Workergenrule(
76*c8dee2aaSAndroid Build Coastguard Worker    name = "create_sksl_minify_srcs_script",
77*c8dee2aaSAndroid Build Coastguard Worker    srcs = [":sksl_minify"],
78*c8dee2aaSAndroid Build Coastguard Worker    outs = ["sksl_minify_srcs.py"],
79*c8dee2aaSAndroid Build Coastguard Worker    cmd = "echo '%s' > $@" % _SKSL_MINIFY_SRCS,
80*c8dee2aaSAndroid Build Coastguard Worker    # note: tools are not transitive, so anything that depends on sksl_minify_srcs.sh
81*c8dee2aaSAndroid Build Coastguard Worker    # should also specify these so they are properly built/available.
82*c8dee2aaSAndroid Build Coastguard Worker    tools = [
83*c8dee2aaSAndroid Build Coastguard Worker        "//gn:minify_sksl",
84*c8dee2aaSAndroid Build Coastguard Worker    ],
85*c8dee2aaSAndroid Build Coastguard Worker)
86*c8dee2aaSAndroid Build Coastguard Worker
87*c8dee2aaSAndroid Build Coastguard Worker_SKSL_MINIFY_TESTS = """
88*c8dee2aaSAndroid Build Coastguard Workerimport os
89*c8dee2aaSAndroid Build Coastguard Workerimport subprocess
90*c8dee2aaSAndroid Build Coastguard Workerimport sys
91*c8dee2aaSAndroid Build Coastguard Worker
92*c8dee2aaSAndroid Build Coastguard Worker# Change into the Skia root directory
93*c8dee2aaSAndroid Build Coastguard Worker# https://bazel.build/docs/user-manual#running-executables
94*c8dee2aaSAndroid Build Coastguard Worker# Note: Bazel eats single quotes, so we must use double quotes.
95*c8dee2aaSAndroid Build Coastguard Workeros.chdir(os.environ["BUILD_WORKSPACE_DIRECTORY"])
96*c8dee2aaSAndroid Build Coastguard Worker
97*c8dee2aaSAndroid Build Coastguard Worker# execpath returns the path to the given label relative to the Skia root.
98*c8dee2aaSAndroid Build Coastguard Worker# This will be something like:
99*c8dee2aaSAndroid Build Coastguard Worker#   bazel-out/k8-opt-exec-81C6BA4F/bin/tools/sksl-minify/sksl_minify
100*c8dee2aaSAndroid Build Coastguard Worker# https://bazel.build/reference/be/make-variables#predefined_label_variables
101*c8dee2aaSAndroid Build Coastguard Worker# We then find the absolute path because this is easier to debug and more
102*c8dee2aaSAndroid Build Coastguard Worker# consistent if the script we are calling changes the working directory.
103*c8dee2aaSAndroid Build Coastguard Workersksl_minify_exe = os.path.abspath("$(execpath //tools/sksl-minify:sksl_minify)")
104*c8dee2aaSAndroid Build Coastguard Workerminify_script = os.path.abspath("$(execpath //gn:minify_sksl_tests)")
105*c8dee2aaSAndroid Build Coastguard Workertest_inputs = os.path.abspath("$(execpath :test_input_list.txt)")
106*c8dee2aaSAndroid Build Coastguard Worker
107*c8dee2aaSAndroid Build Coastguard Workerresult = subprocess.run([
108*c8dee2aaSAndroid Build Coastguard Worker    minify_script,
109*c8dee2aaSAndroid Build Coastguard Worker    sksl_minify_exe,
110*c8dee2aaSAndroid Build Coastguard Worker    "src/sksl/sksl_shared.sksl",
111*c8dee2aaSAndroid Build Coastguard Worker    "src/sksl/sksl_public.sksl",
112*c8dee2aaSAndroid Build Coastguard Worker    "src/sksl/sksl_rt_shader.sksl",
113*c8dee2aaSAndroid Build Coastguard Worker    "resources",
114*c8dee2aaSAndroid Build Coastguard Worker    "tests",
115*c8dee2aaSAndroid Build Coastguard Worker    test_inputs,
116*c8dee2aaSAndroid Build Coastguard Worker], capture_output=True, encoding="utf-8")
117*c8dee2aaSAndroid Build Coastguard Workerif result.returncode != 0:
118*c8dee2aaSAndroid Build Coastguard Worker    print(result.stdout)
119*c8dee2aaSAndroid Build Coastguard Worker    print(result.stderr)
120*c8dee2aaSAndroid Build Coastguard Worker    sys.exit(result.returncode)
121*c8dee2aaSAndroid Build Coastguard Worker"""
122*c8dee2aaSAndroid Build Coastguard Worker
123*c8dee2aaSAndroid Build Coastguard Workergenrule(
124*c8dee2aaSAndroid Build Coastguard Worker    name = "create_sksl_minify_tests_script",
125*c8dee2aaSAndroid Build Coastguard Worker    # By putting sksl_minify in srcs, this will be compiled for
126*c8dee2aaSAndroid Build Coastguard Worker    # the target platform, not the exec platform. This shouldn't
127*c8dee2aaSAndroid Build Coastguard Worker    # cause any problems unless the outputs of the minifying are
128*c8dee2aaSAndroid Build Coastguard Worker    # used as the inputs to another step, because then cross-compiling
129*c8dee2aaSAndroid Build Coastguard Worker    # would break (as we would be unable to, for example, run the
130*c8dee2aaSAndroid Build Coastguard Worker    # "compiled for android sksl_minify" on the exec machine that
131*c8dee2aaSAndroid Build Coastguard Worker    # is running the Python script.
132*c8dee2aaSAndroid Build Coastguard Worker    srcs = [
133*c8dee2aaSAndroid Build Coastguard Worker        ":sksl_minify",
134*c8dee2aaSAndroid Build Coastguard Worker        ":test_input_list.txt",
135*c8dee2aaSAndroid Build Coastguard Worker    ],
136*c8dee2aaSAndroid Build Coastguard Worker    outs = ["sksl_minify_tests.py"],
137*c8dee2aaSAndroid Build Coastguard Worker    cmd = "echo '%s' > $@" % _SKSL_MINIFY_TESTS,
138*c8dee2aaSAndroid Build Coastguard Worker    tools = [
139*c8dee2aaSAndroid Build Coastguard Worker        "//gn:minify_sksl_tests",
140*c8dee2aaSAndroid Build Coastguard Worker    ],
141*c8dee2aaSAndroid Build Coastguard Worker)
142*c8dee2aaSAndroid Build Coastguard Worker
143*c8dee2aaSAndroid Build Coastguard Workergenrule(
144*c8dee2aaSAndroid Build Coastguard Worker    name = "enumerate_test_input_list",
145*c8dee2aaSAndroid Build Coastguard Worker    srcs = ["//resources/sksl:sksl_minify_tests_sources"],
146*c8dee2aaSAndroid Build Coastguard Worker    outs = ["test_input_list.txt"],
147*c8dee2aaSAndroid Build Coastguard Worker    # Put a space seperated list of file names into the one output
148*c8dee2aaSAndroid Build Coastguard Worker    # This is done because the list could be quite long and overflow
149*c8dee2aaSAndroid Build Coastguard Worker    # the command line length
150*c8dee2aaSAndroid Build Coastguard Worker    # https://bazel.build/reference/be/make-variables#predefined_genrule_variables
151*c8dee2aaSAndroid Build Coastguard Worker    cmd = "echo $(SRCS) > $@",
152*c8dee2aaSAndroid Build Coastguard Worker)
153