blob: 63fadbd6f848c39481f5ebe87d632110288bd857 [file] [log] [blame]
# 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
###############################################################################