Skip to content

Commit fca2dd8

Browse files
committed
WIP raspberry pi cross compiler
1 parent 628603c commit fca2dd8

4 files changed

Lines changed: 90 additions & 7 deletions

File tree

environment_setup/util.sh

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,10 @@ install_clang_format() {
3737
}
3838

3939
install_cross_compiler() {
40-
file_name=aarch64-tbots-linux-gnu-for-aarch64
4140
if is_darwin $1; then
42-
full_file_name=$file_name.tar.xz
43-
curl -L "https://raw.githubusercontent.com/UBC-Thunderbots/Software-External-Dependencies/refs/heads/main/toolchain/$full_file_name" \
44-
-o /tmp/tbots_download_cache/$full_file_name
45-
tar -xf /tmp/tbots_download_cache/$full_file_name -C /tmp/tbots_download_cache/
46-
sudo mv /tmp/tbots_download_cache/aarch64-tbots-linux-gnu /opt/tbotspython
47-
rm /tmp/tbots_download_cache/$full_file_name
41+
brew install messense/macos-cross-toolchains/aarch64-unknown-linux-gnu
4842
else
43+
file_name=aarch64-tbots-linux-gnu-for-aarch64
4944
if is_x86 $1; then
5045
file_name=aarch64-tbots-linux-gnu-for-x86
5146
fi

src/MODULE.bazel

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ register_toolchains(
250250
)
251251

252252
register_toolchains(
253+
"//toolchains/cc:cc_toolchain_for_macos_robot",
253254
"//toolchains/cc:cc_toolchain_for_k8_aarch64_linux",
254255
"//toolchains/cc:cc_toolchain_for_k8",
255256
"//toolchains/cc:cc_toolchain_for_aarch64",
@@ -286,6 +287,12 @@ new_local_repository(
286287
path = "/opt/tbotspython/aarch64-tbots-linux-gnu/",
287288
)
288289

290+
new_local_repository(
291+
name = "macos_robot_gcc",
292+
build_file = "@//extlibs:macos_robot_gcc.BUILD",
293+
path = "/opt/homebrew/Cellar/aarch64-unknown-linux-gnu/15.2.0/toolchain/",
294+
)
295+
289296
new_local_repository(
290297
name = "motor_board_gcc",
291298
build_file = "@//extlibs:motor_board_gcc.BUILD",

src/toolchains/cc/BUILD

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,9 @@ cc_toolchain_config_k8_aarch64_linux(
269269

270270
toolchain(
271271
name = "cc_toolchain_for_k8_aarch64_linux",
272+
exec_compatible_with = [
273+
"@platforms//os:linux",
274+
],
272275
target_compatible_with = [
273276
"@platforms//cpu:aarch64",
274277
"@platforms//os:linux",
@@ -278,6 +281,77 @@ toolchain(
278281
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
279282
)
280283

284+
# NOTE: the Cellar path is version-pinned; a repository rule should derive it
285+
# (e.g. from `brew --prefix`) once this is productionized.
286+
MACOS_ROBOT_TC = "/opt/homebrew/Cellar/aarch64-unknown-linux-gnu/15.2.0/toolchain"
287+
288+
cc_toolchain_config_k8_aarch64_linux(
289+
name = "gcc_macos_robot",
290+
builtin_include_directories = [
291+
MACOS_ROBOT_TC + "/aarch64-unknown-linux-gnu/include/c++/15.2.0",
292+
MACOS_ROBOT_TC + "/aarch64-unknown-linux-gnu/include/c++/15.2.0/aarch64-unknown-linux-gnu",
293+
MACOS_ROBOT_TC + "/aarch64-unknown-linux-gnu/include/c++/15.2.0/backward",
294+
MACOS_ROBOT_TC + "/lib/gcc/aarch64-unknown-linux-gnu/15.2.0/include",
295+
MACOS_ROBOT_TC + "/lib/gcc/aarch64-unknown-linux-gnu/15.2.0/include-fixed",
296+
MACOS_ROBOT_TC + "/aarch64-unknown-linux-gnu/include",
297+
MACOS_ROBOT_TC + "/aarch64-unknown-linux-gnu/sysroot/usr/include",
298+
] + make_builtin_include_directories(),
299+
tool_paths = {
300+
"ar": MACOS_ROBOT_TC + "/bin/aarch64-unknown-linux-gnu-ar",
301+
"cpp": MACOS_ROBOT_TC + "/bin/aarch64-unknown-linux-gnu-cpp",
302+
# messense ships no dwp; point at gcc (unused without fission).
303+
"dwp": MACOS_ROBOT_TC + "/bin/aarch64-unknown-linux-gnu-gcc",
304+
# wrapper forces -fuse-ld=bfd (messense has no gold linker).
305+
"gcc": "wrapper/macos_robot_gcc",
306+
"gcov": MACOS_ROBOT_TC + "/bin/aarch64-unknown-linux-gnu-gcov",
307+
"ld": MACOS_ROBOT_TC + "/bin/aarch64-unknown-linux-gnu-ld",
308+
"nm": MACOS_ROBOT_TC + "/bin/aarch64-unknown-linux-gnu-nm",
309+
"objcopy": MACOS_ROBOT_TC + "/bin/aarch64-unknown-linux-gnu-objcopy",
310+
"objdump": MACOS_ROBOT_TC + "/bin/aarch64-unknown-linux-gnu-objdump",
311+
"strip": MACOS_ROBOT_TC + "/bin/aarch64-unknown-linux-gnu-strip",
312+
},
313+
toolchain_identifier = "gcc-macos-robot",
314+
)
315+
316+
filegroup(
317+
name = "macos_robot_everything",
318+
srcs = [
319+
"wrapper/macos_robot_gcc",
320+
"@macos_robot_gcc//:everything",
321+
],
322+
)
323+
324+
cc_toolchain(
325+
name = "cc_toolchain_macos_robot",
326+
all_files = ":macos_robot_everything",
327+
ar_files = ":macos_robot_everything",
328+
as_files = ":macos_robot_everything",
329+
compiler_files = ":macos_robot_everything",
330+
dwp_files = ":macos_robot_everything",
331+
linker_files = ":macos_robot_everything",
332+
objcopy_files = ":macos_robot_everything",
333+
strip_files = ":macos_robot_everything",
334+
supports_param_files = 0,
335+
tags = ["no-ide"],
336+
toolchain_config = ":gcc_macos_robot",
337+
toolchain_identifier = "gcc-macos-robot",
338+
)
339+
340+
toolchain(
341+
name = "cc_toolchain_for_macos_robot",
342+
exec_compatible_with = [
343+
"@platforms//os:osx",
344+
"@platforms//cpu:aarch64",
345+
],
346+
target_compatible_with = [
347+
"@platforms//cpu:aarch64",
348+
"@platforms//os:linux",
349+
":glibc_2_27",
350+
],
351+
toolchain = ":cc_toolchain_macos_robot",
352+
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
353+
)
354+
281355
toolchain(
282356
name = "cc_toolchain_for_k8",
283357
exec_compatible_with = [
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/bash --norc
2+
3+
# The prebuilt messense aarch64-unknown-linux-gnu toolchain ships only the BFD
4+
# linker (ld/ld.bfd) — no ld.gold. The shared cc_toolchain config adds
5+
# -fuse-ld=gold, so append -fuse-ld=bfd (last one wins) to use the linker that
6+
# actually exists. Ignored for non-link (compile) invocations.
7+
exec /opt/homebrew/Cellar/aarch64-unknown-linux-gnu/15.2.0/toolchain/bin/aarch64-unknown-linux-gnu-gcc "$@" -fuse-ld=bfd

0 commit comments

Comments
 (0)