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