load("//bazel:flags.bzl", "bool_flag", "selects", "string_flag_with_values") licenses(["notice"]) # @platforms is found at https://github.com/bazelbuild/platforms package(default_visibility = ["//:__subpackages__"]) config_setting( name = "linux_x64", constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:linux", ], ) # Apple devices with intel processors released before the shift to the M1 chip # will use this config setting. config_setting( name = "mac_x64", constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:macos", ], ) # M1 Macs (and later) will use this setting. config_setting( name = "mac_arm64", constraint_values = [ "@platforms//cpu:arm64", "@platforms//os:macos", ], ) config_setting( name = "windows_x64", constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:windows", ], ) config_setting( name = "linux_arm64", constraint_values = [ "@platforms//cpu:arm64", "@platforms//os:linux", ], ) config_setting( name = "debug_build", values = {"compilation_mode": "dbg"}, ) config_setting( name = "fast_build", values = {"compilation_mode": "fastbuild"}, ) config_setting( name = "release_build", values = {"compilation_mode": "opt"}, ) constraint_value( name = "fuchsia", constraint_setting = "@platforms//os:os", ) config_setting( name = "fuchsia_arm64", constraint_values = [ "@platforms//cpu:arm64", ":fuchsia", ], ) # We define this here because the emscripten toolchain calls the cpu wasm, whereas the # bazelbuild/platforms call it wasm32. https://github.com/emscripten-core/emsdk/issues/919 config_setting( name = "cpu_wasm", values = { "cpu": "wasm", }, ) selects.config_setting_group( name = "release_build_mac", match_all = [ "@platforms//os:macos", ":release_build", ], visibility = ["//:__subpackages__"], ) selects.config_setting_group( name = "release_build_linux", match_all = [ "@platforms//os:linux", ":release_build", ], visibility = ["//:__subpackages__"], ) selects.config_setting_group( name = "fast_build_mac", match_all = [ "@platforms//os:macos", ":fast_build", ], visibility = ["//:__subpackages__"], ) selects.config_setting_group( name = "fast_build_linux", match_all = [ "@platforms//os:linux", ":fast_build", ], visibility = ["//:__subpackages__"], ) # ============================================================================= # Configurable Skia Features # ============================================================================= # These are flags that we can specify when invoking bazel build to turn on and # off certain features, such as GPU backend, or codec support. # https://bazel.build/rules/config#defining-build-settings # For example, to enable harfbuzz and icu, one would run # bazel build //:skia-core --//bazel/common_config_settings:use_harfbuzz \ # --//bazel/common_config_settings:use_icu # This is a bit wordy, so we define aliases in the //.bazelrc file that condense this to # bazel build //:skia-core --with_harfbuzz --with_icu # # Developers can specify their own short-hands by making a .bazelrc file in their home # directory. https://bazel.build/docs/bazelrc#bazelrc-file-locations # # We check in some Bazel configs for "blessed builds" in //bazel/buildrc. # # We can also define flags closer to where they have the most impact. For example # //src/pdf:enable_pdf_backend. string_flag_with_values( name = "fontmgr_factory", default = "empty_fontmgr_factory", values = [ "android_fontmgr_factory", # Makes the default SkFontMgr load fonts from a hard-coded directory on disk. "custom_directory_fontmgr_factory", # Makes the default SkFontMgr load fonts from an SkEmbeddedResource that has been compiled # into the binary, e.g. with //tools/embed_resources.py "custom_embedded_fontmgr_factory", # Makes the default SkFontMgr return empty fonts (e.g. SkTypeface_Empty). This is typically # used when someone wants to make their own custom SkFontMgr objects, but does not want the # default SkFontMgr to do anything (e.g. force usage of the custom one). "custom_empty_fontmgr_factory", # Makes the default SkFontMgr return null. Typically used when font support is not desired. "empty_fontmgr_factory", "fontconfig_fontmgr_factory", # Deprecated, do not use. "fci_fontmgr_factory", ], ) # These flags need only be set if additional functionality beyond the fontmgr_factory flag is # required. For example, the setting fontmgr_factory to custom_embedded_fontmgr_factory does not # require setting include_fontmgr to custom_embedded_fontmgr, because those sources and settings # will already be compiled in due to the _factory flag. string_flag_with_values( name = "include_fontmgr", multiple = True, values = [ "android_fontmgr", # Allows the construction of an SkFontMgr that loads files from a programmatically # defined directory on disk. "custom_directory_fontmgr", # Allows the construction of an SkFontMgr which can load fonts from an SkEmbeddedResource # or from another source of raw bytes. "custom_embedded_fontmgr", # Allows the construction of an SkFontMgr which returns empty fonts. "custom_empty_fontmgr", "fontconfig_fontmgr", # Deprecated, do not use. "fci_fontmgr", ], ) bool_flag( # This is necessary because Bazel provides no way to compile header files on their own name = "compile_generated_cpp_files_for_headers", default = False, ) bool_flag( name = "enable_effect_serialization", default = True, ) bool_flag( name = "enable_tracing", # See SkTraceEventCommon.h for more on this type of tracing. default = True, ) bool_flag( name = "use_harfbuzz", default = False, ) bool_flag( name = "use_icu", default = False, ) # These are some helpers to mean "either the fontmgr was enabled or its factory was" selects.config_setting_group( name = "uses_android_fontmgr", match_any = [ ":android_fontmgr", ":android_fontmgr_factory", ], ) selects.config_setting_group( name = "uses_custom_directory_fontmgr", match_any = [ ":custom_directory_fontmgr", ":custom_directory_fontmgr_factory", ], ) selects.config_setting_group( name = "uses_custom_embedded_fontmgr", match_any = [ ":custom_embedded_fontmgr", ":custom_embedded_fontmgr_factory", ], ) selects.config_setting_group( name = "uses_custom_empty_fontmgr", match_any = [ ":custom_empty_fontmgr", ":custom_empty_fontmgr_factory", ], ) selects.config_setting_group( name = "uses_fontconfig_fontmgr", match_any = [ ":fontconfig_fontmgr", ":fontconfig_fontmgr_factory", ], ) selects.config_setting_group( name = "uses_fci_fontmgr", match_any = [ ":fci_fontmgr", ":fci_fontmgr_factory", ], )