Creating bazel toolchain to crosscompile with

pull/9010/head
Deanna Garcia 3 years ago
parent a93074e546
commit 5532dae1da
  1. 90
      toolchain/BUILD
  2. 151
      toolchain/cc_toolchain_config.bzl
  3. 8
      toolchain/toolchains.bazelrc

@ -0,0 +1,90 @@
load(":cc_toolchain_config.bzl", "cc_toolchain_config")
package(default_visibility = ["//visibility:public"])
filegroup(name = "empty")
cc_toolchain_suite(
name = "clang_suite",
toolchains = {
"aarch64": ":cc-compiler-aarch64",
"ppcle": "cc-compiler-ppcle",
"s390x": ":cc-compiler-s390x",
"x86_32": ":cc-compiler-x86_32",
"x86_64": ":cc-compiler-x86_64",
},
)
CC_TOOLCHAIN_CPUS = [
"aarch64",
"ppcle",
"s390x",
"x86_32",
"x86_64",
]
[
cc_toolchain(
name = "cc-compiler-" + cpu,
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 = "linux_" + cpu,
)
for cpu in CC_TOOLCHAIN_CPUS
]
cc_toolchain_config(
name = "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 = "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 = "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 = "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 = "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,151 @@
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,
],
),
]),
),
],
),
]
features.append(feature(
name = "default_compile_flags",
enabled = True,
flag_sets = [
flag_set(
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/11.0.1/include",
],
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:aarch64_config --config=cross_config --cpu=aarch64
build:ppcle_config --config=cross_config --cpu=ppcle
build:s390x_config --config=cross_config --cpu=s390x
build:x86_32_config --config=cross_config --cpu=x86_32
build:x86_64_config --config=cross_config --cpu=x86_64
Loading…
Cancel
Save