notes on using qemu to build sonic-pi for raspi
latest runner from tami fork are here. this cover linux\windows\osx.
below are attempts at compiling dev branch for raspberry-pi(4)
ARM
it is not know if building on ARM is even possible with the dev branch, the build scripts/readme for pi where updated a few weeks ago, but they basicly call the linux scripts. and this fail. im using the xeviar jetson as it is similar to the pi, with debian based distro (ubuntu 18.04LTS) and arm core. but 8x more cores and 15Gb of RAM.
xeviar arm
either add yourself to the telavivmakers sonic-pi repo, where you can run automated CI workflows, or ask yair to add you key to SSH in.
address is nvidia@5.tcp.ngrok.io:21163
we're using a nice octa-core jetson xevier kit from nvidia
bare metal
Tried following the sonic-pi github action , but as arm based "runners" are not yet supported nativly in github, ARM is missing important actions (community functions/wrappers around automated installers) used on the other platforms (win/osx/linux) see elixer fail.
so here are the manual things i did to get cmake/qt6/erlang going.
#install qt
wget https://download.qt.io/development_releases/qt/6.3/6.3.0-beta2/single/qt-everywhere-src-6.3.0-beta2.zip
unzip qt-everywhere-src-6.3.0-beta2.zip && cd qt-everywhere-src-6.3.0-beta2
chmod a+x configure && ./configure
make && sudo make install
elixer, used in the linux/osx/win build.yml didnt work for me erlang siggested usign kerl
#install erlang
curl -O https://raw.githubusercontent.com/kerl/kerl/master/kerl
chmod a+x kerl
./kerl list releases
kerl build 24.2
error bellow
./kerl build 24.2
Downloading 24.2 to /home/nvidia/.kerl/archives...
...
Building Erlang/OTP 24.2 (24.2), please wait...
APPLICATIONS DISABLED (See: /home/nvidia/.kerl/builds/24.2/otp_build_24.2.log)
* jinterface : No Java compiler found
APPLICATIONS INFORMATION (See: /home/nvidia/.kerl/builds/24.2/otp_build_24.2.log)
* wx : wxWidgets was not compiled with --enable-webview or wxWebView developer package is not installed, wxWebView will NOT be available
DOCUMENTATION INFORMATION (See: /home/nvidia/.kerl/builds/24.2/otp_build_24.2.log)
* documentation :
* xmllint is missing.
* Using fakefop to generate placeholder PDF files.
Build failed.
make[3]: *** [aarch64-unknown-linux-gnu/wxe_init.o] Error 4
make[3]: Leaving directory '/home/nvidia/.kerl/builds/24.2/otp_src_24.2/lib/wx/c_src'
/home/nvidia/.kerl/builds/24.2/otp_src_24.2/make/otp_subdir.mk:29: recipe for target 'opt' failed
make[2]: *** [opt] Error 2
make[2]: Leaving directory '/home/nvidia/.kerl/builds/24.2/otp_src_24.2/lib/wx'
/home/nvidia/.kerl/builds/24.2/otp_src_24.2/make/otp_subdir.mk:29: recipe for target 'opt' failed
make[1]: *** [opt] Error 2
make[1]: Leaving directory '/home/nvidia/.kerl/builds/24.2/otp_src_24.2/lib'
Makefile:498: recipe for target 'libs' failed
make: *** [libs] Error 2
Please see /home/nvidia/.kerl/builds/24.2/otp_build_24.2.log for full details.
virtual machine
nice links
- emulate-raspberry-pi-with-qemu guide
- qemu-system-arm manpage
- qemu-system-aarch64 manpage
- :( - issue regarding qemu virt of raspi4
sudo apt full-upgrade
mkdir ~/qemu-raspi && cd ~/qemu-raspi
#get image
wget https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2022-01-28/2022-01-28-raspios-bullseye-arm64-lite.zip
unzip 2022-01-28-raspios-bullseye-arm64-lite.zip
#mount image and copy DTDs and kernel
cp 2022-01-28-raspios-bullseye-arm64-lite.img foo.img
qemu-img resize foo.img 16G
mount -o loop,offset=4194304 foo.img /mnt
cp /mnt/*.dtb .
cp /mnt/kernel8.img .
umount /mnt
#build machine
qemu-system-aarch64 -m 1024 \
-M raspi3 -smp 4 \
-kernel kernel8.img \
-dtb bcm2710-rpi-3-b-plus.dtb \
-sd foo.img \
-append "console=ttyAMA0 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4" \
-nographic -device usb-net,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::5555-:22
# expand filesystem
# clone reepository
LINUX
we have a working github workflow in the tami github/sonic-pi repo , its outputs are in the download section of this wiki
this is the env path of a working virtual build from upstream
2022-02-25T11:09:55.6801567Z
env:
pythonLocation: /opt/hostedtoolcache/Python/3.10.2/x64
LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.10.2/x64/lib:/home/runner/work/sonic-pi/Qt/6.2.2/gcc_64/lib
PKG_CONFIG_PATH: /home/runner/work/sonic-pi/Qt/6.2.2/gcc_64/lib/pkgconfig
Qt6_DIR: /home/runner/work/sonic-pi/Qt/6.2.2/gcc_64
QT_PLUGIN_PATH: /home/runner/work/sonic-pi/Qt/6.2.2/gcc_64/plugins
QML2_IMPORT_PATH: /home/runner/work/sonic-pi/Qt/6.2.2/gcc_64/qml
INSTALL_DIR_FOR_OTP: /home/runner/work/_temp/.setup-beam/otp
INSTALL_DIR_FOR_ELIXIR: /home/runner/work/_temp/.setup-beam/elixir
CC: clang
QT_INSTALL_LOCATION: /home/runner/work/sonic-pi/Qt/6.2.2/gcc_64
linux on metal
general
sudo apt-get install build-essential libgl1-mesa-dev libxkbcommon-x11-0 libpulse-dev libxcb-util1 libxcb-glx0 libxcb-icccm4 \
libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-render0 libxcb-shape0 libxcb-shm0 libxcb-sync1 \
libxcb-xfixes0 libxcb-xinerama0 libxcb1 automake autoconf libncurses5-dev -y
QT
# list-qt linux desktop --arch <QT_VERSION>' to list valid architectures.
$ aqt list-qt linux desktop --arch 6.2.2
gcc_64
$ aqt list-qt linux desktop --modules 6.2.2 gcc_64
debug_info qt3d qt5compat qtcharts qtconnectivity qtdatavis3d qtimageformats qtlottie qtmultimedia qtnetworkauth \
qtpositioning qtquick3d qtquicktimeline qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtshadertools \
qtvirtualkeyboard qtwaylandcompositor qtwebchannel qtwebengine qtwebsockets qtwebview
$ python3 -m aqt install-qt linux desktop 6.2.2 -m qtwebengine -O /home/user/sonic-pi/qt6
Elixer
curl -O https://raw.githubusercontent.com/kerl/kerl/master/kerl
chmod a+x kerl
./kerl list releases
./kerl build 24.2
prebuild and config
export QT_INSTALL_LOCATION=/home/user/sonic-pi/qt6/6.2.2/gcc_64
cd app
./linux-prebuild
./linux-config
cd build
cmake --build . --config release
also (some tips for local builds)[https://github.com/sonic-pi-net/sonic-pi/issues/3008]