in tools/build/configure.py [0:0]
def write_config():
"""Retrive compile and link information from tensorflow and write to .bazelrc."""
cflags = tf.sysconfig.get_compile_flags()
inc_regex = re.compile("^-I")
opt_regex = re.compile("^-D")
include_list = []
opt_list = []
for arg in cflags:
if inc_regex.match(arg):
include_list.append(arg)
elif opt_regex.match(arg):
opt_list.append(arg)
else:
print(f"WARNING: Unexpected cflag item {arg}")
if len(include_list) != 1:
print(
"ERROR: Expected a single include directory in "
+ "tf.sysconfig.get_compile_flags(): ",
include_list,
)
exit(1)
library_regex = re.compile("^-l")
libdir_regex = re.compile("^-L")
library_list = []
libdir_list = []
lib = tf.sysconfig.get_link_flags()
if sys.platform != "win32":
for arg in lib:
if library_regex.match(arg):
library_list.append(arg)
elif libdir_regex.match(arg):
libdir_list.append(arg)
else:
print(f"WARNING: Unexpected link flag item {arg}")
if len(library_list) != 1 or len(libdir_list) != 1:
print(
"ERROR: Expected exactly one lib and one libdir in "
+ "tf.sysconfig.get_link_flags()",
library_list,
libdir_list,
)
exit(1)
try:
with open(".bazelrc", "w") as bazel_rc:
bazel_rc.write('build --copt="-fvisibility=hidden"\n')
for opt in opt_list:
bazel_rc.write(f'build --copt="{opt}"\n')
header_dir = include_list[0][2:]
if sys.platform == "win32":
header_dir = header_dir.replace("\\", "/")
bazel_rc.write(f'build --action_env TF_HEADER_DIR="{header_dir}"\n')
if sys.platform == "win32":
library_dir = include_list[0][2:-7] + "python"
library_dir = library_dir.replace("\\", "/")
else:
library_dir = libdir_list[0][2:]
bazel_rc.write(
f'build --action_env TF_SHARED_LIBRARY_DIR="{library_dir}"\n'
)
if sys.platform == "win32":
library_name = "_pywrap_tensorflow_internal.lib"
else:
library_name = library_list[0][2:]
if library_name.startswith(":"):
library_name = library_name[1:]
elif sys.platform == "darwin":
library_name = "lib" + library_name + ".dylib"
else:
library_name = "lib" + library_name + ".so"
bazel_rc.write(
f'build --action_env TF_SHARED_LIBRARY_NAME="{library_name}"\n'
)
bazel_rc.write('build --cxxopt="-std=c++14"\n')
for argv in sys.argv[1:]:
if argv == "--cuda":
bazel_rc.write('build --action_env TF_NEED_CUDA="1"\n')
bazel_rc.write(
'build --action_env CUDA_TOOLKIT_PATH="/usr/local/cuda"\n'
)
bazel_rc.write(
'build --action_env CUDNN_INSTALL_PATH="/usr/lib/x86_64-linux-gnu"\n'
)
bazel_rc.write('build --action_env TF_CUDA_VERSION="10.1"\n')
bazel_rc.write('build --action_env TF_CUDNN_VERSION="7"\n')
# Needed for tf rules
bazel_rc.write("build --experimental_repo_remote_exec\n")
# Enable platform specific config
bazel_rc.write("build --enable_platform_specific_config\n")
# Needed for GRPC build
bazel_rc.write('build:macos --copt="-DGRPC_BAZEL_BUILD"\n')
# Stay with 10.14 for macOS
bazel_rc.write('build:macos --copt="-mmacosx-version-min=10.14"\n')
bazel_rc.write('build:macos --linkopt="-mmacosx-version-min=10.14"\n')
# Warns for unguarded uses of Objective-C APIs
bazel_rc.write("build:macos --copt=-Wunguarded-availability\n")
# MSVC (Windows): Standards-conformant preprocessor mode
bazel_rc.write('build:windows --copt="/Zc:preprocessor"\n')
# Config for CI and release build
bazel_rc.write("build:optimization --copt=-msse4.2\n")
bazel_rc.write("build:optimization --copt=-mavx\n")
bazel_rc.write("build:optimization --compilation_mode=opt\n")
bazel_rc.write(
"build:linux_ci --crosstool_top=//third_party/toolchains/gcc7_manylinux2010:toolchain\n"
)
bazel_rc.write(
"build:linux_ci_gpu --crosstool_top=//third_party/toolchains/gcc7_manylinux2010-nvcc-cuda10.1:toolchain\n"
)
# For a cleaner output
bazel_rc.write("build --noshow_progress\n")
bazel_rc.write("build --noshow_loading_progress\n")
bazel_rc.write("build --verbose_failures\n")
bazel_rc.write("build --test_output=errors\n")
bazel_rc.write("build --experimental_ui_max_stdouterr_bytes=-1\n")
# GCS cache (read-only by default)
bazel_rc.write(
"build:cache --remote_cache=https://storage.googleapis.com/tensorflow-sigs-io\n"
)
bazel_rc.write("build:cache --remote_upload_local_results=false\n")
bazel_rc.close()
except OSError:
print("ERROR: Writing .bazelrc")
exit(1)