|  | # 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 | 
|  |  | 
|  | # 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 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=-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 the `/w` on external doesn't | 
|  | # work for these, maybe they come from headers? | 
|  | build:_msvc_base --copt=/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 | 
|  | # new warning with the standards-compliant preprocessor. winbase itself is not standards-compliant | 
|  | build:_msvc_base --copt=/wd5105 | 
|  | 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 | 
|  | # Avoids incompatible versions of winsock and other badness. | 
|  | build:_msvc_base --copt=/DWIN32_LEAN_AND_MEAN | 
|  | # Why are min/max macros? No one knows. | 
|  | build:_msvc_base --copt=/DNOMINMAX | 
|  | # Yay for security warnings. Boo for non-standard. | 
|  | build:_msvc_base --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 | 
|  |  | 
|  | # 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 | 
|  |  | 
|  | ############################################################################### |