Merge pull request #9010 from protocolbuffers/toolchain

Creating bazel toolchain to crosscompile with
pull/9019/head
deannagarcia 3 years ago committed by GitHub
commit 2a5bf40b37
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 84
      toolchain/BUILD
  2. 148
      toolchain/cc_toolchain_config.bzl
  3. 8
      toolchain/toolchains.bazelrc

@ -0,0 +1,84 @@
load(":cc_toolchain_config.bzl", "cc_toolchain_config")
package(default_visibility = ["//visibility:public"])
filegroup(name = "empty")
LINUX_TOOLCHAINS = {
"linux-aarch64": "cc-compiler-linux-aarch64",
"linux-ppcle": "cc-compiler-linux-ppcle",
"linux-s390x": "cc-compiler-linux-s390x",
"linux-x86_32": "cc-compiler-linux-x86_32",
"linux-x86_64": "cc-compiler-linux-x86_64",
}
cc_toolchain_suite(
name = "clang_suite",
toolchains = LINUX_TOOLCHAINS
)
[
cc_toolchain(
name = toolchain,
all_files = ":empty",
compiler_files = ":empty",
dwp_files = ":empty",
dynamic_runtime_lib = ":empty",
linker_files = ":empty",
objcopy_files = ":empty",
output_licenses = ["restricted"],
static_runtime_lib = ":empty",
strip_files = ":empty",
toolchain_config = ":" + cpu + "-config",
toolchain_identifier = toolchain,
)
for cpu, toolchain in LINUX_TOOLCHAINS.items()
]
cc_toolchain_config(
name = "linux-aarch64-config",
bit_flag = "-m64",
include_flag = "-I/usr/aarch64-linux-gnu/include/c++/10/aarch64-linux-gnu/",
target_cpu = "aarch64",
target_full_name = "aarch64-linux-gnu",
toolchain_dir = "/usr/aarch64-linux-gnu/include",
toolchain_name = "linux_aarch64",
)
cc_toolchain_config(
name = "linux-ppcle-config",
bit_flag = "-m64",
include_flag = "-I/usr/powerpc64le-linux-gnu/include/c++/10/powerpc64le-linux-gnu/",
target_cpu = "ppc64",
target_full_name = "powerpc64le-linux-gnu",
toolchain_dir = "/usr/powerpc64le-linux-gnu/include",
toolchain_name = "linux_ppcle",
)
cc_toolchain_config(
name = "linux-s390x-config",
bit_flag = "-m64",
include_flag = "-I/usr/s390x-linux-gnu/include/c++/10/s390x-linux-gnu/",
target_cpu = "systemz",
target_full_name = "s390x-linux-gnu",
toolchain_dir = "/usr/s390x-linux-gnu/include",
toolchain_name = "linux_s390x",
)
cc_toolchain_config(
name = "linux-x86_32-config",
bit_flag = "-m32",
target_cpu = "x86_32",
target_full_name = "i386-linux-gnu",
toolchain_dir = "/usr/include/x86_32-linux-gnu",
toolchain_name = "linux_x86_32",
)
cc_toolchain_config(
name = "linux-x86_64-config",
bit_flag = "-m64",
target_cpu = "x86_64",
target_full_name = "x86_64-linux-gnu",
toolchain_dir = "/usr/include/x86_64-linux-gnu",
toolchain_name = "linux_x86_64",
)

@ -0,0 +1,148 @@
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load(
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
"feature",
"flag_group",
"flag_set",
"tool",
"tool_path",
)
all_link_actions = [
ACTION_NAMES.cpp_link_executable,
ACTION_NAMES.cpp_link_dynamic_library,
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
]
all_compile_actions = [
ACTION_NAMES.assemble,
ACTION_NAMES.preprocess_assemble,
ACTION_NAMES.linkstamp_compile,
ACTION_NAMES.c_compile,
ACTION_NAMES.cpp_compile,
ACTION_NAMES.cpp_header_parsing,
ACTION_NAMES.cpp_module_codegen,
ACTION_NAMES.cpp_module_compile,
ACTION_NAMES.clif_match,
ACTION_NAMES.lto_backend,
]
def _impl(ctx):
tool_paths = [
tool_path(
name = "gcc",
path = "/usr/bin/clang",
),
tool_path(
name = "ld",
path = "/usr/bin/ld",
),
tool_path(
name = "ar",
path = "/usr/bin/llvm-ar-11",
),
tool_path(
name = "compat-ld",
path = "/usr/bin/ld",
),
tool_path(
name = "cpp",
path = "/usr/bin/clang-cpp",
),
tool_path(
name = "dwp",
path = "/usr/bin/llvm-dwp",
),
tool_path(
name = "gcov",
path = "/usr/bin/llvm-profdata",
),
tool_path(
name = "nm",
path = "/usr/bin/llvm-nm",
),
tool_path(
name = "objcopy",
path = "/usr/bin/llvm-objcopy",
),
tool_path(
name = "objdump",
path = "/usr/bin/llvm-objdump",
),
tool_path(
name = "strip",
path = "/usr/bin/llvm-strip",
),
]
features = [
feature(
name = "default_linker_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_link_actions,
flag_groups = ([
flag_group(
flags = [
"-lstdc++",
"--target=" + ctx.attr.target_full_name,
],
),
]),
),
],
),
feature(
name = "default_compile_flags",
enabled = True,
flag_sets = [
actions = all_compile_actions,
flag_groups = [
flag_group(
flags = [
ctx.attr.bit_flag,
"-Wall",
"-no-canonical-prefixes",
"--target=" + ctx.attr.target_full_name,
"-isystem",
ctx.attr.toolchain_dir,
ctx.attr.include_flag,
],
),
[,
],
),
]
return cc_common.create_cc_toolchain_config_info(
abi_libc_version = ctx.attr.target_cpu,
abi_version = ctx.attr.target_cpu,
ctx = ctx,
compiler = "clang",
cxx_builtin_include_directories = [
ctx.attr.toolchain_dir,
"/usr/include",
"/usr/lib/clang",
],
features = features,
host_system_name = "local",
target_cpu = ctx.attr.target_cpu,
target_libc = ctx.attr.target_cpu,
target_system_name = ctx.attr.target_full_name,
toolchain_identifier = ctx.attr.toolchain_name,
tool_paths = tool_paths,
)
cc_toolchain_config = rule(
implementation = _impl,
attrs = {
"bit_flag": attr.string(mandatory = True, values = ["-m32", "-m64"]),
"include_flag": attr.string(mandatory = False),
"target_cpu": attr.string(mandatory = True, values = ["aarch64", "ppc64", "systemz", "x86_32", "x86_64"]),
"target_full_name": attr.string(mandatory = True),
"toolchain_dir": attr.string(mandatory = True),
"toolchain_name": attr.string(mandatory = True),
},
provides = [CcToolchainConfigInfo],
)

@ -0,0 +1,8 @@
build:cross_config --crosstool_top=//toolchain:clang_suite
build:cross_config --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
build:linux-aarch64_config --config=cross_config --cpu=linux-aarch64
build:linux-ppcle_config --config=cross_config --cpu=linux-ppcle
build:linux-s390x_config --config=cross_config --cpu=linux-s390x
build:linux-x86_32_config --config=cross_config --cpu=linux-x86_32
build:linux-x86_64_config --config=cross_config --cpu=linux-x86_64
Loading…
Cancel
Save