blob: 953e2bd38496f2721337033d8b52408507ae9241 [file] [log] [blame]
# Copyright 2019 The Bazel Authors. All rights reserved.
#
# 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
#
# http://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.
"""A Starlark cc_toolchain configuration rule"""
load(
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
"action_config",
"feature",
"flag_group",
"flag_set",
"tool",
"tool_path",
"with_feature_set",
)
load(
"@bazel_tools//tools/build_defs/cc:action_names.bzl",
_ASSEMBLE_ACTION_NAME = "ASSEMBLE_ACTION_NAME",
_CLIF_MATCH_ACTION_NAME = "CLIF_MATCH_ACTION_NAME",
_CPP_COMPILE_ACTION_NAME = "CPP_COMPILE_ACTION_NAME",
_CPP_HEADER_PARSING_ACTION_NAME = "CPP_HEADER_PARSING_ACTION_NAME",
_CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME = "CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME",
_CPP_LINK_EXECUTABLE_ACTION_NAME = "CPP_LINK_EXECUTABLE_ACTION_NAME",
_CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME = "CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME",
_CPP_MODULE_CODEGEN_ACTION_NAME = "CPP_MODULE_CODEGEN_ACTION_NAME",
_CPP_MODULE_COMPILE_ACTION_NAME = "CPP_MODULE_COMPILE_ACTION_NAME",
_C_COMPILE_ACTION_NAME = "C_COMPILE_ACTION_NAME",
_LINKSTAMP_COMPILE_ACTION_NAME = "LINKSTAMP_COMPILE_ACTION_NAME",
_LTO_BACKEND_ACTION_NAME = "LTO_BACKEND_ACTION_NAME",
_PREPROCESS_ASSEMBLE_ACTION_NAME = "PREPROCESS_ASSEMBLE_ACTION_NAME",
)
all_compile_actions = [
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
]
all_cpp_compile_actions = [
_CPP_COMPILE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
]
preprocessor_compile_actions = [
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
]
codegen_compile_actions = [
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
]
all_link_actions = [
_CPP_LINK_EXECUTABLE_ACTION_NAME,
_CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME,
_CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME,
]
def _impl(ctx):
if ctx.attr.disable_static_cc_toolchains:
fail("@bazel_tools//tools/cpp:default-toolchain, as well as the cc_toolchains it points " +
"to have been removed. See https://github.com/bazelbuild/bazel/issues/8546.")
if (ctx.attr.cpu == "darwin"):
toolchain_identifier = "local_darwin"
elif (ctx.attr.cpu == "freebsd"):
toolchain_identifier = "local_freebsd"
elif (ctx.attr.cpu == "openbsd"):
toolchain_identifier = "local_openbsd"
elif (ctx.attr.cpu == "local"):
toolchain_identifier = "local_linux"
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang"):
toolchain_identifier = "local_windows_clang"
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw"):
toolchain_identifier = "local_windows_mingw"
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
toolchain_identifier = "local_windows_msys64"
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
toolchain_identifier = "local_windows_msys64_mingw64"
elif (ctx.attr.cpu == "armeabi-v7a"):
toolchain_identifier = "stub_armeabi-v7a"
elif (ctx.attr.cpu == "x64_windows_msvc"):
toolchain_identifier = "vc_14_0_x64"
else:
fail("Unreachable")
if (ctx.attr.cpu == "armeabi-v7a"):
host_system_name = "armeabi-v7a"
elif (ctx.attr.cpu == "darwin" or
ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local" or
ctx.attr.cpu == "x64_windows" or
ctx.attr.cpu == "x64_windows_msvc"):
host_system_name = "local"
else:
fail("Unreachable")
if (ctx.attr.cpu == "armeabi-v7a"):
target_system_name = "armeabi-v7a"
elif (ctx.attr.cpu == "darwin" or
ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local" or
ctx.attr.cpu == "x64_windows" or
ctx.attr.cpu == "x64_windows_msvc"):
target_system_name = "local"
else:
fail("Unreachable")
if (ctx.attr.cpu == "armeabi-v7a"):
target_cpu = "armeabi-v7a"
elif (ctx.attr.cpu == "darwin"):
target_cpu = "darwin"
elif (ctx.attr.cpu == "freebsd"):
target_cpu = "freebsd"
elif (ctx.attr.cpu == "openbsd"):
target_cpu = "openbsd"
elif (ctx.attr.cpu == "local"):
target_cpu = "local"
elif (ctx.attr.cpu == "x64_windows"):
target_cpu = "x64_windows"
elif (ctx.attr.cpu == "x64_windows_msvc"):
target_cpu = "x64_windows_msvc"
else:
fail("Unreachable")
if (ctx.attr.cpu == "armeabi-v7a"):
target_libc = "armeabi-v7a"
elif (ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local" or
ctx.attr.cpu == "x64_windows"):
target_libc = "local"
elif (ctx.attr.cpu == "darwin"):
target_libc = "macosx"
elif (ctx.attr.cpu == "x64_windows_msvc"):
target_libc = "msvcrt140"
else:
fail("Unreachable")
if (ctx.attr.cpu == "x64_windows_msvc"):
compiler = "cl"
elif (ctx.attr.cpu == "armeabi-v7a" or
ctx.attr.cpu == "darwin" or
ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local"):
compiler = "compiler"
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang"):
compiler = "windows_clang"
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw"):
compiler = "windows_mingw"
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
compiler = "windows_msys64"
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
compiler = "windows_msys64_mingw64"
else:
fail("Unreachable")
if (ctx.attr.cpu == "armeabi-v7a"):
abi_version = "armeabi-v7a"
elif (ctx.attr.cpu == "darwin" or
ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local" or
ctx.attr.cpu == "x64_windows" or
ctx.attr.cpu == "x64_windows_msvc"):
abi_version = "local"
else:
fail("Unreachable")
if (ctx.attr.cpu == "armeabi-v7a"):
abi_libc_version = "armeabi-v7a"
elif (ctx.attr.cpu == "darwin" or
ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local" or
ctx.attr.cpu == "x64_windows" or
ctx.attr.cpu == "x64_windows_msvc"):
abi_libc_version = "local"
else:
fail("Unreachable")
cc_target_os = None
builtin_sysroot = None
if (ctx.attr.cpu == "darwin" or
ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local"):
objcopy_embed_data_action = action_config(
action_name = "objcopy_embed_data",
enabled = True,
tools = [tool(path = "/usr/bin/objcopy")],
)
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang"):
objcopy_embed_data_action = action_config(
action_name = "objcopy_embed_data",
enabled = True,
tools = [tool(path = "C:/Program Files (x86)/LLVM/bin/objcopy")],
)
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw"):
objcopy_embed_data_action = action_config(
action_name = "objcopy_embed_data",
enabled = True,
tools = [tool(path = "C:/mingw/bin/objcopy")],
)
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
objcopy_embed_data_action = action_config(
action_name = "objcopy_embed_data",
enabled = True,
tools = [tool(path = "C:/tools/msys64/mingw64/bin/objcopy")],
)
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
objcopy_embed_data_action = action_config(
action_name = "objcopy_embed_data",
enabled = True,
tools = [tool(path = "C:/tools/msys64/usr/bin/objcopy")],
)
c_compile_action = action_config(
action_name = _C_COMPILE_ACTION_NAME,
implies = [
"compiler_input_flags",
"compiler_output_flags",
"default_compile_flags",
"user_compile_flags",
"sysroot",
"unfiltered_compile_flags",
],
tools = [tool(path = "wrapper/bin/msvc_cl.bat")],
)
cpp_compile_action = action_config(
action_name = _CPP_COMPILE_ACTION_NAME,
implies = [
"compiler_input_flags",
"compiler_output_flags",
"default_compile_flags",
"user_compile_flags",
"sysroot",
"unfiltered_compile_flags",
],
tools = [tool(path = "wrapper/bin/msvc_cl.bat")],
)
if (ctx.attr.cpu == "armeabi-v7a"):
action_configs = []
elif (ctx.attr.cpu == "x64_windows_msvc"):
action_configs = [c_compile_action, cpp_compile_action]
elif (ctx.attr.cpu == "darwin" or
ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local" or
ctx.attr.cpu == "x64_windows"):
action_configs = [objcopy_embed_data_action]
else:
fail("Unreachable")
random_seed_feature = feature(name = "random_seed", enabled = True)
compiler_output_flags_feature = feature(
name = "compiler_output_flags",
flag_sets = [
flag_set(
actions = [_ASSEMBLE_ACTION_NAME],
flag_groups = [
flag_group(
flags = ["/Fo%{output_file}", "/Zi"],
expand_if_available = "output_file",
expand_if_not_available = "output_assembly_file",
),
],
),
flag_set(
actions = [
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["/Fo%{output_file}"],
expand_if_available = "output_file",
expand_if_not_available = "output_assembly_file",
),
flag_group(
flags = ["/Fa%{output_file}"],
expand_if_available = "output_file",
),
flag_group(
flags = ["/P", "/Fi%{output_file}"],
expand_if_available = "output_file",
),
],
),
],
)
if (ctx.attr.cpu == "local"):
default_link_flags_feature = feature(
name = "default_link_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_link_actions,
flag_groups = [
flag_group(
flags = [
"-lstdc++",
"-Wl,-z,relro,-z,now",
"-no-canonical-prefixes",
"-pass-exit-codes",
],
),
],
),
flag_set(
actions = all_link_actions,
flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
with_features = [with_feature_set(features = ["opt"])],
),
],
)
elif (ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd"):
default_link_flags_feature = feature(
name = "default_link_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_link_actions,
flag_groups = [
flag_group(
flags = [
"-lc++",
"-Wl,-z,relro,-z,now",
"-no-canonical-prefixes",
],
),
],
),
flag_set(
actions = all_link_actions,
flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
with_features = [with_feature_set(features = ["opt"])],
),
],
)
elif (ctx.attr.cpu == "darwin"):
default_link_flags_feature = feature(
name = "default_link_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_link_actions,
flag_groups = [
flag_group(
flags = [
"-lc++",
"-undefined",
"dynamic_lookup",
"-headerpad_max_install_names",
"-no-canonical-prefixes",
],
),
],
),
],
)
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
default_link_flags_feature = feature(
name = "default_link_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_link_actions,
flag_groups = [flag_group(flags = ["-lstdc++"])],
),
],
)
elif (ctx.attr.cpu == "x64_windows_msvc"):
default_link_flags_feature = feature(
name = "default_link_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_link_actions,
flag_groups = [flag_group(flags = ["-m64"])],
),
],
)
if (ctx.attr.cpu == "darwin" or
ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd"):
unfiltered_compile_flags_feature = feature(
name = "unfiltered_compile_flags",
enabled = True,
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = [
"-no-canonical-prefixes",
"-Wno-builtin-macro-redefined",
"-D__DATE__=\"redacted\"",
"-D__TIMESTAMP__=\"redacted\"",
"-D__TIME__=\"redacted\"",
],
),
],
),
],
)
elif (ctx.attr.cpu == "local"):
unfiltered_compile_flags_feature = feature(
name = "unfiltered_compile_flags",
enabled = True,
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = [
"-no-canonical-prefixes",
"-fno-canonical-system-headers",
"-Wno-builtin-macro-redefined",
"-D__DATE__=\"redacted\"",
"-D__TIMESTAMP__=\"redacted\"",
"-D__TIME__=\"redacted\"",
],
),
],
),
],
)
elif (ctx.attr.cpu == "x64_windows_msvc"):
unfiltered_compile_flags_feature = feature(
name = "unfiltered_compile_flags",
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["%{unfiltered_compile_flags}"],
iterate_over = "unfiltered_compile_flags",
expand_if_available = "unfiltered_compile_flags",
),
],
),
],
)
supports_pic_feature = feature(name = "supports_pic", enabled = True)
if (ctx.attr.cpu == "darwin"):
default_compile_flags_feature = feature(
name = "default_compile_flags",
enabled = True,
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = [
"-D_FORTIFY_SOURCE=1",
"-fstack-protector",
"-fcolor-diagnostics",
"-Wall",
"-Wthread-safety",
"-Wself-assign",
"-fno-omit-frame-pointer",
],
),
],
),
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [flag_group(flags = ["-g"])],
with_features = [with_feature_set(features = ["dbg"])],
),
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = [
"-g0",
"-O2",
"-DNDEBUG",
"-ffunction-sections",
"-fdata-sections",
],
),
],
with_features = [with_feature_set(features = ["opt"])],
),
flag_set(
actions = [
_LINKSTAMP_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [flag_group(flags = ["-std=c++0x"])],
),
],
)
elif (ctx.attr.cpu == "local"):
default_compile_flags_feature = feature(
name = "default_compile_flags",
enabled = True,
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = [
"-U_FORTIFY_SOURCE",
"-D_FORTIFY_SOURCE=1",
"-fstack-protector",
"-Wall",
"-Wunused-but-set-parameter",
"-Wno-free-nonheap-object",
"-fno-omit-frame-pointer",
],
),
],
),
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [flag_group(flags = ["-g"])],
with_features = [with_feature_set(features = ["dbg"])],
),
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = [
"-g0",
"-O2",
"-DNDEBUG",
"-ffunction-sections",
"-fdata-sections",
],
),
],
with_features = [with_feature_set(features = ["opt"])],
),
flag_set(
actions = [
_LINKSTAMP_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [flag_group(flags = ["-std=c++0x"])],
),
],
)
elif (ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd"):
default_compile_flags_feature = feature(
name = "default_compile_flags",
enabled = True,
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = [
"-U_FORTIFY_SOURCE",
"-D_FORTIFY_SOURCE=1",
"-fstack-protector",
"-Wall",
"-fno-omit-frame-pointer",
],
),
],
),
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [flag_group(flags = ["-g"])],
with_features = [with_feature_set(features = ["dbg"])],
),
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = [
"-g0",
"-O2",
"-DNDEBUG",
"-ffunction-sections",
"-fdata-sections",
],
),
],
with_features = [with_feature_set(features = ["opt"])],
),
flag_set(
actions = [
_LINKSTAMP_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [flag_group(flags = ["-std=c++0x"])],
),
],
)
elif (ctx.attr.cpu == "x64_windows_msvc"):
default_compile_flags_feature = feature(
name = "default_compile_flags",
enabled = True,
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = [
"-m64",
"/D__inline__=__inline",
"/DCOMPILER_MSVC",
"/DNOGDI",
"/DNOMINMAX",
"/DPRAGMA_SUPPORTED",
"/D_WIN32_WINNT=0x0601",
"/D_CRT_SECURE_NO_DEPRECATE",
"/D_CRT_SECURE_NO_WARNINGS",
"/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS",
"/D_USE_MATH_DEFINES",
"/nologo",
"/bigobj",
"/Zm500",
"/J",
"/Gy",
"/GF",
"/W3",
"/EHsc",
"/wd4351",
"/wd4291",
"/wd4250",
"/wd4996",
],
),
],
),
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["/DDEBUG=1", "-g", "/Od", "-Xcompilation-mode=dbg"],
),
],
with_features = [with_feature_set(features = ["dbg"])],
),
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["/DNDEBUG", "/Od", "-Xcompilation-mode=fastbuild"],
),
],
with_features = [with_feature_set(features = ["fastbuild"])],
),
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["/DNDEBUG", "/O2", "-Xcompilation-mode=opt"],
),
],
with_features = [with_feature_set(features = ["opt"])],
),
],
)
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang" or
ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw" or
ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
default_compile_flags_feature = feature(
name = "default_compile_flags",
enabled = True,
flag_sets = [
flag_set(
actions = [
_LINKSTAMP_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [flag_group(flags = ["-std=c++0x"])],
),
],
)
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
default_compile_flags_feature = feature(
name = "default_compile_flags",
enabled = True,
flag_sets = [
flag_set(
actions = [
_LINKSTAMP_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [flag_group(flags = ["-std=gnu++0x"])],
),
],
)
opt_feature = feature(name = "opt")
supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)
objcopy_embed_flags_feature = feature(
name = "objcopy_embed_flags",
enabled = True,
flag_sets = [
flag_set(
actions = ["objcopy_embed_data"],
flag_groups = [flag_group(flags = ["-I", "binary"])],
),
],
)
dbg_feature = feature(name = "dbg")
if (ctx.attr.cpu == "darwin" or
ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local"):
user_compile_flags_feature = feature(
name = "user_compile_flags",
enabled = True,
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["%{user_compile_flags}"],
iterate_over = "user_compile_flags",
expand_if_available = "user_compile_flags",
),
],
),
],
)
elif (ctx.attr.cpu == "x64_windows_msvc"):
user_compile_flags_feature = feature(
name = "user_compile_flags",
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["%{user_compile_flags}"],
iterate_over = "user_compile_flags",
expand_if_available = "user_compile_flags",
),
],
),
],
)
if (ctx.attr.cpu == "darwin" or
ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local"):
sysroot_feature = feature(
name = "sysroot",
enabled = True,
flag_sets = [
flag_set(
actions = [
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_LINKSTAMP_COMPILE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_LTO_BACKEND_ACTION_NAME,
_CLIF_MATCH_ACTION_NAME,
_CPP_LINK_EXECUTABLE_ACTION_NAME,
_CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME,
_CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["--sysroot=%{sysroot}"],
expand_if_available = "sysroot",
),
],
),
],
)
elif (ctx.attr.cpu == "x64_windows_msvc"):
sysroot_feature = feature(
name = "sysroot",
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
_CPP_LINK_EXECUTABLE_ACTION_NAME,
_CPP_LINK_DYNAMIC_LIBRARY_ACTION_NAME,
_CPP_LINK_NODEPS_DYNAMIC_LIBRARY_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["--sysroot=%{sysroot}"],
iterate_over = "sysroot",
expand_if_available = "sysroot",
),
],
),
],
)
include_paths_feature = feature(
name = "include_paths",
enabled = True,
flag_sets = [
flag_set(
actions = [
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["/I%{quote_include_paths}"],
iterate_over = "quote_include_paths",
),
flag_group(
flags = ["/I%{include_paths}"],
iterate_over = "include_paths",
),
flag_group(
flags = ["/I%{system_include_paths}"],
iterate_over = "system_include_paths",
),
],
),
],
)
dependency_file_feature = feature(
name = "dependency_file",
enabled = True,
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["/DEPENDENCY_FILE", "%{dependency_file}"],
expand_if_available = "dependency_file",
),
],
),
],
)
compiler_input_flags_feature = feature(
name = "compiler_input_flags",
flag_sets = [
flag_set(
actions = [
_ASSEMBLE_ACTION_NAME,
_PREPROCESS_ASSEMBLE_ACTION_NAME,
_C_COMPILE_ACTION_NAME,
_CPP_COMPILE_ACTION_NAME,
_CPP_HEADER_PARSING_ACTION_NAME,
_CPP_MODULE_COMPILE_ACTION_NAME,
_CPP_MODULE_CODEGEN_ACTION_NAME,
],
flag_groups = [
flag_group(
flags = ["/c", "%{source_file}"],
expand_if_available = "source_file",
),
],
),
],
)
fastbuild_feature = feature(name = "fastbuild")
if (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
features = [
default_compile_flags_feature,
default_link_flags_feature,
supports_dynamic_linker_feature,
objcopy_embed_flags_feature,
]
elif (ctx.attr.cpu == "darwin"):
features = [
default_compile_flags_feature,
default_link_flags_feature,
supports_pic_feature,
objcopy_embed_flags_feature,
dbg_feature,
opt_feature,
user_compile_flags_feature,
sysroot_feature,
unfiltered_compile_flags_feature,
]
elif (ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd" or
ctx.attr.cpu == "local"):
features = [
default_compile_flags_feature,
default_link_flags_feature,
supports_dynamic_linker_feature,
supports_pic_feature,
objcopy_embed_flags_feature,
opt_feature,
dbg_feature,
user_compile_flags_feature,
sysroot_feature,
unfiltered_compile_flags_feature,
]
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang" or
ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw" or
ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
features = [
default_compile_flags_feature,
supports_dynamic_linker_feature,
objcopy_embed_flags_feature,
]
elif (ctx.attr.cpu == "x64_windows_msvc"):
features = [
default_link_flags_feature,
random_seed_feature,
default_compile_flags_feature,
include_paths_feature,
dependency_file_feature,
user_compile_flags_feature,
sysroot_feature,
unfiltered_compile_flags_feature,
compiler_output_flags_feature,
compiler_input_flags_feature,
dbg_feature,
fastbuild_feature,
opt_feature,
]
elif (ctx.attr.cpu == "armeabi-v7a"):
features = [supports_dynamic_linker_feature, supports_pic_feature]
if (ctx.attr.cpu == "armeabi-v7a"):
cxx_builtin_include_directories = []
elif (ctx.attr.cpu == "darwin"):
cxx_builtin_include_directories = ["/"]
elif (ctx.attr.cpu == "freebsd" or
ctx.attr.cpu == "openbsd"):
cxx_builtin_include_directories = ["/usr/lib/clang", "/usr/local/include", "/usr/include"]
elif (ctx.attr.cpu == "local" or
ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang"):
cxx_builtin_include_directories = ["/usr/lib/gcc/", "/usr/local/include", "/usr/include"]
elif (ctx.attr.cpu == "x64_windows_msvc"):
cxx_builtin_include_directories = [
"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/INCLUDE",
"C:/Program Files (x86)/Windows Kits/10/include/",
"C:/Program Files (x86)/Windows Kits/8.1/include/",
"C:/Program Files (x86)/GnuWin32/include/",
"C:/python_27_amd64/files/include",
]
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw"):
cxx_builtin_include_directories = ["C:/mingw/include", "C:/mingw/lib/gcc"]
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
cxx_builtin_include_directories = ["C:/tools/msys64/mingw64/x86_64-w64-mingw32/include"]
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
cxx_builtin_include_directories = ["C:/tools/msys64/", "/usr/"]
else:
fail("Unreachable")
artifact_name_patterns = []
make_variables = []
if (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64_mingw64"):
tool_paths = [
tool_path(
name = "ar",
path = "C:/tools/msys64/mingw64/bin/ar",
),
tool_path(
name = "compat-ld",
path = "C:/tools/msys64/mingw64/bin/ld",
),
tool_path(
name = "cpp",
path = "C:/tools/msys64/mingw64/bin/cpp",
),
tool_path(
name = "dwp",
path = "C:/tools/msys64/mingw64/bin/dwp",
),
tool_path(
name = "gcc",
path = "C:/tools/msys64/mingw64/bin/gcc",
),
tool_path(
name = "gcov",
path = "C:/tools/msys64/mingw64/bin/gcov",
),
tool_path(
name = "ld",
path = "C:/tools/msys64/mingw64/bin/ld",
),
tool_path(
name = "nm",
path = "C:/tools/msys64/mingw64/bin/nm",
),
tool_path(
name = "objcopy",
path = "C:/tools/msys64/mingw64/bin/objcopy",
),
tool_path(
name = "objdump",
path = "C:/tools/msys64/mingw64/bin/objdump",
),
tool_path(
name = "strip",
path = "C:/tools/msys64/mingw64/bin/strip",
),
]
elif (ctx.attr.cpu == "armeabi-v7a"):
tool_paths = [
tool_path(name = "ar", path = "/bin/false"),
tool_path(name = "compat-ld", path = "/bin/false"),
tool_path(name = "cpp", path = "/bin/false"),
tool_path(name = "dwp", path = "/bin/false"),
tool_path(name = "gcc", path = "/bin/false"),
tool_path(name = "gcov", path = "/bin/false"),
tool_path(name = "ld", path = "/bin/false"),
tool_path(name = "nm", path = "/bin/false"),
tool_path(name = "objcopy", path = "/bin/false"),
tool_path(name = "objdump", path = "/bin/false"),
tool_path(name = "strip", path = "/bin/false"),
]
elif (ctx.attr.cpu == "freebsd"):
tool_paths = [
tool_path(name = "ar", path = "/usr/bin/ar"),
tool_path(name = "compat-ld", path = "/usr/bin/ld"),
tool_path(name = "cpp", path = "/usr/bin/cpp"),
tool_path(name = "dwp", path = "/usr/bin/dwp"),
tool_path(name = "gcc", path = "/usr/bin/clang"),
tool_path(name = "gcov", path = "/usr/bin/gcov"),
tool_path(name = "ld", path = "/usr/bin/ld"),
tool_path(name = "nm", path = "/usr/bin/nm"),
tool_path(name = "objcopy", path = "/usr/bin/objcopy"),
tool_path(name = "objdump", path = "/usr/bin/objdump"),
tool_path(name = "strip", path = "/usr/bin/strip"),
]
elif (ctx.attr.cpu == "openbsd"):
tool_paths = [
tool_path(name = "ar", path = "/usr/bin/ar"),
tool_path(name = "compat-ld", path = "/usr/bin/ld"),
tool_path(name = "cpp", path = "/usr/bin/cpp"),
tool_path(name = "dwp", path = "/usr/bin/false"),
tool_path(name = "gcc", path = "/usr/bin/clang"),
tool_path(name = "gcov", path = "/usr/bin/gcov"),
tool_path(name = "ld", path = "/usr/bin/ld"),
tool_path(name = "nm", path = "/usr/bin/nm"),
tool_path(name = "objcopy", path = "/usr/bin/objcopy"),
tool_path(name = "objdump", path = "/usr/bin/objdump"),
tool_path(name = "strip", path = "/usr/bin/strip"),
]
elif (ctx.attr.cpu == "local"):
tool_paths = [
tool_path(name = "ar", path = "/usr/bin/ar"),
tool_path(name = "compat-ld", path = "/usr/bin/ld"),
tool_path(name = "cpp", path = "/usr/bin/cpp"),
tool_path(name = "dwp", path = "/usr/bin/dwp"),
tool_path(name = "gcc", path = "/usr/bin/gcc"),
tool_path(name = "gcov", path = "/usr/bin/gcov"),
tool_path(name = "ld", path = "/usr/bin/ld"),
tool_path(name = "nm", path = "/usr/bin/nm"),
tool_path(name = "objcopy", path = "/usr/bin/objcopy"),
tool_path(name = "objdump", path = "/usr/bin/objdump"),
tool_path(name = "strip", path = "/usr/bin/strip"),
]
elif (ctx.attr.cpu == "darwin"):
tool_paths = [
tool_path(name = "ar", path = "/usr/bin/libtool"),
tool_path(name = "compat-ld", path = "/usr/bin/ld"),
tool_path(name = "cpp", path = "/usr/bin/cpp"),
tool_path(name = "dwp", path = "/usr/bin/dwp"),
tool_path(name = "gcc", path = "osx_cc_wrapper.sh"),
tool_path(name = "gcov", path = "/usr/bin/gcov"),
tool_path(name = "ld", path = "/usr/bin/ld"),
tool_path(name = "nm", path = "/usr/bin/nm"),
tool_path(name = "objcopy", path = "/usr/bin/objcopy"),
tool_path(name = "objdump", path = "/usr/bin/objdump"),
tool_path(name = "strip", path = "/usr/bin/strip"),
]
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_clang"):
tool_paths = [
tool_path(name = "ar", path = "C:/mingw/bin/ar"),
tool_path(
name = "compat-ld",
path = "C:/Program Files (x86)/LLVM/bin/ld",
),
tool_path(
name = "cpp",
path = "C:/Program Files (x86)/LLVM/bin/cpp",
),
tool_path(
name = "dwp",
path = "C:/Program Files (x86)/LLVM/bin/dwp",
),
tool_path(
name = "gcc",
path = "C:/Program Files (x86)/LLVM/bin/clang",
),
tool_path(
name = "gcov",
path = "C:/Program Files (x86)/LLVM/bin/gcov",
),
tool_path(
name = "ld",
path = "C:/Program Files (x86)/LLVM/bin/ld",
),
tool_path(
name = "nm",
path = "C:/Program Files (x86)/LLVM/bin/nm",
),
tool_path(
name = "objcopy",
path = "C:/Program Files (x86)/LLVM/bin/objcopy",
),
tool_path(
name = "objdump",
path = "C:/Program Files (x86)/LLVM/bin/objdump",
),
tool_path(
name = "strip",
path = "C:/Program Files (x86)/LLVM/bin/strip",
),
]
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_mingw"):
tool_paths = [
tool_path(name = "ar", path = "C:/mingw/bin/ar"),
tool_path(name = "compat-ld", path = "C:/mingw/bin/ld"),
tool_path(name = "cpp", path = "C:/mingw/bin/cpp"),
tool_path(name = "dwp", path = "C:/mingw/bin/dwp"),
tool_path(name = "gcc", path = "C:/mingw/bin/gcc"),
tool_path(name = "gcov", path = "C:/mingw/bin/gcov"),
tool_path(name = "ld", path = "C:/mingw/bin/ld"),
tool_path(name = "nm", path = "C:/mingw/bin/nm"),
tool_path(name = "objcopy", path = "C:/mingw/bin/objcopy"),
tool_path(name = "objdump", path = "C:/mingw/bin/objdump"),
tool_path(name = "strip", path = "C:/mingw/bin/strip"),
]
elif (ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "windows_msys64"):
tool_paths = [
tool_path(name = "ar", path = "C:/tools/msys64/usr/bin/ar"),
tool_path(
name = "compat-ld",
path = "C:/tools/msys64/usr/bin/ld",
),
tool_path(
name = "cpp",
path = "C:/tools/msys64/usr/bin/cpp",
),
tool_path(
name = "dwp",
path = "C:/tools/msys64/usr/bin/dwp",
),
tool_path(
name = "gcc",
path = "C:/tools/msys64/usr/bin/gcc",
),
tool_path(
name = "gcov",
path = "C:/tools/msys64/usr/bin/gcov",
),
tool_path(name = "ld", path = "C:/tools/msys64/usr/bin/ld"),
tool_path(name = "nm", path = "C:/tools/msys64/usr/bin/nm"),
tool_path(
name = "objcopy",
path = "C:/tools/msys64/usr/bin/objcopy",
),
tool_path(
name = "objdump",
path = "C:/tools/msys64/usr/bin/objdump",
),
tool_path(
name = "strip",
path = "C:/tools/msys64/usr/bin/strip",
),
]
elif (ctx.attr.cpu == "x64_windows_msvc"):
tool_paths = [
tool_path(name = "ar", path = "wrapper/bin/msvc_link.bat"),
tool_path(name = "cpp", path = "wrapper/bin/msvc_cl.bat"),
tool_path(name = "gcc", path = "wrapper/bin/msvc_cl.bat"),
tool_path(name = "gcov", path = "wrapper/bin/msvc_nop.bat"),
tool_path(name = "ld", path = "wrapper/bin/msvc_link.bat"),
tool_path(name = "nm", path = "wrapper/bin/msvc_nop.bat"),
tool_path(
name = "objcopy",
path = "wrapper/bin/msvc_nop.bat",
),
tool_path(
name = "objdump",
path = "wrapper/bin/msvc_nop.bat",
),
tool_path(
name = "strip",
path = "wrapper/bin/msvc_nop.bat",
),
]
else:
fail("Unreachable")
out = ctx.actions.declare_file(ctx.label.name)
ctx.actions.write(out, "Fake executable")
return [
cc_common.create_cc_toolchain_config_info(
ctx = ctx,
features = features,
action_configs = action_configs,
artifact_name_patterns = artifact_name_patterns,
cxx_builtin_include_directories = cxx_builtin_include_directories,
toolchain_identifier = toolchain_identifier,
host_system_name = host_system_name,
target_system_name = target_system_name,
target_cpu = target_cpu,
target_libc = target_libc,
compiler = compiler,
abi_version = abi_version,
abi_libc_version = abi_libc_version,
tool_paths = tool_paths,
make_variables = make_variables,
builtin_sysroot = builtin_sysroot,
cc_target_os = cc_target_os,
),
DefaultInfo(
executable = out,
),
]
cc_toolchain_config = rule(
implementation = _impl,
attrs = {
"cpu": attr.string(mandatory = True),
"compiler": attr.string(),
"disable_static_cc_toolchains": attr.bool(),
},
provides = [CcToolchainConfigInfo],
executable = True,
)