# bazel configurations for tensorboard plugin build.
build --repo_env=TF_PYTHON_VERSION=3.10
build --experimental_repo_remote_exec
build --cxxopt=-std=c++17
build --host_cxxopt=-std=c++17
build --noenable_bzlmod

build --incompatible_enable_cc_toolchain_resolution
build --repo_env USE_HERMETIC_CC_TOOLCHAIN=1

# TODO: Migrate for https://github.com/bazelbuild/bazel/issues/7260
build:clang_local --noincompatible_enable_cc_toolchain_resolution
build:clang_local --repo_env USE_HERMETIC_CC_TOOLCHAIN=0

build:macos --apple_platform_type=macos
build:macos --copt=-DGRPC_BAZEL_BUILD

# Bazel 7.0.0 no longer supports dynamic symbol lookup on macOS. To resolve
# undefined symbol errors in macOS arm64 builds, explicitly add the necessary
# linker flags until dependencies are well defined. See
# https://github.com/bazelbuild/bazel/issues/19730.
build:macos --linkopt=-Wl,-undefined,dynamic_lookup
build:macos --host_linkopt=-Wl,-undefined,dynamic_lookup
build:macos --config=clang_local
build:macos --apple_crosstool_top=@local_config_apple_cc//:toolchain
build:macos --crosstool_top=@local_config_apple_cc//:toolchain
build:macos --host_crosstool_top=@local_config_apple_cc//:toolchain

# XLA uses M_* math constants that only get defined by MSVC headers if
# _USE_MATH_DEFINES is defined. We use -D for clang compatibility.
build:windows --copt=-D_USE_MATH_DEFINES
build:windows --host_copt=-D_USE_MATH_DEFINES
# Bypasses MSVC standard library static assertions that enforce a minimum Clang version,
# allowing Clang 18 to compile against MSVC 14.44 (latest VS 2022 updates) to match XLA.
build:windows --copt=-D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH
build:windows --host_copt=-D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH
# Make sure to include as little of windows.h as possible
build:windows --copt=-DWIN32_LEAN_AND_MEAN
build:windows --host_copt=-DWIN32_LEAN_AND_MEAN
build:windows --copt=-DNOGDI
build:windows --host_copt=-DNOGDI
build:windows --incompatible_strict_action_env=true

# Windows x86 CI configs
build:ci_windows_amd64 --crosstool_top="@xla//tools/toolchains/win2022/20241118:toolchain"
build:ci_windows_amd64 --extra_toolchains="@xla//tools/toolchains/win2022/20241118:cc-toolchain-x64_windows-clang-cl"
build:ci_windows_amd64 --color=yes
build:ci_windows_amd64 --enable_runfiles


# Fixes C++17 and /FORCE:MULTIPLE for clang-cl without passing raw MSVC flags into WASM cross-compilation toolchain.
# Inject MSVC flags via environment variables that emcc seamlessly ignores
build:ci_windows_amd64 --action_env=_CL_="/std:c++17 /Zc:__cplusplus"
build:ci_windows_amd64 --host_action_env=_CL_="/std:c++17 /Zc:__cplusplus"
build:ci_windows_amd64 --copt=-D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH
build:ci_windows_amd64 --host_copt=-D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH
build:ci_windows_amd64 --action_env=_LINK_="/FORCE:MULTIPLE"
build:ci_windows_amd64 --host_action_env=_LINK_="/FORCE:MULTIPLE"

# #############################################################################
# RBE config options below. These inherit the CI configs above and set the
# remote execution backend and authentication options required to run builds
# with RBE. Linux x86 and Windows builds use RBE.
# Based off of https://github.com/tensorflow/tensorflow/blob/master/.bazelrc
# #############################################################################

# Allow creation of resultstore URLs for any bazel invocation
build:resultstore --google_default_credentials
build:resultstore --bes_backend=buildeventservice.googleapis.com
build:resultstore --bes_instance_name="tensorflow-testing"
build:resultstore --bes_results_url="https://source.cloud.google.com/results/invocations"
build:resultstore --bes_timeout=600s

