Skip to content

Commit aef438b

Browse files
authored
Ci aarch64 (#7612)
#changelog #ci
1 parent 16d7da1 commit aef438b

5 files changed

Lines changed: 153 additions & 9 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
matrix:
2525
cfg:
2626
- {target: linuxarmv6l, libs: armv6l}
27-
# - {target: linuxarmv7l, libs: armv7l}
27+
- {target: linuxaarch64, libs: aarch64}
2828
env:
2929
TARGET: ${{matrix.cfg.target}}
3030
steps:

libs/openFrameworksCompiled/project/linuxaarch64/config.linuxaarch64.default.mk

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ PLATFORM_PKG_CONFIG_LIBRARIES += egl
9595
PLATFORM_CORE_EXCLUSIONS += $(OF_LIBS_PATH)/openFrameworks/sound/ofFmodSoundPlayer.cpp
9696

9797
ifeq ($(CROSS_COMPILING),1)
98-
98+
ifdef MAKEFILE_DEBUG
99+
$(info detected cross compiling $(CROSS_COMPILING))
100+
endif
99101
ifdef TOOLCHAIN_ROOT
100102
#You have specified TOOLCHAIN_ROOT with an environment variable
101103
else
@@ -105,7 +107,7 @@ ifeq ($(CROSS_COMPILING),1)
105107
ifdef GCC_PREFIX
106108
#You have specified GCC_PREFIX with an environment variable
107109
else
108-
GCC_PREFIX = arm-linux-gnueabihf
110+
GCC_PREFIX = aarch64-linux-gnu
109111
endif
110112

111113
PLATFORM_CXX = $(TOOLCHAIN_ROOT)/bin/$(GCC_PREFIX)-g++
@@ -115,17 +117,21 @@ ifeq ($(CROSS_COMPILING),1)
115117

116118
SYSROOT=$(RPI_ROOT)
117119

118-
#c++ 17 support - comment out two lines below to use c++11
119-
PLATFORM_CFLAGS += -std=c++17
120+
PLATFORM_CFLAGS += --sysroot=$(SYSROOT)
120121

121-
PLATFORM_HEADER_SEARCH_PATHS += $(SYSROOT)/usr/include/c++/7
122+
PLATFORM_HEADER_SEARCH_PATHS += $(SYSROOT)/usr/include/c++
123+
PLATFORM_HEADER_SEARCH_PATHS += $(TOOLCHAIN_ROOT)/lib/gcc/$(GCC_PREFIX)/$(GCC_VERSION)/include
122124

123125
PLATFORM_LIBRARY_SEARCH_PATHS += $(SYSROOT)/usr/lib/$(GCC_PREFIX)
126+
PLATFORM_LIBRARY_SEARCH_PATHS += $(SYSROOT)/lib/$(GCC_PREFIX)
127+
PLATFORM_LIBRARY_SEARCH_PATHS += $(TOOLCHAIN_ROOT)/lib/gcc/$(GCC_PREFIX)/$(GCC_VERSION)
124128

125129
PLATFORM_LDFLAGS += --sysroot=$(SYSROOT)
126-
PLATFORM_LDFLAGS += -Wl,-rpath=$(SYSROOT)/usr/lib/$(GCC_PREFIX)
127-
PLATFORM_LDFLAGS += -Wl,-rpath=$(SYSROOT)/lib/$(GCC_PREFIX)
130+
PLATFORM_LDFLAGS += -Xlinker -rpath-link=$(SYSROOT)/usr/lib/$(GCC_PREFIX)
131+
PLATFORM_LDFLAGS += -Xlinker -rpath-link=$(SYSROOT)/lib/$(GCC_PREFIX)
132+
PLATFORM_LDFLAGS += -Xlinker -rpath-link=$(SYSROOT)/opt/vc/lib
133+
PLATFORM_LDFLAGS += -Xlinker -rpath-link=$(SYSROOT)/usr/lib/arm-linux-gnueabihf/pulseaudio
128134

129-
PKG_CONFIG_LIBDIR=$(SYSROOT)/usr/lib/pkgconfig:$(SYSROOT)/usr/lib/arm-linux-gnueabihf/pkgconfig:$(SYSROOT)/usr/share/pkgconfig
135+
PKG_CONFIG_LIBDIR=$(SYSROOT)/usr/lib/pkgconfig:$(SYSROOT)/usr/lib/$(GCC_PREFIX)/pkgconfig:$(SYSROOT)/usr/share/pkgconfig
130136

131137
endif

scripts/ci/linuxaarch64/build.sh

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/bin/bash
2+
set -ev
3+
OF_ROOT=$( cd "$(dirname "$0")/../../.." ; pwd -P )
4+
5+
export GCC_PREFIX=aarch64-linux-gnu
6+
export GCC_VERSION=10.3.0
7+
export GST_VERSION=1.0
8+
export RPI_ROOT=${OF_ROOT}/scripts/ci/$TARGET/raspbian
9+
export TOOLCHAIN_ROOT=${OF_ROOT}/scripts/ci/$TARGET/rpi_toolchain
10+
export PLATFORM_OS=Linux
11+
export PLATFORM_ARCH=aarch64
12+
export PKG_CONFIG_LIBDIR=${RPI_ROOT}/usr/lib/pkgconfig:${RPI_ROOT}/usr/lib/${GCC_PREFIX}/pkgconfig:${RPI_ROOT}/usr/share/pkgconfig
13+
export CXX="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-g++"
14+
export CC="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-gcc"
15+
export AR=${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-ar
16+
export LD=${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-ld
17+
18+
export PATH=/rpi_toolchain/bin/:$PATH
19+
export LD_LIBRARY_PATH=/rpi_toolchain/lib:$LD_LIBRARY_PATH
20+
21+
echo "**** Building emptyExample ****"
22+
cd $OF_ROOT
23+
cp scripts/templates/linuxaarch64/Makefile examples/templates/emptyExample/
24+
cp scripts/templates/linuxaarch64/config.make examples/templates/emptyExample/
25+
cd examples/templates/emptyExample/
26+
make Debug -j2
27+
28+
#TODO:
29+
#echo "**** Building allAddonsExample ****"
30+
#cd $OF_ROOT
31+
#cp scripts/templates/linuxaarch64/Makefile examples/templates/allAddonsExample/
32+
#cp scripts/templates/linuxaarch64/config.make examples/templates/allAddonsExample/
33+
#cd examples/templates/allAddonsExample/
34+
#make Debug -j2

scripts/ci/linuxaarch64/install.sh

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#!/bin/bash
2+
set -e
3+
set -o pipefail
4+
# trap any script errors and exit
5+
trap "trapError" ERR
6+
7+
trapError() {
8+
echo
9+
echo " ^ Received error ^"
10+
cat formula.log
11+
exit 1
12+
}
13+
14+
installPackages(){
15+
sudo apt-get -y update
16+
sudo apt-get -y install multistrap unzip
17+
#workaround for https://bugs.launchpad.net/ubuntu/+source/multistrap/+bug/1313787
18+
sudo sed -i s/\$forceyes//g /usr/sbin/multistrap
19+
}
20+
21+
createRaspbianImg(){
22+
#needed since Ubuntu 18.04 - allow non https repositories
23+
mkdir -p raspbian/etc/apt/apt.conf.d/
24+
echo 'Acquire::AllowInsecureRepositories "true";' | sudo tee raspbian/etc/apt/apt.conf.d/90insecure
25+
multistrap -a arm64 -d raspbian -f multistrap.conf
26+
}
27+
28+
SCRIPT_DIR="${BASH_SOURCE%/*}"
29+
if [[ ! -d "$SCRIPT_DIR" ]]; then SCRIPT_DIR="$PWD"; fi
30+
. "$SCRIPT_DIR/../../dev/downloader.sh"
31+
32+
downloadToolchain(){
33+
wget https://github.com/openframeworks/openFrameworks/releases/download/tools/cross-gcc-10.3.0-pi_64.tar.gz
34+
tar xvf cross-gcc-10.3.0-pi_64.tar.gz
35+
mv cross-pi-gcc-10.3.0-64 rpi_toolchain
36+
rm cross-gcc-10.3.0-pi_64.tar.gz
37+
}
38+
39+
downloadFirmware(){
40+
wget https://github.com/raspberrypi/firmware/archive/master.zip -O firmware.zip
41+
unzip firmware.zip
42+
cp -r firmware-master/opt raspbian/
43+
rm -r firmware-master
44+
rm firmware.zip
45+
}
46+
47+
relativeSoftLinks(){
48+
for link in $(ls -la | grep "\-> /" | sed "s/.* \([^ ]*\) \-> \/\(.*\)/\1->\/\2/g"); do
49+
lib=$(echo $link | sed "s/\(.*\)\->\(.*\)/\1/g");
50+
link=$(echo $link | sed "s/\(.*\)\->\(.*\)/\2/g");
51+
rm $lib
52+
ln -s ../../..$link $lib
53+
done
54+
55+
for f in *; do
56+
error=$(grep " \/lib/" $f > /dev/null 2>&1; echo $?)
57+
if [ $error -eq 0 ]; then
58+
sed -i "s/ \/lib/ ..\/..\/..\/lib/g" $f
59+
sed -i "s/ \/usr/ ..\/..\/..\/usr/g" $f
60+
fi
61+
done
62+
}
63+
64+
65+
ROOT=$( cd "$(dirname "$0")" ; pwd -P )
66+
echo $ROOT
67+
cd $ROOT
68+
installPackages
69+
createRaspbianImg
70+
downloadToolchain
71+
downloadFirmware
72+
73+
cp -rn rpi_toolchain/aarch64-linux-gnu/libc/lib/* $ROOT/raspbian/usr/lib/
74+
cp -rn rpi_toolchain/aarch64-linux-gnu/libc/usr/lib/* $ROOT/raspbian/usr/lib/
75+
cp -rn rpi_toolchain/aarch64-linux-gnu/lib/* $ROOT/raspbian/usr/lib/
76+
77+
cd $ROOT/raspbian/usr/lib
78+
relativeSoftLinks
79+
cd $ROOT/raspbian/usr/lib/aarch64-linux-gnu
80+
relativeSoftLinks
81+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[General]
2+
arch=arm64
3+
directory=raspbian
4+
cleanup=true
5+
noauth=true
6+
unpack=true
7+
aptsources=Raspbian-Base OpenFrameworks
8+
debootstrap=Raspbian-Base OpenFrameworks
9+
10+
11+
[Raspbian-Base]
12+
packages=base-files dbus dpkg dropbear initscripts iputils-ping isc-dhcp-client kmod login locales lsb-base lsb-release makedev netbase net-tools sysvinit-utils sysv-rc libudev-dev
13+
source=http://deb.debian.org/debian
14+
keyring=debian-archive-keyring
15+
components=main contrib non-free rpi
16+
suite=bullseye
17+
18+
[OpenFrameworks]
19+
packages=libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libopencv-dev libegl1-mesa-dev libglvnd-dev libgles2-mesa-dev libassimp-dev librtaudio-dev libboost-filesystem-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good liburiparser-dev libcurl4-openssl-dev libxml2-dev libpugixml-dev libpoco-dev libglfw3-dev libxrandr-dev libxinerama-dev libxcursor-dev freeglut3-dev libxi-dev
20+
source=http://deb.debian.org/debian
21+
keyring=debian-archive-keyring
22+
components=main contrib non-free rpi
23+
suite=bullseye

0 commit comments

Comments
 (0)