| # Copyright 2019 The IREE Authors | 
 | # | 
 | # Licensed under the Apache License v2.0 with LLVM Exceptions. | 
 | # See https://llvm.org/LICENSE.txt for license information. | 
 | # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 |  | 
 | ############################################################################### | 
 | # Common flags that apply to all configurations. | 
 | # Use sparingly for things common to all compilers and platforms. | 
 | ############################################################################### | 
 | # Prevent invalid caching if input files are modified during a build. | 
 | build --experimental_guard_against_concurrent_changes | 
 | # Default to optimized builds | 
 | # Override via: "-c dbg" or --compilation_mode=dbg | 
 | build --compilation_mode=opt | 
 | # Legacy from when we depended on TensorFlow, might not be needed in IREE. | 
 | common --experimental_repo_remote_exec | 
 | # Actually printing output on errors is... a useful default | 
 | test --test_output=errors | 
 |  | 
 | # Includes a startup option, so we can't put this in a config, but it doesn't | 
 | # hurt anything on non-windows platforms. | 
 | # Enables unix-style runfiles link trees on Windows. Requires enabling symlink | 
 | # permissions: Enable Developer Mode in the Developer Settings page of the | 
 | # system settings. See | 
 | # https://docs.bazel.build/versions/master/windows.html#enable-symlink-support | 
 | # and https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ | 
 | startup --windows_enable_symlinks | 
 | build --enable_runfiles | 
 |  | 
 | # TODO: Transition to the explicit init_py mechanism. See #2405 | 
 | # This is commented out while considering transition path but left as a | 
 | # breadcrumb. | 
 | # build --incompatible_default_to_explicit_init_py | 
 |  | 
 | # Disable split PIC/non-PIC build graphs and disable heuristic to link binaries | 
 | # dynamically by default. See: https://github.com/openxla/iree/issues/13470 | 
 | build --dynamic_mode=off | 
 | build --force_pic | 
 |  | 
 | ############################################################################### | 
 | # Build settings flag aliases. See https://bazel.build/rules/config | 
 | ############################################################################### | 
 | build --flag_alias=iree_drivers=//runtime/src/iree/hal/drivers:enabled_drivers | 
 | build --flag_alias=iree_link_compiler_shared=//compiler/src/iree/compiler/API:link_shared | 
 | # Equivalent to CMake flag IREE_ENABLE_RUNTIME_TRACING. | 
 | # Builds the runtime with tracing support enabled. | 
 | build --flag_alias=iree_enable_runtime_tracing=@tracy_client//:runtime_enable | 
 |  | 
 | ############################################################################### | 
 | # Options for "generic_gcc" builds | 
 | ############################################################################### | 
 |  | 
 | # C++17 standard version is required. | 
 | build:generic_gcc --cxxopt=-std=c++17 --host_cxxopt=-std=c++17 | 
 |  | 
 | # TODO: OSS assert builds of TF became non functional around 1/27/2022. RIP. | 
 | # Default to adding back asserts in optimized builds. | 
 | # This is a good compromise between runtime and debugability. | 
 | #build:generic_gcc --copt=-UNDEBUG | 
 |  | 
 | # Disable warnings we don't care about or that generally have a low signal/noise | 
 | # ratio. | 
 | build:generic_gcc --copt=-Wno-unused-but-set-parameter | 
 | build:generic_gcc --copt=-Wno-comment | 
 | build:generic_gcc --copt=-Wno-attributes | 
 |  | 
 | ############################################################################### | 
 | # Options for "generic_clang" builds: these options should generally apply to | 
 | # either clang or gcc and are curated based on need. | 
 | ############################################################################### | 
 |  | 
 | # C++17 standard version is required. | 
 | build:generic_clang --cxxopt=-std=c++17 --host_cxxopt=-std=c++17 | 
 |  | 
 | # TODO: OSS assert builds of TF became non functional around 1/27/2022. RIP. | 
 | # Default to adding back asserts in optimized builds. | 
 | # This is a good compromise between runtime and debugability. | 
 | #build:generic_clang --copt=-UNDEBUG | 
 |  | 
 | # Treat warnings as errors... | 
 | build:generic_clang --copt=-Werror --host_copt=-Werror | 
 | # ...and silence them outside of the workspace. | 
 | build:generic_clang --per_file_copt=external/.*@-w | 
 | # ...and silence them on host builds. There is no host_per_file_copt and | 
 | # everything we build in the host configuration we either also build in the | 
 | # target configuration or is external, so we can't control it. | 
 | # If/when Bazel supports --host_per_file_copt, we could use that instead: | 
 | # https://github.com/bazelbuild/bazel/issues/12406. | 
 | # Would need to then make all the --copt below duplicated with --host_copt. | 
 | build:generic_clang --host_copt=-w | 
 |  | 
 | # Set clang diagnostics. These largely match the set of warnings used within | 
 | # Google. They have not been audited super carefully by the IREE team but are | 
 | # generally thought to be a good set and consistency with those used internally | 
 | # is very useful when importing. If you feel that some of these should be | 
 | # different, please raise an issue! | 
 |  | 
 | # Please keep these in sync with build_tools/cmake/iree_copts.cmake | 
 |  | 
 | build:generic_clang --copt=-Wall | 
 |  | 
 | # Disable warnings we don't care about or that generally have a low signal/noise | 
 | # ratio. | 
 | build:generic_clang --copt=-Wno-ambiguous-member-template | 
 | build:generic_clang --copt=-Wno-char-subscripts | 
 | build:generic_clang --copt=-Wno-extern-c-compat # Matches upstream. Cannot impact due to extern C inclusion method. | 
 | build:generic_clang --copt=-Wno-gnu-alignof-expression | 
 | build:generic_clang --copt=-Wno-gnu-variable-sized-type-not-at-end | 
 | build:generic_clang --copt=-Wno-ignored-optimization-argument | 
 | build:generic_clang --copt=-Wno-invalid-offsetof # Technically UB but needed for intrusive ptrs | 
 | build:generic_clang --copt=-Wno-invalid-source-encoding | 
 | build:generic_clang --copt=-Wno-mismatched-tags | 
 | build:generic_clang --copt=-Wno-pointer-sign | 
 | build:generic_clang --copt=-Wno-reserved-user-defined-literal | 
 | build:generic_clang --copt=-Wno-return-type-c-linkage | 
 | build:generic_clang --copt=-Wno-self-assign-overloaded | 
 | build:generic_clang --copt=-Wno-sign-compare | 
 | build:generic_clang --copt=-Wno-signed-unsigned-wchar | 
 | build:generic_clang --copt=-Wno-strict-overflow | 
 | build:generic_clang --copt=-Wno-trigraphs | 
 | build:generic_clang --copt=-Wno-unknown-pragmas | 
 | build:generic_clang --copt=-Wno-unknown-warning-option | 
 | build:generic_clang --copt=-Wno-unused-command-line-argument | 
 | build:generic_clang --copt=-Wno-unused-const-variable | 
 | build:generic_clang --copt=-Wno-unused-function | 
 | build:generic_clang --copt=-Wno-unused-local-typedef | 
 | build:generic_clang --copt=-Wno-unused-private-field | 
 | build:generic_clang --copt=-Wno-user-defined-warnings | 
 |  | 
 | # Explicitly enable some additional warnings. | 
 | # Some of these aren't on by default, or under -Wall, or are subsets of warnings | 
 | # turned off above. | 
 | build:generic_clang --copt=-Wc++20-extensions | 
 | build:generic_clang --copt=-Wctad-maybe-unsupported | 
 | build:generic_clang --copt=-Wfloat-overflow-conversion | 
 | build:generic_clang --copt=-Wfloat-zero-conversion | 
 | build:generic_clang --copt=-Wfor-loop-analysis | 
 | build:generic_clang --copt=-Wformat-security | 
 | build:generic_clang --copt=-Wgnu-redeclared-enum | 
 | build:generic_clang --copt=-Wimplicit-fallthrough | 
 | build:generic_clang --copt=-Winfinite-recursion | 
 | build:generic_clang --copt=-Wliteral-conversion | 
 | build:generic_clang --copt=-Wnon-virtual-dtor | 
 | build:generic_clang --copt=-Woverloaded-virtual | 
 | build:generic_clang --copt=-Wself-assign | 
 | build:generic_clang --copt=-Wstring-conversion | 
 | build:generic_clang --copt=-Wtautological-overlap-compare | 
 | build:generic_clang --copt=-Wthread-safety | 
 | build:generic_clang --copt=-Wthread-safety-beta | 
 | build:generic_clang --copt=-Wunused-comparison | 
 | build:generic_clang --copt=-Wvla | 
 |  | 
 | # Treat backrefs during linking as errors. | 
 | build:generic_clang --linkopt=-Wl,--warn-backrefs | 
 | build:generic_clang --linkopt=-Wl,--fatal-warnings | 
 |  | 
 | ############################################################################### | 
 | # Additional options for MacOS based clang builds. | 
 | # Try to keep these scoped to exclusions for third_party code and prefer | 
 | # fixing issues local to the project. | 
 | ############################################################################### | 
 |  | 
 | build:macos_clang --config=generic_clang | 
 | build:macos_clang --per_file_copt=utils@-Wno-range-loop-analysis | 
 |  | 
 | build:macos_clang_release --config=macos_clang | 
 | build:macos_clang_release --per_file_copt=utils@-Wno-range-loop-analysis | 
 | build:macos_clang_release --compilation_mode=opt | 
 | build:macos_clang_release --copt=-DNDEBUG | 
 |  | 
 | ############################################################################### | 
 | # Additional options for release builds. These do *not* automatically pull in | 
 | # the corresponding compiler config (e.g. generic_clang) because this is likely | 
 | # to already be set in the user's configured.bazelrc and setting a config twice | 
 | # causes flags to be passed twice. | 
 | ############################################################################### | 
 | build:generic_clang_release --compilation_mode=opt | 
 | build:generic_clang_release --copt=-DNDEBUG | 
 | build:generic_clang_release --linkopt=-Wl,--strip-all | 
 | build:generic_gcc_release --compilation_mode=opt | 
 | build:generic_gcc_release --copt=-DNDEBUG | 
 | build:generic_gcc_release --linkopt=-Wl,--strip-all | 
 | # MSVC doesn't store symbols in the binary (they're in separate .pdb files), so | 
 | # nothing needs to be stripped. | 
 | build:msvc_release --compilation_mode=opt | 
 |  | 
 | ############################################################################### | 
 | # Options for building with address sanitizer. | 
 | # https://github.com/google/sanitizers/wiki/AddressSanitizer | 
 | ############################################################################### | 
 |  | 
 | # ASAN (address sanitizer) | 
 | # https://clang.llvm.org/docs/AddressSanitizer.html | 
 | build:asan --config=sanitizer | 
 | build:asan --features=asan | 
 | build:asan --copt=-fsanitize=address | 
 | build:asan --copt=-fsanitize-address-use-after-scope | 
 | build:asan --linkopt=-fsanitize=address | 
 | build:asan --cc_output_directory_tag=asan | 
 | build:asan --copt=-DADDRESS_SANITIZER | 
 |  | 
 | # MSAN (memory sanitizer) | 
 | # https://clang.llvm.org/docs/MemorySanitizer.html | 
 | build:msan --config=sanitizer | 
 | build:msan --features=msan | 
 | build:msan --copt=-fsanitize=memory | 
 | build:msan --copt=-fsanitize-memory-track-origins | 
 | build:msan --linkopt=-fsanitize=memory | 
 | build:msan --cc_output_directory_tag=msan | 
 | build:msan --copt=-DMEMORY_SANITIZER | 
 |  | 
 | # TSAN (thread sanitizer) | 
 | # https://clang.llvm.org/docs/ThreadSanitizer.html | 
 | build:tsan --config=sanitizer | 
 | build:tsan --features=tsan | 
 | build:tsan --copt=-fsanitize=thread | 
 | build:tsan --linkopt=-fsanitize=thread | 
 | build:tsan --cc_output_directory_tag=tsan | 
 | build:tsan --copt=-DTHREAD_SANITIZER | 
 |  | 
 | # UBSAN (undefined behavior sanitizer) | 
 | # https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html | 
 | build:ubsan --config=sanitizer | 
 | build:ubsan --features=ubsan | 
 | build:ubsan --copt=-fsanitize=undefined | 
 | build:ubsan --linkopt=-fsanitize=undefined | 
 | build:ubsan --linkopt=-lubsan | 
 | build:ubsan --cc_output_directory_tag=ubsan | 
 |  | 
 | # Don't strip debug info | 
 | build:sanitizer --strip=never | 
 | # Ignore settings of `linkopts = ["-static"]` which can screw up the sanitizer. | 
 | # We don't use this in IREE (that's what linkstatic is for), but it could show | 
 | # up in dependencies. | 
 | build:sanitizer --force_ignore_dash_static | 
 | # sanitizer tests tend to take longer, so increase the timeouts | 
 | build:sanitizer --test_timeout=120,600,1800,-1 | 
 | # Get better stack traces | 
 | build:sanitizer --copt=-fno-omit-frame-pointer | 
 |  | 
 | ############################################################################### | 
 | # Architecture specific options | 
 | ############################################################################### | 
 |  | 
 | # Enable some default cpu flags for x86 optimization. | 
 | build:x86opt --copt=-mavx2 | 
 |  | 
 | ############################################################################### | 
 | # Configuration for caching remotely using Remote Build Execution (RBE) | 
 | # https://cloud.google.com/remote-build-execution/ | 
 | # Based on https://github.com/bazelbuild/bazel-toolchains/blob/master/bazelrc/bazel-1.0.0.bazelrc | 
 | # Writing to the remote cache is limited to the CI to ensure a stable | 
 | # environment. Reading from the remote cache building in a place other than the | 
 | # CI is at your own risk. To do so pass `--noremote_upload_local_results` in | 
 | # addition to the config for the appropriate cache. | 
 | # We gave up on remote execution due to the amount of toolchain configuration | 
 | # required. | 
 | ############################################################################### | 
 |  | 
 | # Config for executing locally and caching the results to the remote cache. | 
 | # This requires permissions to write to the remote cache, which only the CI | 
 | # machines have. | 
 |  | 
 | # Enable authentication. This will pick up application default credentials by | 
 | # default. You can use --google_credentials=some_file.json to use a service | 
 | # account credential instead. | 
 | build:_remote_cache_base --google_default_credentials=true | 
 | # Point to the remote instance constructed in the iree-oss project | 
 | build:_remote_cache_base --remote_instance_name=projects/iree-oss/instances/default_instance | 
 |  | 
 | build:_remote_cache_base --remote_cache=grpcs://remotebuildexecution.googleapis.com | 
 |  | 
 | # --config=remote_cache_bazel_ci | 
 | build:remote_cache_bazel_ci --config=_remote_cache_base | 
 | # The cache key specifies the environment, which in this case points to the | 
 | # specific docker container the CI Bazel builds are run in. The image URL is | 
 | # included for clarity and so that this reference is automatically updated by | 
 | # manage_images.py | 
 | build:remote_cache_bazel_ci --host_platform_remote_properties_override='properties:{name:"cache-silo-key" value:"gcr.io/iree-oss/swiftshader-bleeding-edge@sha256:b3cce73eb9f41d67981bc8f00e98fd66fe3487caec1bcbf38d4039dcc61e499d"}' | 
 |  | 
 |  | 
 | ############################################################################### | 
 | # Configuration for uploading build results to Result Store UI | 
 | # https://cloud.google.com/remote-build-execution/docs/results-ui/getting-started-results-ui | 
 | # Can be used either with or without remote caching. | 
 | ############################################################################### | 
 |  | 
 | # Options for connecting to the IREE GCP remote build project. These are | 
 | # repeated separately from _remote_cache_base to avoid warnings about configs | 
 | # being expanded more than once when a remote caching config is used together | 
 | # with result store (even though the warnings are spurious). | 
 |  | 
 | build:rs --google_default_credentials=true | 
 | build:rs --remote_instance_name=projects/iree-oss/instances/default_instance | 
 |  | 
 | build:rs --bes_backend="buildeventservice.googleapis.com" | 
 | build:rs --bes_results_url="https://source.cloud.google.com/results/invocations/" | 
 | build:rs --project_id=iree-oss | 
 |  | 
 | ############################################################################### | 
 | # Windows specific flags for building with VC. | 
 | ############################################################################### | 
 |  | 
 | build:_msvc_base --define=iree_is_msvc=true | 
 |  | 
 | # Bazel gets confused and sometimes loses track of Bash. | 
 | build:_msvc_base --action_env BAZEL_SH='bash' | 
 |  | 
 | # Find the source of truth for these in iree_copts.cmake. | 
 | build:_msvc_base --copt=/DWIN32_LEAN_AND_MEAN | 
 | build:_msvc_base --copt=/DNOMINMAX | 
 | build:_msvc_base --copt=/D_USE_MATH_DEFINES | 
 | build:_msvc_base --copt=/D_CRT_SECURE_NO_WARNINGS | 
 | build:_msvc_base --copt=/D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES | 
 | build:_msvc_base --copt=/EHsc | 
 | build:_msvc_base --copt=/bigobj | 
 |  | 
 | build:_msvc_base --copt=/wd4200 | 
 | build:_msvc_base --copt=/wd4018 | 
 | build:_msvc_base --copt=/wd4146  # operator applied to unsigned type, result still unsigned | 
 | build:_msvc_base --copt=/wd4244  # possible loss of data | 
 | build:_msvc_base --copt=/wd4267  # initializing: possible loss of data | 
 | build:_msvc_base --copt=/wd4005  # allow: macro redefinition | 
 | build:_msvc_base --copt=/wd4065  # allow: switch statement contains 'default' but no 'case' labels | 
 | build:_msvc_base --copt=/wd4141  # allow: inline used more than once | 
 | build:_msvc_base --copt=/wd4624  # allow: destructor was implicitly defined as deleted | 
 | build:_msvc_base --copt=/wd5105  # macro expansion producing 'defined' has undefined behavior | 
 |  | 
 | # And some more explicit disables. For some reason the `/w` on external doesn't | 
 | # work for these, maybe they come from headers? | 
 | # new warning with the standards-compliant preprocessor. winbase itself is not standards-compliant | 
 | build:_msvc_base --per_file_copt=mkl_dnn@/wd4551 # missing argument list | 
 | build:_msvc_base --per_file_copt=mkl_dnn@/wd4068 # unknown pragma | 
 | build:_msvc_base --per_file_copt=farmhash@/wd4319 # zero extending to T of greater size | 
 |  | 
 | build:_msvc_base --linkopt=/IGNORE:4217 # mismatch import/export declspec | 
 | build:_msvc_base --linkopt=/IGNORE:4001 # no object files | 
 |  | 
 | # Separate configs for different MSVC versions as we might want slightly different options. | 
 | build:msvc2017 --config=_msvc_base | 
 | build:msvc2019 --config=_msvc_base | 
 |  | 
 | # Assume the newer version and alias to --config=windows | 
 | build:msvc --config=msvc2019 | 
 | build:windows --config=msvc |