# 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://bazel.build/configure/windows#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 + IREE_TRACING_PROVIDER. # Builds the runtime with tracing support enabled. build --flag_alias=iree_enable_runtime_tracing=//runtime/src/iree/base/tracing:tracing_provider ############################################################################### # 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/base-bleeding-edge@sha256:c5f28883e6c570c20128fb37d7af3a00a25df3ce4e2b3a24c3a8dcd183182a27"}' ############################################################################### # 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