# 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

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
# 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

# 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=gif_decode_codec --include_decoder=jpeg_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
