1*c8dee2aaSAndroid Build Coastguard Workerload("//bazel:skia_rules.bzl", "skia_cc_binary", "skia_cc_library", "skia_filegroup") 2*c8dee2aaSAndroid Build Coastguard Workerload(":compile_sksl.bzl", "compile_sksl") 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 Workerskia_cc_binary( 11*c8dee2aaSAndroid Build Coastguard Worker name = "skslc", 12*c8dee2aaSAndroid Build Coastguard Worker srcs = [ 13*c8dee2aaSAndroid Build Coastguard Worker "Main.cpp", 14*c8dee2aaSAndroid Build Coastguard Worker ], 15*c8dee2aaSAndroid Build Coastguard Worker deps = [ 16*c8dee2aaSAndroid Build Coastguard Worker ":process_worklist", 17*c8dee2aaSAndroid Build Coastguard Worker "//:core", 18*c8dee2aaSAndroid Build Coastguard Worker "//src/sksl/codegen:glsl", 19*c8dee2aaSAndroid Build Coastguard Worker "//src/sksl/codegen:gpu", 20*c8dee2aaSAndroid Build Coastguard Worker "//src/sksl/codegen:hlsl", 21*c8dee2aaSAndroid Build Coastguard Worker "//src/sksl/codegen:metal", 22*c8dee2aaSAndroid Build Coastguard Worker "//src/sksl/codegen:spirv", 23*c8dee2aaSAndroid Build Coastguard Worker "//src/sksl/codegen:spirv_validator", 24*c8dee2aaSAndroid Build Coastguard Worker "//src/sksl/codegen:wgsl", 25*c8dee2aaSAndroid Build Coastguard Worker "//src/sksl/codegen:wgsl_validator", 26*c8dee2aaSAndroid Build Coastguard Worker "@spirv_tools", 27*c8dee2aaSAndroid Build Coastguard Worker ], 28*c8dee2aaSAndroid Build Coastguard Worker) 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Workerskia_cc_library( 31*c8dee2aaSAndroid Build Coastguard Worker name = "process_worklist", 32*c8dee2aaSAndroid Build Coastguard Worker srcs = ["ProcessWorklist.cpp"], 33*c8dee2aaSAndroid Build Coastguard Worker hdrs = ["ProcessWorklist.h"], 34*c8dee2aaSAndroid Build Coastguard Worker visibility = ["//tools/sksl-minify:__pkg__"], 35*c8dee2aaSAndroid Build Coastguard Worker deps = ["//:core"], 36*c8dee2aaSAndroid Build Coastguard Worker) 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Workerskia_filegroup( 39*c8dee2aaSAndroid Build Coastguard Worker name = "glsl_tests_with_settings", 40*c8dee2aaSAndroid Build Coastguard Worker srcs = [ 41*c8dee2aaSAndroid Build Coastguard Worker "//resources/sksl:sksl_glsl_settings_tests_sources", 42*c8dee2aaSAndroid Build Coastguard Worker "//resources/sksl:sksl_glsl_tests_sources", 43*c8dee2aaSAndroid Build Coastguard Worker ], 44*c8dee2aaSAndroid Build Coastguard Worker) 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker# Invoke these using: 47*c8dee2aaSAndroid Build Coastguard Worker# bazel run //tools/skslc:compile_glsl_tests --config=compile_sksl 48*c8dee2aaSAndroid Build Coastguard Workercompile_sksl( 49*c8dee2aaSAndroid Build Coastguard Worker name = "glsl_tests", 50*c8dee2aaSAndroid Build Coastguard Worker inputs = ":glsl_tests_with_settings", 51*c8dee2aaSAndroid Build Coastguard Worker lang = "glsl", 52*c8dee2aaSAndroid Build Coastguard Worker) 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Workercompile_sksl( 55*c8dee2aaSAndroid Build Coastguard Worker name = "glsl_nosettings_tests", 56*c8dee2aaSAndroid Build Coastguard Worker inputs = "//resources/sksl:sksl_glsl_settings_tests_sources", 57*c8dee2aaSAndroid Build Coastguard Worker lang = "glsl", 58*c8dee2aaSAndroid Build Coastguard Worker settings = "nosettings", 59*c8dee2aaSAndroid Build Coastguard Worker) 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Workercompile_sksl( 62*c8dee2aaSAndroid Build Coastguard Worker name = "metal_tests", 63*c8dee2aaSAndroid Build Coastguard Worker inputs = "//resources/sksl:sksl_metal_tests_sources", 64*c8dee2aaSAndroid Build Coastguard Worker lang = "metal", 65*c8dee2aaSAndroid Build Coastguard Worker) 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard Workercompile_sksl( 68*c8dee2aaSAndroid Build Coastguard Worker name = "skrp_tests", 69*c8dee2aaSAndroid Build Coastguard Worker inputs = "//resources/sksl:sksl_skrp_tests_sources", 70*c8dee2aaSAndroid Build Coastguard Worker lang = "skrp", 71*c8dee2aaSAndroid Build Coastguard Worker) 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Workercompile_sksl( 74*c8dee2aaSAndroid Build Coastguard Worker name = "stage_tests", 75*c8dee2aaSAndroid Build Coastguard Worker inputs = "//resources/sksl:sksl_stage_tests_sources", 76*c8dee2aaSAndroid Build Coastguard Worker lang = "stage", 77*c8dee2aaSAndroid Build Coastguard Worker) 78*c8dee2aaSAndroid Build Coastguard Worker 79*c8dee2aaSAndroid Build Coastguard Workercompile_sksl( 80*c8dee2aaSAndroid Build Coastguard Worker name = "spirv_tests", 81*c8dee2aaSAndroid Build Coastguard Worker inputs = "//resources/sksl:sksl_spirv_tests_sources", 82*c8dee2aaSAndroid Build Coastguard Worker lang = "spirv", 83*c8dee2aaSAndroid Build Coastguard Worker) 84*c8dee2aaSAndroid Build Coastguard Worker 85*c8dee2aaSAndroid Build Coastguard Workercompile_sksl( 86*c8dee2aaSAndroid Build Coastguard Worker name = "hlsl_tests", 87*c8dee2aaSAndroid Build Coastguard Worker inputs = "//resources/sksl:sksl_hlsl_tests_sources", 88*c8dee2aaSAndroid Build Coastguard Worker lang = "hlsl", 89*c8dee2aaSAndroid Build Coastguard Worker) 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Workercompile_sksl( 92*c8dee2aaSAndroid Build Coastguard Worker name = "wgsl_tests", 93*c8dee2aaSAndroid Build Coastguard Worker inputs = "//resources/sksl:sksl_wgsl_tests_sources", 94*c8dee2aaSAndroid Build Coastguard Worker lang = "wgsl", 95*c8dee2aaSAndroid Build Coastguard Worker) 96*c8dee2aaSAndroid Build Coastguard Worker 97*c8dee2aaSAndroid Build Coastguard Worker_SKSL_COMPILE_TESTS = """ 98*c8dee2aaSAndroid Build Coastguard Workerimport glob 99*c8dee2aaSAndroid Build Coastguard Workerimport os 100*c8dee2aaSAndroid Build Coastguard Workerimport shutil 101*c8dee2aaSAndroid Build Coastguard Workerimport subprocess 102*c8dee2aaSAndroid Build Coastguard Workerimport sys 103*c8dee2aaSAndroid Build Coastguard Worker 104*c8dee2aaSAndroid Build Coastguard Worker# https://bazel.build/docs/user-manual#running-executables 105*c8dee2aaSAndroid Build Coastguard Worker# Note: Bazel eats single quotes, so we must use double quotes. 106*c8dee2aaSAndroid Build Coastguard Workeros.chdir(os.environ["BUILD_WORKSPACE_DIRECTORY"]) 107*c8dee2aaSAndroid Build Coastguard Worker 108*c8dee2aaSAndroid Build Coastguard Worker# execpath returns the path to the given label relative to the Skia root. 109*c8dee2aaSAndroid Build Coastguard Worker# This will be something like: 110*c8dee2aaSAndroid Build Coastguard Worker# bazel-out/k8-opt-exec-81C6BA4F/bin/tools/sksl-minify/sksl_minify 111*c8dee2aaSAndroid Build Coastguard Worker# https://bazel.build/reference/be/make-variables#predefined_label_variables 112*c8dee2aaSAndroid Build Coastguard Worker# We then find the absolute path because this is easier to debug and more 113*c8dee2aaSAndroid Build Coastguard Worker# consistent if the script we are calling changes the working directory. 114*c8dee2aaSAndroid Build Coastguard Workersksl_compile_exe = os.path.abspath("$(execpath //tools/skslc:skslc)") 115*c8dee2aaSAndroid Build Coastguard Workercompile_tests_script = os.path.abspath("$(execpath //gn:compile_sksl_tests)") 116*c8dee2aaSAndroid Build Coastguard Worker 117*c8dee2aaSAndroid Build Coastguard Worker# The last argument passed in is a file path from the root of the skia dir to a file 118*c8dee2aaSAndroid Build Coastguard Worker# containing all the tests we want to process. 119*c8dee2aaSAndroid Build Coastguard Workerinput_file = os.path.abspath(sys.argv[-1]) 120*c8dee2aaSAndroid Build Coastguard Worker 121*c8dee2aaSAndroid Build Coastguard Worker# skslc runs in standalone mode, which means it needs to read in several sksl files 122*c8dee2aaSAndroid Build Coastguard Worker# instead of them being compiled in. These files need to be copied to the location 123*c8dee2aaSAndroid Build Coastguard Worker# the executable is in, which is where it expects them. 124*c8dee2aaSAndroid Build Coastguard Workerfor sksl_file in glob.glob("src/sksl/*.sksl"): 125*c8dee2aaSAndroid Build Coastguard Worker shutil.copy(sksl_file, os.path.dirname(sksl_compile_exe)) 126*c8dee2aaSAndroid Build Coastguard Worker 127*c8dee2aaSAndroid Build Coastguard Workerresult = subprocess.run([ 128*c8dee2aaSAndroid Build Coastguard Worker compile_tests_script, 129*c8dee2aaSAndroid Build Coastguard Worker sksl_compile_exe, 130*c8dee2aaSAndroid Build Coastguard Worker] + sys.argv[1:-1] + [input_file], capture_output=True, encoding="utf-8") 131*c8dee2aaSAndroid Build Coastguard Workerprint(result.stdout) 132*c8dee2aaSAndroid Build Coastguard Workersys.exit(result.returncode) 133*c8dee2aaSAndroid Build Coastguard Worker""" 134*c8dee2aaSAndroid Build Coastguard Worker 135*c8dee2aaSAndroid Build Coastguard Workergenrule( 136*c8dee2aaSAndroid Build Coastguard Worker name = "create_sksl_compile_tests_script", 137*c8dee2aaSAndroid Build Coastguard Worker # By putting skslc in srcs, this will be compiled for 138*c8dee2aaSAndroid Build Coastguard Worker # the target platform, not the exec platform. Importantly, this means that the 139*c8dee2aaSAndroid Build Coastguard Worker # Bazel config (e.g. no_config) will properly be applied to it. This shouldn't 140*c8dee2aaSAndroid Build Coastguard Worker # cause any problems unless the outputs of the compilation are 141*c8dee2aaSAndroid Build Coastguard Worker # used as the inputs to another step, because then cross-compiling 142*c8dee2aaSAndroid Build Coastguard Worker # would break (as we would be unable to, for example, run the 143*c8dee2aaSAndroid Build Coastguard Worker # "compiled for android skslc" on the exec machine that 144*c8dee2aaSAndroid Build Coastguard Worker # is running the Python script. 145*c8dee2aaSAndroid Build Coastguard Worker srcs = [":skslc"], 146*c8dee2aaSAndroid Build Coastguard Worker outs = ["sksl_compile_tests.py"], 147*c8dee2aaSAndroid Build Coastguard Worker cmd = "echo '%s' > $@" % _SKSL_COMPILE_TESTS, 148*c8dee2aaSAndroid Build Coastguard Worker tools = [ 149*c8dee2aaSAndroid Build Coastguard Worker "//gn:compile_sksl_tests", 150*c8dee2aaSAndroid Build Coastguard Worker ], 151*c8dee2aaSAndroid Build Coastguard Worker) 152