build:avx_linux --copt=-mavx
build:avx_linux --host_copt=-mavx
build:avx_linux --copt=-Wno-error=array-parameter
build:avx_linux --copt=-w

# Flag to enable remote config
common --experimental_repo_remote_exec

# Temporary flag to ensure ci_linux_x86_64 config still exists
build:ci_linux_x86_64 --color=yes

# Make Bazel not try to probe the host system for a C++ toolchain.
build:rbe_base --config=resultstore
build:rbe_base --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
build:rbe_base --define=EXECUTOR=remote
build:rbe_base --jobs=800
build:rbe_base --remote_executor=grpcs://remotebuildexecution.googleapis.com
build:rbe_base --remote_timeout=3600
build:rbe_base --spawn_strategy=remote,worker,standalone,local
# Attempt to minimize the amount of data transfer between bazel and the remote
# workers:
build:rbe_base --remote_download_toplevel
test:rbe_base --test_env=USER=anon

build:rbe_linux --extra_execution_platforms="@ubuntu20.04-clang_manylinux2014-cuda12.3-cudnn9.1_config_platform//:platform"
build:rbe_linux --host_platform="@ubuntu20.04-clang_manylinux2014-cuda12.3-cudnn9.1_config_platform//:platform"
build:rbe_linux --platforms="@ubuntu20.04-clang_manylinux2014-cuda12.3-cudnn9.1_config_platform//:platform"
build:rbe_linux --config=rbe_base
build:rbe_linux --action_env=PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin"
# Non-rbe settings we should include because we do not run configure
build:rbe_linux --linkopt=-lrt
build:rbe_linux --host_linkopt=-lrt
build:rbe_linux --linkopt=-lm
build:rbe_linux --host_linkopt=-lm

build:rbe_linux_cpu --config=rbe_linux
build:rbe_linux_cpu --config=ci_linux_x86_64

# Python config is the same across all containers because the binary is the same
build:rbe_linux_cpu --python_path="/usr/bin/python3"
common:rbe_linux_cpu --remote_instance_name=projects/tensorflow-testing/instances/default_instance


# RBE configs for Windows
# Set the remote worker pool
common:rbe_windows_amd64 --remote_instance_name=projects/ml-oss-rbe-general/instances/default_instance

build:rbe_windows_amd64 --config=rbe_base

common:rbe_windows_amd64 --bes_instance_name="ml-oss-rbe-general"

# Set the host, execution, and target platform
build:rbe_windows_amd64 --host_platform="@xla//tools/toolchains/win2022:windows_ltsc2022_clang_new"
build:rbe_windows_amd64 --extra_execution_platforms="@xla//tools/toolchains/win2022:windows_ltsc2022_clang_new"
build:rbe_windows_amd64 --platforms="@xla//tools/toolchains/win2022:windows_ltsc2022_clang_new"

build:rbe_windows_amd64 --shell_executable=C:\\tools\\msys64\\usr\\bin\\bash.exe
build:rbe_windows_amd64 --define=override_eigen_strong_inline=true

# Don't build the python zip archive in the RBE build.
build:rbe_windows_amd64 --nobuild_python_zip

build:rbe_windows_amd64 --config=ci_windows_amd64

## AArch64 configs
build:ci_linux_aarch64 --color=yes
build:ci_linux_aarch64 --config=clang_local
build:ci_linux_aarch64 --repo_env=CC=clang

build:wasm --crosstool_top=//emscripten_toolchain:everything
build:wasm --cpu=wasm
build:wasm --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
build:wasm --copt=-msimd128
build:wasm --copt=-Wno-unused-command-line-argument
build:wasm --cxxopt=-std=c++17
build:wasm --host_cxxopt=-std=c++17

# #############################################################################
# Cache options below.
# #############################################################################
# Public read-only cache
build:public_cache --remote_cache="https://storage.googleapis.com/xprof-bazel-cache/" --remote_upload_local_results=false
# Cache pushes are limited to XProf's CI system.
build:public_cache_push --config=public_cache --remote_upload_local_results=true --google_default_credentials
