| load("//bazel:skia_rules.bzl", "exports_files_legacy", "skia_cc_library", "skia_objc_library") | 
 | load("//bazel:macros.bzl", "py_binary") | 
 |  | 
 | licenses(["notice"]) | 
 |  | 
 | exports_files_legacy() | 
 |  | 
 | skia_cc_library( | 
 |     name = "tool_utils", | 
 |     testonly = True, | 
 |     srcs = [ | 
 |         "Resources.cpp", | 
 |         "ToolUtils.cpp", | 
 |         "ResourceFactory.h", | 
 |         "Resources.h", | 
 |         "//tools/flags", | 
 |         # TODO(kjlubick, bungeman): We should split out the font stuff into its own set of files | 
 |         "//tools/fonts:test_font_manager_srcs", | 
 |         "SkMetaData.h", | 
 |         "SkMetaData.cpp", | 
 |     ], | 
 |     hdrs = [ | 
 |         "ToolUtils.h", | 
 |     ], | 
 |     textual_hdrs = [ | 
 |         "//tools/fonts:test_fonts", | 
 |     ], | 
 |     visibility = ["//:__subpackages__"], | 
 |     deps = [ | 
 |         "//:skia_internal", | 
 |     ], | 
 | ) | 
 |  | 
 | skia_cc_library( | 
 |     name = "registry", | 
 |     hdrs = ["Registry.h"], | 
 |     visibility = ["//tests:__subpackages__"], | 
 |     deps = ["//:skia_internal"], | 
 | ) | 
 |  | 
 | py_binary( | 
 |     name = "embed_resources", | 
 |     srcs = ["embed_resources.py"], | 
 |     visibility = ["//:__subpackages__"], | 
 | ) | 
 |  | 
 | skia_cc_library( | 
 |     name = "autorelease_pool", | 
 |     hdrs = ["AutoreleasePool.h"], | 
 |     visibility = ["//tools/gpu:__pkg__"], | 
 | ) | 
 |  | 
 | skia_objc_library( | 
 |     name = "autorelease_pool_objc", | 
 |     srcs = ["AutoreleasePool.mm"], | 
 |     hdrs = ["AutoreleasePool.h"], | 
 |     visibility = ["//tools/gpu:__pkg__"], | 
 | ) | 
 |  | 
 | skia_cc_library( | 
 |     name = "url_data_manager", | 
 |     srcs = ["UrlDataManager.cpp"], | 
 |     hdrs = ["UrlDataManager.h"], | 
 |     visibility = ["//tools/debugger:__pkg__"], | 
 |     deps = ["//:skia_internal"], | 
 | ) | 
 |  | 
 | skia_cc_library( | 
 |     name = "sk_sharing_proc", | 
 |     srcs = ["SkSharingProc.cpp"], | 
 |     hdrs = ["SkSharingProc.h"], | 
 |     visibility = ["//tools/debugger:__pkg__"], | 
 |     deps = ["//:skia_internal"], | 
 | ) | 
 |  | 
 | skia_cc_library( | 
 |     name = "runtime_blend_utils", | 
 |     srcs = ["RuntimeBlendUtils.cpp"], | 
 |     hdrs = ["RuntimeBlendUtils.h"], | 
 |     visibility = ["//tests:__pkg__"], | 
 |     deps = ["//:skia_internal"], | 
 | ) | 
 |  | 
 | skia_cc_library( | 
 |     name = "get_executable_path", | 
 |     srcs = select({ | 
 |         "@platforms//os:windows": ["SkGetExecutablePath_win.cpp"], | 
 |         "@platforms//os:macos": ["SkGetExecutablePath_mac.cpp"], | 
 |         "@platforms//os:linux": ["SkGetExecutablePath_linux.cpp"], | 
 |     }), | 
 |     hdrs = ["SkGetExecutablePath.h"], | 
 |     visibility = [ | 
 |         "//src/sksl:__pkg__", | 
 |         "//tools/sksl-minify:__pkg__", | 
 |     ], | 
 | ) | 
 |  | 
 | # Regenerate workarounds with `bazel run //tools:generate_workarounds` | 
 | py_binary( | 
 |     name = "generate_workarounds", | 
 |     srcs = [":generate_workarounds.py"], | 
 |     args = [ | 
 |         "--output-file", | 
 |         "include/gpu/GrDriverBugWorkaroundsAutogen.h", | 
 |         "src/gpu/gpu_workaround_list.txt", | 
 |     ], | 
 |     data = [ | 
 |         ":build_workaround_header", | 
 |     ], | 
 |     tags = ["no-remote"], | 
 | ) | 
 |  | 
 | py_binary( | 
 |     name = "build_workaround_header", | 
 |     srcs = ["build_workaround_header.py"], | 
 | ) | 
 |  | 
 | _GENERATE_WORKAROUNDS = """ | 
 | import os | 
 | 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/build_workaround_header | 
 | # https://bazel.build/reference/be/make-variables#predefined_label_variables | 
 | generate_script = os.path.abspath("$(execpath :build_workaround_header)") | 
 |  | 
 | result = subprocess.run( | 
 |     [generate_script] + sys.argv[1:], capture_output=True, encoding="utf-8") | 
 | if result.returncode != 0: | 
 |     print(result.stdout) | 
 |     print(result.stderr) | 
 |     sys.exit(result.returncode) | 
 | """ | 
 |  | 
 | genrule( | 
 |     name = "create_generate_workarounds_script", | 
 |     outs = ["generate_workarounds.py"], | 
 |     cmd = "echo '%s' > $@" % _GENERATE_WORKAROUNDS, | 
 |     exec_tools = [":build_workaround_header"], | 
 | ) |