| # 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 |
| |
| # 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 |
| |
| # TensorFlow always sets these in OSS which makes it impossible to build TF |
| # without them... |
| build --define open_source_build=true |
| |
| ############################################################################### |
| # 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 in-workspace as errors. |
| build:generic_clang --per_file_copt=-external/.*@-Werror |
| # ...and silence them outside of the workspace. |
| build:generic_clang --per_file_copt=external/.*@-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 hat 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=-Wunused-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 |
| # And some more explicit disables. For some reason `/w` doesn't work for these |
| # although it does catch some other warnings... |
| build:_msvc_base --per_file_copt=external@/wd4244 # possible loss of data |
| build:_msvc_base --copt=/wd4624 # destructor was implicitly defined as deleted |
| build:_msvc_base --copt=/wd4005 # macro redefinition |
| build:_msvc_base --copt=/wd4267 # initializing: possible loss of data |
| build:_msvc_base --copt=/wd4141 # inline used more than once |
| 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 |
| |
| # Enables unix-style runfiles link trees (requires symlink permission). |
| # See: https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ |
| # Generally: Enable Developer Mode in the Developer Settings page of the |
| # system settings. |
| build:_msvc_base --experimental_enable_runfiles |
| # 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 |
| # Avoids incompatible versions of winsock and other badness. |
| build:_msvc_base --copt=/DWIN32_LEAN_AND_MEAN --host_copt=/DWIN32_LEAN_AND_MEAN |
| # Why are min/max macros? No one knows. |
| build:_msvc_base --copt=/DNOMINMAX --host_copt=/DNOMINMAX |
| # Yay for security warnings. Boo for non-standard. |
| build:_msvc_base --copt=/D_CRT_SECURE_NO_WARNINGS --host_copt=/D_CRT_SECURE_NO_WARNINGS |
| # TensorFlow requires the "monolithic" build mode for now on Windows. |
| build:_msvc_base --define framework_shared_object=false |
| # Necessary for M_* math constants. |
| build:_msvc_base --copt=/D_USE_MATH_DEFINES --host_copt=/D_USE_MATH_DEFINES |
| |
| # 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 |
| |
| ############################################################################### |