| # Copyright 2019 Google LLC | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # https://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| ############################################################################### | |
| # 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 | |
| # Used in TensorFlow, so we have to enable it here as well. | |
| 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 | |
| ############################################################################### | |
| # Options for "generic_gcc" builds | |
| ############################################################################### | |
| # C++14 standard version is required. | |
| build:generic_gcc --cxxopt=-std=c++14 --host_cxxopt=-std=c++14 | |
| # 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++14 standard version is required. | |
| build:generic_clang --cxxopt=-std=c++14 --host_cxxopt=-std=c++14 | |
| # 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 | |
| # LINT.IfChange(clang_diagnostics) | |
| # 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! | |
| 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-error=deprecated-declarations | |
| 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=-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=-Wno-unused-variable | |
| build:generic_clang --copt=-Wvla | |
| # LINT.ThenChange(https://github.com/google/iree/tree/main/build_tools/cmake/iree_copts.cmake:clang_diagnostics) | |
| ############################################################################### | |
| # Options for building with address sanitizer. | |
| # https://github.com/google/sanitizers/wiki/AddressSanitizer | |
| ############################################################################### | |
| # Turn on asan. Some toolchains make use of the asan feature and we'll directly | |
| # set the appropriate opts. | |
| build:asan --features=asan | |
| build:asan --copt=-fsanitize=address | |
| build:asan --linkopt=-fsanitize=address | |
| # Don't strip debug info | |
| build:asan --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:asan --force_ignore_dash_static | |
| # asan tests tend to take longer, so increase the timeouts | |
| build:asan --test_timeout=120,600,1800,-1 | |
| # Make the outputs easy to find | |
| build:asan --cc_output_directory_tag=asan | |
| # Get better stack traces | |
| build:asan --copt=-fno-omit-frame-pointer | |
| # This macro define is used by absl | |
| build:asan --copt=-DADDRESS_SANITIZER | |
| ############################################################################### | |
| # Architecture specific options | |
| ############################################################################### | |
| # Enable some default cpu flags for x86 optimization. | |
| build:x86opt --copt=-mavx2 | |
| ############################################################################### | |
| # Configuration for building 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 | |
| # Currently in development only usable by CI. | |
| ############################################################################### | |
| # Options for connecting to the IREE GCP remote build project. These are | |
| # repeated separately in each config to avoid warnings about configs being | |
| # expanded more than once. | |
| # 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:rbe --google_default_credentials=true | |
| # Point to the remote instance constructed in the iree-oss project | |
| build:rbe --remote_instance_name=projects/iree-oss/instances/default_instance | |
| # Depending on how many machines are in the remote execution instance, setting | |
| # this higher can make builds faster by allowing more jobs to run in parallel. | |
| # Setting it too high can result in jobs that timeout, however, while waiting | |
| # for a remote machine to execute them. | |
| # Our pool autoscales from 25 to 200 jobs | |
| build:rbe --jobs=150 | |
| # Flags related to specifying the platform, toolchain and java properties. | |
| # These flags must be adapted to work with toolchain containers other than | |
| # rbe-ubuntu16-04 | |
| # References to "rbe_default" matches rbe_autoconfig(name="rbe_default") in | |
| # WORKSPACE | |
| build:rbe --host_javabase=@rbe_default//java:jdk | |
| build:rbe --javabase=@rbe_default//java:jdk | |
| build:rbe --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8 | |
| build:rbe --java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8 | |
| build:rbe --crosstool_top=@rbe_default//cc:toolchain | |
| build:rbe --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 | |
| # Platform flags: | |
| # The toolchain container used for execution is defined in the target indicated | |
| # by "extra_execution_platforms", "host_platform" and "platforms". | |
| # More about platforms: https://docs.bazel.build/versions/master/platforms.html | |
| build:rbe --extra_toolchains=@rbe_default//config:cc-toolchain | |
| build:rbe --extra_execution_platforms=@rbe_default//config:platform | |
| build:rbe --host_platform=@rbe_default//config:platform | |
| build:rbe --platforms=@rbe_default//config:platform | |
| build:rbe --define=EXECUTOR=remote | |
| # Enable remote execution so actions are performed on the remote systems. | |
| build:rbe --remote_executor=grpcs://remotebuildexecution.googleapis.com | |
| # Enforce stricter environment rules, which eliminates some non-hermetic | |
| # behavior and therefore improves both the remote cache hit rate and the | |
| # correctness and repeatability of the build. | |
| build:rbe --incompatible_strict_action_env=true | |
| # Set a higher timeout value, just in case. | |
| build:rbe --remote_timeout=3600 | |
| # Local disk cache is incompatible with remote execution (for obvious reasons). | |
| build:rbe --disk_cache="" | |
| ############################################################################### | |
| # 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 --config=rbe. | |
| ############################################################################### | |
| # Options for connecting to the IREE GCP remote build project. These are | |
| # repeated separately in each config to avoid warnings about configs being | |
| # expanded more than once. | |
| # 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:rs --google_default_credentials=true | |
| # Point to the remote instance constructed in the iree-oss project | |
| 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 | |
| # Disable warnings for dependencies. We don't control these. | |
| # absl forces /W3 in their copts, so we exclude them to avoid D9025 | |
| build:_msvc_base --per_file_copt=+external,-com_google_absl@/w | |
| # 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 | |
| # Flags to make tensorflow build. | |
| # Some of these are also of general use and fine to enable globally for windows. | |
| build:_msvc_base --copt=/arch:AVX | |
| # Host and target are the same in windows so don't waste time building both. | |
| build:_msvc_base --distinct_host_configuration=false | |
| # TensorFlow requires the "monolithic" build mode for now on Windows. | |
| build:_msvc_base --define framework_shared_object=false | |
| # Workaround WinGDI.h defining `ERROR`, which conflicts with logging macros. | |
| # Note that IREE and TensorFlow both `#undef ERROR` and define their own | |
| # separate logging constants with the same name, but IREE needs the Windows | |
| # "graphics device interface" (GDI) for certain GUI sample projects. | |
| build:_msvc_base --per_file_copt=tensorflow@-DNOGDI | |
| # Disables TensorFlow eigen bloat and reduces compile times. | |
| build:_msvc_base --define=override_eigen_strong_inline=true | |
| # Another TensorFlow flag from their config script. | |
| build:_msvc_base --define with_default_optimizations=true | |
| # Separate configs for different MSVC versions as we might want slightly different options. | |
| build:msvc2017 --config=_msvc_base | |
| build:msvc2019 --config=_msvc_base | |
| # TensorFlow builds depend on this flag, but it doesn't appear to work with | |
| # gmock in some of our unit tests, so only enable it for TensorFlow files. | |
| # MSVC (Windows): Standards-conformant preprocessor mode | |
| # See https://docs.microsoft.com/en-us/cpp/preprocessor/preprocessor-experimental-overview | |
| build:msvc2017 --per_file_copt=tensorflow@/experimental:preprocessor | |
| # It's also called different things in different MSVC versions and will spam the logs | |
| # if we use the old name with a newer msvc. | |
| build:msvc2019 --per_file_copt=tensorflow@/Zc:preprocessor | |
| # Assume the newer version and alias to --config=windows | |
| build:msvc --config=msvc2019 | |
| build:windows --config=msvc | |
| ############################################################################### |