| load("//bazel:macros.bzl", "exports_files_legacy", "skia_cc_binary_with_flags", "skia_cc_library", "skia_filegroup") |
| load(":compile_sksl.bzl", "compile_sksl") |
| |
| licenses(["notice"]) |
| |
| exports_files_legacy() |
| |
| skia_cc_binary_with_flags( |
| name = "skslc", |
| srcs = [ |
| "Main.cpp", |
| ], |
| set_flags = { |
| "enable_sksl": ["True"], |
| "enable_sksl_tracing": ["True"], |
| "enable_skslc": ["True"], |
| }, |
| deps = [ |
| ":process_worklist", |
| "//:skia_internal", |
| "@spirv_tools", |
| ], |
| ) |
| |
| skia_cc_library( |
| name = "process_worklist", |
| srcs = ["ProcessWorklist.cpp"], |
| hdrs = ["ProcessWorklist.h"], |
| visibility = ["//tools/sksl-minify:__pkg__"], |
| deps = ["//:skia_internal"], |
| ) |
| |
| skia_filegroup( |
| name = "glsl_tests_with_settings", |
| srcs = [ |
| "//resources/sksl:sksl_glsl_settings_tests_sources", |
| "//resources/sksl:sksl_glsl_tests_sources", |
| ], |
| ) |
| |
| # Invoke these using: |
| # bazel run //tools/skslc:compile_glsl_tests |
| compile_sksl( |
| name = "glsl_tests", |
| inputs = ":glsl_tests_with_settings", |
| lang = "glsl", |
| ) |
| |
| compile_sksl( |
| name = "glsl_nosettings_tests", |
| inputs = "//resources/sksl:sksl_glsl_settings_tests_sources", |
| lang = "glsl", |
| settings = "nosettings", |
| ) |
| |
| compile_sksl( |
| name = "metal_tests", |
| inputs = "//resources/sksl:sksl_metal_tests_sources", |
| lang = "metal", |
| ) |
| |
| compile_sksl( |
| name = "skvm_tests", |
| inputs = "//resources/sksl:sksl_skvm_tests_sources", |
| lang = "skvm", |
| ) |
| |
| compile_sksl( |
| name = "stage_tests", |
| inputs = "//resources/sksl:sksl_stage_tests_sources", |
| lang = "stage", |
| ) |
| |
| compile_sksl( |
| name = "spirv_tests", |
| inputs = "//resources/sksl:sksl_spirv_tests_sources", |
| lang = "spirv", |
| ) |
| |
| compile_sksl( |
| name = "hlsl_tests", |
| inputs = "//resources/sksl:sksl_hlsl_tests_sources", |
| lang = "hlsl", |
| ) |
| |
| compile_sksl( |
| name = "wgsl_tests", |
| inputs = "//resources/sksl:sksl_wgsl_tests_sources", |
| lang = "wgsl", |
| ) |
| |
| _SKSL_COMPILE_TESTS = """ |
| import glob |
| import os |
| import shutil |
| import subprocess |
| import sys |
| |
| # 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_compile_exe = os.path.abspath("$(execpath //tools/skslc:skslc)") |
| compile_tests_script = os.path.abspath("$(execpath //gn:compile_sksl_tests)") |
| |
| # The last argument passed in is a file path from the root of the skia dir to a file |
| # containing all the tests we want to process. |
| input_file = os.path.abspath(sys.argv[-1]) |
| |
| # skslc runs in standalone mode, which means it needs to read in several sksl files |
| # instead of them being compiled in. These files need to be copied to the location |
| # the executable is in, which is where it expects them. |
| for sksl_file in glob.glob("src/sksl/*.sksl"): |
| shutil.copy(sksl_file, os.path.dirname(sksl_compile_exe)) |
| |
| result = subprocess.run([ |
| compile_tests_script, |
| sksl_compile_exe, |
| ] + sys.argv[1:-1] + [input_file], capture_output=True, encoding="utf-8") |
| print(result.stdout) |
| sys.exit(result.returncode) |
| """ |
| |
| genrule( |
| name = "create_sksl_compile_tests_script", |
| outs = ["sksl_compile_tests.py"], |
| cmd = "echo '%s' > $@" % _SKSL_COMPILE_TESTS, |
| exec_tools = [ |
| ":skslc", |
| "//gn:compile_sksl_tests", |
| ], |
| ) |