xref: /aosp_15_r20/external/skia/tools/skslc/compile_sksl.bzl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker"""
2*c8dee2aaSAndroid Build Coastguard WorkerThis defines a macro to cut down on boiler plate for generating sksl test resources.
3*c8dee2aaSAndroid Build Coastguard Worker"""
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Workerload("//bazel:macros.bzl", "py_binary")
6*c8dee2aaSAndroid Build Coastguard Worker
7*c8dee2aaSAndroid Build Coastguard Workerdef compile_sksl(name, lang, inputs, settings = "settings"):
8*c8dee2aaSAndroid Build Coastguard Worker    """Creates a rule to compile the given sksl inputs
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Worker    This macro creates a py_binary rule to invoke the //gn:compile_sksl_tests.py script and a
11*c8dee2aaSAndroid Build Coastguard Worker    helper genrule which creates the list of all file names that should be processed by that
12*c8dee2aaSAndroid Build Coastguard Worker    python script.
13*c8dee2aaSAndroid Build Coastguard Worker
14*c8dee2aaSAndroid Build Coastguard Worker    The generated py_binary rule is called compute_${name} and can be run via `bazel run`.
15*c8dee2aaSAndroid Build Coastguard Worker
16*c8dee2aaSAndroid Build Coastguard Worker    Args:
17*c8dee2aaSAndroid Build Coastguard Worker        name: A string used to uniquely identify the generated compile and list rule.
18*c8dee2aaSAndroid Build Coastguard Worker        lang: A string passed into the compile_sksl_tests.py script.
19*c8dee2aaSAndroid Build Coastguard Worker        inputs: A filegroup label containing all the input files to be processed.
20*c8dee2aaSAndroid Build Coastguard Worker        settings: A string passed into the compile_sksl_tests.py script.
21*c8dee2aaSAndroid Build Coastguard Worker    """
22*c8dee2aaSAndroid Build Coastguard Worker
23*c8dee2aaSAndroid Build Coastguard Worker    # https://bazel.build/reference/be/python#py_binary
24*c8dee2aaSAndroid Build Coastguard Worker    py_binary(
25*c8dee2aaSAndroid Build Coastguard Worker        name = "compile_" + name,
26*c8dee2aaSAndroid Build Coastguard Worker        main = ":sksl_compile_tests.py",
27*c8dee2aaSAndroid Build Coastguard Worker        srcs = [":sksl_compile_tests.py"],
28*c8dee2aaSAndroid Build Coastguard Worker        args = [
29*c8dee2aaSAndroid Build Coastguard Worker            # comments are the variable names in compile_sksl_tests.py
30*c8dee2aaSAndroid Build Coastguard Worker            "--" + lang,  # lang
31*c8dee2aaSAndroid Build Coastguard Worker            "--" + settings,  # settings
32*c8dee2aaSAndroid Build Coastguard Worker            "resources",  # input_root_dir
33*c8dee2aaSAndroid Build Coastguard Worker            "tests",  # output_root_dir
34*c8dee2aaSAndroid Build Coastguard Worker            "bazel-bin/tools/skslc/%s.txt" % name,  # input_file
35*c8dee2aaSAndroid Build Coastguard Worker        ],
36*c8dee2aaSAndroid Build Coastguard Worker        data = [
37*c8dee2aaSAndroid Build Coastguard Worker            ":%s.txt" % name,
38*c8dee2aaSAndroid Build Coastguard Worker            inputs,
39*c8dee2aaSAndroid Build Coastguard Worker            ":skslc",
40*c8dee2aaSAndroid Build Coastguard Worker            "//gn:compile_sksl_tests",
41*c8dee2aaSAndroid Build Coastguard Worker        ],
42*c8dee2aaSAndroid Build Coastguard Worker        tags = ["no-remote-exec"],
43*c8dee2aaSAndroid Build Coastguard Worker    )
44*c8dee2aaSAndroid Build Coastguard Worker
45*c8dee2aaSAndroid Build Coastguard Worker    native.genrule(
46*c8dee2aaSAndroid Build Coastguard Worker        name = "enumerate_%s_list" % name,  # This name does not really matter.
47*c8dee2aaSAndroid Build Coastguard Worker        srcs = [inputs],
48*c8dee2aaSAndroid Build Coastguard Worker        outs = [name + ".txt"],
49*c8dee2aaSAndroid Build Coastguard Worker        # Put a space seperated list of file names into the one output
50*c8dee2aaSAndroid Build Coastguard Worker        # This is done because the list could be quite long and overflow
51*c8dee2aaSAndroid Build Coastguard Worker        # the command line length
52*c8dee2aaSAndroid Build Coastguard Worker        # https://bazel.build/reference/be/make-variables#predefined_genrule_variables
53*c8dee2aaSAndroid Build Coastguard Worker        cmd = "echo $(SRCS) > $@",
54*c8dee2aaSAndroid Build Coastguard Worker    )
55