| # 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. | |
| # | |
| # Note that multiple definitions of a config are allowed - in this event, they are added together. | |
| # This is handy if we need to comment on why certain settings are necessary. Otherwise, escaping | |
| # the trailing newline (and thus having a multi-line definition) is preferred for brevity. | |
| # | |
| # 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_debug --platforms=//bazel/platform:linux_x64_hermetic \ | |
| --compilation_mode=dbg \ | |
| --cc_output_directory_tag=linux_x64_debug | |
| build:for_linux_x64_release --platforms=//bazel/platform:linux_x64_hermetic \ | |
| --compilation_mode=opt \ | |
| --cc_output_directory_tag=linux_x64_release | |
| build:for_linux_x64_fastbuild --platforms=//bazel/platform:linux_x64_hermetic \ | |
| --compilation_mode=fastbuild \ | |
| --cc_output_directory_tag=linux_x64_fastbuild | |
| build:for_linux_x64_debug_with_rbe --config=for_linux_x64_debug --config=linux_rbe | |
| build:for_linux_x64_release_with_rbe --config=for_linux_x64_release --config=linux_rbe | |
| build:for_linux_x64_fastbuild_with_rbe --config=for_linux_x64_fastbuild --config=linux_rbe | |
| # Shorter config names defaulting to fastbuild (same default as --compilation_mode, see | |
| # https://bazel.build/docs/user-manual#compilation-mode). | |
| build:for_linux_x64 --config=for_linux_x64_fastbuild | |
| build:for_linux_x64_with_rbe --config=for_linux_x64_fastbuild_with_rbe | |
| build:for_mac_arm64_debug --platforms=//bazel/platform:mac_arm64_hermetic \ | |
| --compilation_mode=dbg \ | |
| --cc_output_directory_tag=mac_arm64_debug | |
| build:for_mac_arm64_release --platforms=//bazel/platform:mac_arm64_hermetic \ | |
| --compilation_mode=opt \ | |
| --cc_output_directory_tag=mac_arm64_release | |
| build:for_mac_arm64_fastbuild --platforms=//bazel/platform:mac_arm64_hermetic \ | |
| --compilation_mode=fastbuild \ | |
| --cc_output_directory_tag=mac_arm64_fastbuild | |
| build:for_mac_x64_debug --platforms=//bazel/platform:mac_x64_hermetic \ | |
| --compilation_mode=dbg \ | |
| --cc_output_directory_tag=mac_x64_debug | |
| build:for_mac_x64_release --platforms=//bazel/platform:mac_x64_hermetic \ | |
| --compilation_mode=opt \ | |
| --cc_output_directory_tag=mac_x64_release | |
| build:for_mac_x64_fastbuild --platforms=//bazel/platform:mac_x64_hermetic \ | |
| --compilation_mode=fastbuild \ | |
| --cc_output_directory_tag=mac_x64_fastbuild | |
| build:for_windows_x64_debug --platforms=//bazel/platform:windows_x64_hermetic \ | |
| --compilation_mode=dbg \ | |
| --cc_output_directory_tag=windows_x64_debug | |
| build:for_windows_x64_release --platforms=//bazel/platform:windows_x64_hermetic \ | |
| --compilation_mode=opt \ | |
| --cc_output_directory_tag=windows_x64_release | |
| build:for_windows_x64_fastbuild --platforms=//bazel/platform:windows_x64_hermetic \ | |
| --compilation_mode=fastbuild \ | |
| --cc_output_directory_tag=windows_x64_fastbuild | |
| # Shorter config names defaulting to fastbuild (same default as --compilation_mode, see | |
| # https://bazel.build/docs/user-manual#compilation-mode). | |
| build:for_mac_arm64 --config=for_mac_arm64_fastbuild | |
| build:for_mac_x64 --config=for_mac_x64_fastbuild | |
| # Some aliases using more common lingo. | |
| build:for_mac_m1 --config=for_mac_arm64 | |
| build:for_mac_intel --config=for_mac_x64 | |
| # Android configuration for 32-bit ARM (armeabi-v7a ABI). | |
| build:for_android_arm32_debug --platforms=//bazel/platform:android_arm32 \ | |
| --compilation_mode=dbg \ | |
| --cc_output_directory_tag=android_arm32_debug | |
| build:for_android_arm32_release --platforms=//bazel/platform:android_arm32 \ | |
| --compilation_mode=opt \ | |
| --cc_output_directory_tag=android_arm32_release | |
| build:for_android_arm32_fastbuild --platforms=//bazel/platform:android_arm32 \ | |
| --compilation_mode=fastbuild \ | |
| --cc_output_directory_tag=android_arm32_fastbuild | |
| build:for_android_arm32_debug_with_rbe --config=for_android_arm32_debug --config=linux_rbe | |
| build:for_android_arm32_release_with_rbe --config=for_android_arm32_release --config=linux_rbe | |
| build:for_android_arm32_fastbuild_with_rbe --config=for_android_arm32_fastbuild --config=linux_rbe | |
| # Shorter config names defaulting to fastbuild (same default as --compilation_mode, see | |
| # https://bazel.build/docs/user-manual#compilation-mode). | |
| build:for_android_arm32 --config=for_android_arm32_fastbuild | |
| build:for_android_arm32_with_rbe --config=for_android_arm32_fastbuild_with_rbe | |
| build:android_arm32_rbe --config=for_android_arm32_fastbuild_with_rbe | |
| # Android configuration for 64-bit ARM (arm64-v8a ABI). | |
| build:for_android_arm64_debug --platforms=//bazel/platform:android_arm64 \ | |
| --compilation_mode=dbg \ | |
| --cc_output_directory_tag=android_arm64_debug | |
| build:for_android_arm64_release --platforms=//bazel/platform:android_arm64 \ | |
| --compilation_mode=opt \ | |
| --cc_output_directory_tag=android_arm64_release | |
| build:for_android_arm64_fastbuild --platforms=//bazel/platform:android_arm64 \ | |
| --compilation_mode=fastbuild \ | |
| --cc_output_directory_tag=android_arm64_fastbuild | |
| build:for_android_arm64_debug_with_rbe --config=for_android_arm64_debug --config=linux_rbe | |
| build:for_android_arm64_release_with_rbe --config=for_android_arm64_release --config=linux_rbe | |
| build:for_android_arm64_fastbuild_with_rbe --config=for_android_arm64_fastbuild --config=linux_rbe | |
| # Shorter config names defaulting to fastbuild (same default as --compilation_mode, see | |
| # https://bazel.build/docs/user-manual#compilation-mode). | |
| build:for_android_arm64 --config=for_android_arm64_fastbuild | |
| build:for_android_arm64_with_rbe --config=for_android_arm64_fastbuild_with_rbe | |
| build:android_rbe --config=for_android_arm64_fastbuild_with_rbe | |
| #IOS configs | |
| build:for_ios --platforms=//bazel/platform:ios --compilation_mode=dbg --cc_output_directory_tag=ios_arm64_fastbuild | |
| # ============================================================================= | |
| # 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 \ | |
| --ck_enable_fonts --ck_enable_embedded_font \ | |
| \ | |
| --ck_enable_canvas_polyfill --ck_enable_skp_serialization --ck_enable_skottie \ | |
| --ck_enable_runtime_effect --ck_enable_matrix_js \ | |
| --cxxopt=-w --cxxopt=-std=c++20 | |
| build:ck_webgl2 --ck_enable_webgl | |
| 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=release | |
| build:ck_full_cpu_debug --config=canvaskit_full --config=debug | |
| build:ck_full_webgl2_release_debugger --config=canvaskit_full --config=ck_webgl2 \ | |
| --config=release --ck_include_debugger | |
| # 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 | |
| build:use_linux_rbe_pool --config=linux_rbe --remote_download_minimal | |
| build:cpu_only --cc_output_directory_tag=cpu_tests | |
| build:cpu_only_debug --config=cpu --config=debug | |
| build:cpu_only_release --config=cpu --config=release | |
| build:cpu_only_debug_rbe --config=cpu_only_debug --config=use_linux_rbe_pool | |
| build:cpu_only_release_rbe --config=cpu_only_release --config=use_linux_rbe_pool | |
| build:gl_ganesh --enable_gpu_test_utils --gpu_backend=gl_ganesh \ | |
| --cc_output_directory_tag=gl_ganesh | |
| # We need to have this environment variable set when testing our Ganesh GL backend on Unix, | |
| # otherwise, we get "Failed to open X display." and connect make a GL context for testing. | |
| build:gl_ganesh --action_env=DISPLAY=:1 | |
| build:vulkan_ganesh --enable_gpu_test_utils --gpu_backend=vulkan_ganesh \ | |
| --cc_output_directory_tag=vulkan_ganesh | |
| build:metal_ganesh --enable_gpu_test_utils --gpu_backend=metal_ganesh\ | |
| --cc_output_directory_tag=metal_ganesh | |
| # Short-hand aliases | |
| build:cpu --config=cpu_only | |
| build:gl --config=gl_ganesh | |
| build:vk --config=vulkan_ganesh | |
| # We would ideally like to remove the SKSL_STANDALONE define one day, | |
| # but it is needed by SkRasterPipelineBuilder when being compiled for GN | |
| build:compile_sksl --cc_output_directory_tag=compile_sksl \ | |
| --compilation_mode=opt --//src/core:load_sksl_from_disk --copt="-DSKSL_STANDALONE=1" \ |