blob: 893cd224a9ed8f4c75191961a4b3c275285ce2bf [file] [log] [blame]
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",
],
)