Skip to content

Commit f265b90

Browse files
committed
build: Initial support for arm64
- Detects the current architecture based on the current machine (`uname -m` or `CMAKE_SYSETM_PROCESSOR`) instead of assuming `x86_64`. - When appropriate, distinguish between the "Unix architecture" (the one reported by `uname -m` and GCC target triples, such as `aarch64`) and the "Haiku architecture" (the one used by Haiku's toolchains, like `arm64`).
1 parent 0f1fedb commit f265b90

File tree

4 files changed

+32
-9
lines changed

4 files changed

+32
-9
lines changed

CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ add_custom_target(CopyHaikuObjects
66
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/copy_objects.sh)
77

88
if(NOT DEFINED HYCLONE_ARCH)
9-
set(HYCLONE_ARCH "x86_64")
9+
set(HYCLONE_ARCH "${CMAKE_SYSTEM_PROCESSOR}")
10+
if(HYCLONE_ARCH MATCHES "aarch64")
11+
set(HYCLONE_ARCH "arm64")
12+
endif()
1013
endif()
1114

1215
add_compile_definitions(HYCLONE_ARCH=${HYCLONE_ARCH})

build_hprefix.sh

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,17 @@ done
6565

6666
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
6767

68-
HAIKU_ARCH=${HAIKU_ARCH:-"x86_64"}
68+
HAIKU_UNIX_ARCH=${HAIKU_UNIX_ARCH:-"$(uname -m)"}
69+
70+
case $HAIKU_UNIX_ARCH in
71+
"aarch64")
72+
HAIKU_ARCH="arm64"
73+
;;
74+
*)
75+
HAIKU_ARCH=$HAIKU_UNIX_ARCH
76+
;;
77+
esac
78+
6979
HAIKU_BUILD_ENVIRONMENT_ROOT=${HAIKU_BUILD_ENVIRONMENT_ROOT:-"$SCRIPT_DIR/.."}
7080
HAIKU_BUILD_SOURCE_DIRECTORY=${HAIKU_BUILD_SOURCE_DIRECTORY:-"$HAIKU_BUILD_ENVIRONMENT_ROOT/haiku"}
7181
HPREFIX=${HPREFIX:-"$HOME/.hprefix"}
@@ -162,4 +172,4 @@ if [ ! -L "$HPREFIX/system" ]; then
162172
ln -s boot/system $HPREFIX/system
163173
fi
164174

165-
echo "Done"
175+
echo "Done"

copy_objects.sh

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
#!/bin/bash
22
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
33

4-
HAIKU_ARCH=${HAIKU_ARCH:-"x86_64"}
4+
HAIKU_UNIX_ARCH=${HAIKU_UNIX_ARCH:-"$(uname -m)"}
5+
6+
case $HAIKU_UNIX_ARCH in
7+
"aarch64")
8+
HAIKU_ARCH="arm64"
9+
;;
10+
*)
11+
HAIKU_ARCH=$HAIKU_UNIX_ARCH
12+
;;
13+
esac
14+
515
# TODO: This is personalized for my local environment, but making this a subdirectory of the HyClone
616
# tree (such as "haiku-build") seems to be a better idea.
717
HAIKU_BUILD_ENVIRONMENT_ROOT=${HAIKU_BUILD_ENVIRONMENT_ROOT:-"$SCRIPT_DIR/.."}
@@ -17,9 +27,9 @@ HAIKU_GLUE="$HAIKU_BUILD_OUTPUT_ROOT/objects/haiku/$HAIKU_ARCH/release/system/gl
1727
HAIKU_GLUE_ARCH="$HAIKU_GLUE/arch/$HAIKU_ARCH"
1828

1929
# Some distros store the GCC glue objects in lib64, others in lib.
20-
HAIKU_GLUE_GCC=$(echo $HAIKU_BUILD_OUTPUT_ROOT/cross-tools-$HAIKU_ARCH/lib64/gcc/$HAIKU_ARCH-unknown-haiku/**)
30+
HAIKU_GLUE_GCC=$(echo $HAIKU_BUILD_OUTPUT_ROOT/cross-tools-$HAIKU_ARCH/lib64/gcc/$HAIKU_UNIX_ARCH-unknown-haiku/**)
2131
if [ ! -f "$HAIKU_GLUE_GCC/crtbeginS.o" ]; then
22-
HAIKU_GLUE_GCC=$(echo $HAIKU_BUILD_OUTPUT_ROOT/cross-tools-$HAIKU_ARCH/lib/gcc/$HAIKU_ARCH-unknown-haiku/**)
32+
HAIKU_GLUE_GCC=$(echo $HAIKU_BUILD_OUTPUT_ROOT/cross-tools-$HAIKU_ARCH/lib/gcc/$HAIKU_UNIX_ARCH-unknown-haiku/**)
2333
fi
2434

2535
# If Haiku is not built, build it!

runtime_loader/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ add_custom_target(RemoveHaikuSyscalls
2727
COMMAND ar d ${CMAKE_CURRENT_SOURCE_DIR}/libruntime_loader_nosyscalls.a syscalls.o tls.o)
2828

2929
add_library(runtime_loader SHARED blank.c)
30-
target_link_options(runtime_loader PRIVATE
30+
target_link_options(runtime_loader PRIVATE
3131
-nodefaultlibs
3232
-nostartfiles
3333
-Wl,--no-undefined,-shared,-Bsymbolic,-soname=runtime_loader,-entry=runtime_loader
@@ -42,7 +42,7 @@ target_link_libraries(runtime_loader PRIVATE monika)
4242
target_link_libraries(runtime_loader PRIVATE root_os_tls)
4343
target_link_libraries(runtime_loader PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/libgcc_eh-kernel.a)
4444
target_link_libraries(runtime_loader PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/libgcc-kernel.a)
45-
target_link_libraries(runtime_loader PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/libruntime_loader_x86_64.a)
45+
target_link_libraries(runtime_loader PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/libruntime_loader_${HYCLONE_ARCH}.a)
4646
target_link_libraries(runtime_loader PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/libruntime_loader_nosyscalls.a)
4747

48-
install(TARGETS runtime_loader DESTINATION bin)
48+
install(TARGETS runtime_loader DESTINATION bin)

0 commit comments

Comments
 (0)