Skip to content

Commit

Permalink
Add aarch64 toolchain
Browse files Browse the repository at this point in the history
  • Loading branch information
ewfuentes committed Mar 11, 2024
1 parent 88689a3 commit 381b275
Show file tree
Hide file tree
Showing 8 changed files with 287 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ bazel-*
# python files
__pycache__
.ipynb_checkpoints
.virtual_documents/
11 changes: 11 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
workspace(name = "robot")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
name = "aarch64-none-linux-gnu",
urls = [
"https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--glibc--stable-2020.08-1.tar.bz2"
],
strip_prefix="aarch64--glibc--stable-2020.08-1",
build_file="//third_party:BUILD.aarch64-none-linux-gnu",
integrity = "sha256-irei8Xy5ZiGwSKsKhyZQ3WL6pUzXTJYbmQK4wEv/fdE="
)

http_archive(
name = "platforms",
urls = [
Expand All @@ -14,6 +24,7 @@ register_toolchains(
"//toolchain:clang_toolchain_for_linux_x84_64",
"//toolchain:gcc_10_toolchain_for_linux_x84_64",
"//toolchain:gcc_11_toolchain_for_linux_x84_64",
"//toolchain:gcc_toolchain_for_linux_aarch64",
)

http_archive(
Expand Down
6 changes: 6 additions & 0 deletions third_party/BUILD.aarch64-none-linux-gnu
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

filegroup(
name = "all",
srcs = glob(["**/*"]),
visibility=["//visibility:public"],
)
51 changes: 51 additions & 0 deletions toolchain/BUILD
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

load(":clang_toolchain_config.bzl", "clang_toolchain_config")
load(":gcc_toolchain_config.bzl", "gcc_toolchain_config")
load(":gcc_aarch64_toolchain_config.bzl", "gcc_aarch64_toolchain_config")

package(default_visibility = ["//visibility:public"])

Expand All @@ -20,6 +21,10 @@ gcc_toolchain_config(
gcc_version="10",
)

gcc_aarch64_toolchain_config(
name="aarch64_gcc_toolchain_config",
)

cc_toolchain(
name="k8_clang_toolchain",
all_files = ":empty",
Expand Down Expand Up @@ -101,6 +106,44 @@ toolchain(
],
)

filegroup(
name = "aarch64_wrapper_scripts",
srcs = [
":aarch64-linux-ar.sh",
":aarch64-linux-gcc.sh",
":aarch64-linux-ld.sh",
"@aarch64-none-linux-gnu//:all",
]
)

cc_toolchain(
name="aarch64_gcc_toolchain",
all_files = ":aarch64_wrapper_scripts",
ar_files = ":aarch64_wrapper_scripts",
as_files = ":aarch64_wrapper_scripts",
compiler_files = ":aarch64_wrapper_scripts",
strip_files = ":aarch64_wrapper_scripts",
objcopy_files = ":aarch64_wrapper_scripts",
linker_files = ":aarch64_wrapper_scripts",
dwp_files = ":empty",
toolchain_config = ":aarch64_gcc_toolchain_config",
supports_param_files=0,
)

toolchain(
name = "gcc_toolchain_for_linux_aarch64",
toolchain = ":aarch64_gcc_toolchain",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
exec_compatible_with = [
"@platforms//cpu:x86_64",
"@platforms//os:linux",
],
target_compatible_with = [
"@platforms//cpu:aarch64",
"@platforms//os:linux",
],
)

constraint_setting(name = "compiler")
constraint_value(
name="clang",
Expand Down Expand Up @@ -143,3 +186,11 @@ platform(
"@platforms//os:linux",
]
)

platform(
name = "gcc_aarch64",
constraint_values = [
"@platforms//cpu:aarch64",
"@platforms//os:linux",
]
)
3 changes: 3 additions & 0 deletions toolchain/aarch64-linux-ar.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
set -euo pipefail
external/aarch64-none-linux-gnu/bin/aarch64-linux-ar "$@"
3 changes: 3 additions & 0 deletions toolchain/aarch64-linux-gcc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
set -euo pipefail
external/aarch64-none-linux-gnu/bin/aarch64-linux-gcc "$@"
3 changes: 3 additions & 0 deletions toolchain/aarch64-linux-ld.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
set -euo pipefail
external/aarch64-none-linux-gnu/bin/aarch64-linux-gcc "$@"
209 changes: 209 additions & 0 deletions toolchain/gcc_aarch64_toolchain_config.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@

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_path")

def _impl(ctx):
tool_paths = [
tool_path(
name = "gcc",
path = "aarch64-linux-gcc.sh",
),
tool_path(
name = "ar",
path = "aarch64-linux-ar.sh",
),
tool_path(
name = "ld",
path = "aarch64-linux-ld.sh",
),
tool_path(
name = "cpp",
path = "aarch64-linux-gcc.sh",
),
tool_path(
name = "gcov",
path = "/bin/false",
),
tool_path(
name = "nm",
path = "/bin/false",
),
tool_path(
name = "objdump",
path = "/bin/false",
),
tool_path(
name = "strip",
path = "/bin/false",
),
]
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.c_compile,
ACTION_NAMES.cpp_compile,
]
features = [
feature(
name = "toolchain_include_directories",
enabled = True,
flag_sets = [
flag_set(
actions = all_compile_actions,
flag_groups = [
flag_group(
flags=[
"--sysroot",
"external/aarch64-none-linux-gnu/aarch64-buildroot-linux-gnu/sysroot",
"-isystem",
"external/aarch64-none-linux-gnu/aarch64-buildroot-linux-gnu/include",
"-isystem",
"external/aarch64-none-linux-gnu/aarch64-buildroot-linux-gnu/include/c++/9.3.0",
"-isystem",
"external/aarch64-none-linux-gnu/aarch64-buildroot-linux-gnu/include/c++/9.3.0/aarch64-buildroot-linux-gnu",
"-isystem",
"external/aarch64-none-linux-gnu/lib/gcc/aarch64-buildroot-linux-gnu/9.3.0/include",
"-isystem",
"external/aarch64-none-linux-gnu/lib/gcc/aarch64-buildroot-linux-gnu/9.3.0/include-fixed",
]
)
]
)
]
),
feature(
name = "default_linker_flags",
enabled=True,
flag_sets = [
flag_set(
actions = all_link_actions,
flag_groups = [
flag_group(
flags=[
"-lstdc++",
"-lm",
],
),
],
),
],
),
feature(
name="warning_compile_flags",
enabled=True,
flag_sets = [
flag_set(
actions = all_compile_actions,
flag_groups = [
flag_group(
flags=[
"-Wall", "-Wextra", "-Werror",
"-Woverlength-strings",
"-Wpointer-arith",
"-Wunused-local-typedefs",
"-Wunused-result",
"-Wvarargs",
"-Wvla",
]
)
]
)
]
),
feature(
name="cpp_compile_flags",
enabled=True,
flag_sets = [
flag_set(
actions = [ACTION_NAMES.cpp_compile],
flag_groups = [
flag_group(
flags=["-std=c++2a", "-fPIC", "-no-canonical-prefixes", "-fno-canonical-system-headers"],
)
]
)
]
),
feature(
name="c_compile_flags",
enabled=True,
flag_sets = [
flag_set(
actions = [ACTION_NAMES.c_compile],
flag_groups = [
flag_group(
flags=["-fPIC"],
)
]
)
]
),
feature(
name="dbg",
enabled=False,
flag_sets = [
flag_set(
actions = all_compile_actions,
flag_groups = [
flag_group(
flags=["-ggdb"],
)
]
)
]
),
feature(
name="opt",
enabled=False,
flag_sets = [
flag_set(
actions = all_compile_actions,
flag_groups = [
flag_group(
flags=["-O2"],
)
]
)
]
),
feature(
name="fastbuild",
enabled=False,
flag_sets = [
flag_set(
actions = all_compile_actions,
flag_groups = [
flag_group(
flags=["-O1"],
)
]
)
]
),
]

return cc_common.create_cc_toolchain_config_info(
ctx=ctx,
features = features,
cxx_builtin_include_directories = [
],
toolchain_identifier="aarch64-gcc-toolchain",
host_system_name="local",
target_system_name="local",
target_cpu="aarch64",
target_libc="unknown",
compiler="gcc",
abi_version="unknown",
abi_libc_version="unknown",
tool_paths = tool_paths
)

gcc_aarch64_toolchain_config = rule(
implementation = _impl,
attrs = {
},
provides = [CcToolchainConfigInfo]
)

0 comments on commit 381b275

Please sign in to comment.