# This file contains the build configurations of Skia that we use for testing on the CI.
# These allow a short-form reference for our supported combinations of build features.
# https://bazel.build/docs/bazelrc#config
#
# For most build configurations, we will want to set the --cc_output_directory_tag [1]
# with a unique identifier per configuration name.
#
# By default, Bazel's "unique target BuildConfiguration" [2] incorporates the compilation_mode,
# the target platform, and some suffixes to avoid Bazel-caused and user-caused conflicts. [3] [4]
# For example, a default output directory might look like "k8-fastbuild-ST-6a54c1377847".
# Inside this output directory is a subfolder for the target (e.g. executable) name.
#
# Notably, the flags that we turn on and off via //bazel/common_config_settings do not affect
# the output directory. The output directory is used to store compiled object files (.o files)
# and generated dependency files (e.g. the output of clang --write-dependencies [5]), so having
# these be overwritten unnecessarily will slow down incremental rebuilds when switching between
# building different configurations of the same targets.
#
# [1] https://bazel.build/reference/command-line-reference#flag--cc_output_directory_tag
# [2] https://bazel.build/docs/output_directories#layout-diagram
# [3] https://github.com/bazelbuild/bazel/blob/ad37a3748c78e0ee903b56366322c70ab8b22187/CODEBASE.md#the-structure-of-the-output-directory
# [4] https://github.com/bazelbuild/bazel/blob/e0e589658463beb9605030b4820dcc97e6a36f48/src/main/java/com/google/devtools/build/lib/analysis/config/OutputDirectories.java#L198-L236
# [5] https://clang.llvm.org/docs/ClangCommandLineReference.html#dependency-file-generation

# =============================================================================
# Targets (what to build for)
# =============================================================================

# --platforms refers to the target for which we are compiling. By setting the target to be a
# platform which has our own custom constraint_setting and constraint_value
# (skia_hermetic_toolchain=use_hermetic_toolchain), this causes Bazel to resolve the toolchain
# to be our hermetic one because our hermetic toolchains have that same constraint set in their
# target_compatible_with list.
build:for_linux_x64 --platforms=//bazel/platform:linux_x64_hermetic --cc_output_directory_tag=linux_x64
build:for_linux_x64_with_rbe --config=for_linux_x64 --config=linux_rbe

build:for_mac_arm64 --platforms=//bazel/platform:mac_arm64_hermetic --cc_output_directory_tag=mac_arm64
build:for_mac_x64 --platforms=//bazel/platform:mac_x64_hermetic --cc_output_directory_tag=mac_x64
# some aliases using more common lingo
build:for_mac_m1 --config=for_mac_arm64
build:for_mac_intel --config=for_mac_x64


# =============================================================================
# Configurations (what features we want on)
# =============================================================================
# These are examples of the syntax to create build configurations. As of May 2022, our
# Bazel configurations are still being made.
build:release --compilation_mode=opt
build:debug --compilation_mode=dbg

# See also https://github.com/emscripten-core/emsdk/issues/984 for disabling cc_toolchain_resolution
build:canvaskit_full --noincompatible_enable_cc_toolchain_resolution \
                     --include_decoder=gif_decode_codec --include_decoder=jpeg_decode_codec \
                     --include_decoder=png_decode_codec --include_decoder=webp_decode_codec \
                     \
                     --include_encoder=jpeg_encode_codec --include_encoder=png_encode_codec \
                     --include_encoder=webp_encode_codec \
                     \
                     --with_harfbuzz --with_icu --fontmgr_factory=custom_embedded_fontmgr_factory \
                     --ck_enable_fonts --ck_enable_embedded_font \
                     \
                     --disable_tracing --enable_sksl_tracing \
                     \
                     --ck_enable_canvas_polyfill --ck_enable_skp_serialization --ck_enable_skottie \
                     --ck_enable_particles --ck_enable_runtime_effect --ck_enable_matrix_js

build:ck_webgl2 --with_gl_standard=webgl_standard --gpu_backend=gl_backend \
                --disable_legacy_shader_context
# CPU build needs legacy shader context otherwise SkPerlinNoiseShader does not render
build:ck_cpu --enable_sksl --enable_legacy_shader_context

build:ck_full_webgl2_release --config=canvaskit_full --config=ck_webgl2 --config=release
build:ck_full_webgl2_debug --config=canvaskit_full --config=ck_webgl2 --config=debug
build:ck_full_cpu_release --config=canvaskit_full --config=ck_cpu --config=release
build:ck_full_cpu_debug --config=canvaskit_full --config=ck_cpu --config=debug
# TODO(kjlubick) We should be able to configure testing on Chrome or Firefox with this.
build:ck_full_webgl2_release_chrome --config=ck_full_webgl2_release
build:ck_full_cpu_release_chrome --config=ck_full_cpu_release

# We only want to enforce IWYU on debug builds because we have some things that are only
# necessary to include in debug mode (e.g. SkDEBUGCODE), but very rarely something that is
# only needed in release mode. Thus our C++ debug includes should be a superset of the
# release includes.
build:enforce_iwyu --features=skia_enforce_iwyu --cc_output_directory_tag=iwyu \
                   --compilation_mode=dbg --keep_going \
                   --with_gl_standard=gl_standard --gpu_backend=gl_backend \
                   --gpu_backend=vulkan_backend --gpu_backend=dawn_backend \
                   --include_fontmgr=custom_directory_fontmgr --include_fontmgr=custom_embedded_fontmgr \
                   --include_fontmgr=custom_empty_fontmgr --fontmgr_factory=custom_directory_fontmgr_factory \
                   --include_decoder=avif_decode_codec --include_decoder=gif_decode_codec \
                   --include_decoder=jpeg_decode_codec --include_decoder=jxl_decode_codec \
                   --include_decoder=png_decode_codec --include_decoder=raw_decode_codec \
                   --include_decoder=webp_decode_codec \
                   --include_encoder=jpeg_encode_codec --include_encoder=png_encode_codec \
                   --include_encoder=webp_encode_codec \
                   --with_harfbuzz --with_icu \
                   --enable_sksl_tracing \
                   --enable_svg_canvas --enable_pdf_backend
