This is a rough guide on how to set up cross compilation between a BeagleBone BELA and an OSX machine. It is based on the description in the README_BELA file of the SuperCollider installation.
set date
For proper compilation, it is necessary that the BELA board’s time is reasonably similar to your main machine.
dpkg-reconfigure tzdata # configure your time zone
ntpdate pool.ntp.org # sync time once with an ntp server
date # make sure this gives the right result
Since the BBB does not feature a realtime clock that survives reboots, you have to repeat this procedure every time you reboot the board. To prevent that, you might want to set up NTP for details.
preparation
Since BELA’s SuperCollider compiles on gcc4.8, you need the crosscompiler for arm linux. You can find binaries here. This package installs arm-linux compilers in an exotic directory, which needs to be in your PATH variable:
export PATH=$PATH:/usr/local/linaro/arm-linux-gnueabihf/bin
To prevent mixups of gcc
versions, I created symbolic links of gcc
and g++
to name the specific versions:
cd /usr/local/linaro/arm-linux-gnueabihf/bin/
ln -s arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gcc-4.8
ln -s arm-linux-gnueabihf-g++ arm-linux-gnueabihf-g++-4.8
Install distcc
on both your main machine and the BELA. For OSX, this is easily done with homebrew by
brew install distcc
on the BELA this is done via
apt-get install -t jessie distcc
compile
To ensure proper connection, do not attempt to cross-compile over a wireless connection. It will just not work properly.
On your main machine, run distcc via
distccd --verbose --no-detach --daemon --allow 192.168.7.2 --log-level error --log-file ~/distccd.log
Alternatively, you can set the allowed IP address to the range of your ethernet connection, this could be e.g. 192.168.1.0/22
.
Optionally, you might want to set the log level to info
in order to see some output in the log files, even when the compiler is initiated. I found this very helpful in gaining trust in the system.
Watch the helpfile via
tail ~/distccd.log
On the BELA board, announce the IP to send compile directives to and how the compilers are called
export DISTCC_HOSTS="192.168.7.1"
export CC="/usr/bin/distcc arm-linux-gnueabihf-gcc-4.8"
export CXX="/usr/bin/distcc arm-linux-gnueabihf-g++-4.8"
Make sure you don’t pass -march=native
to the compiler when using distcc, or it will compile natively (for your main machine). So do not pass -DNATIVE=ON
to cmake
.
Building, then, is pretty straight forward:
mkdir build; cd build
# cmake
cmake .. -DNOVA_SIMD=ON -DSSE=OFF -DSSE2=OFF -DINSTALL_HELP=OFF -DSC_QT=OFF -DSC_IDE=OFF -DSC_EL=OFF -DSC_ED=OFF -DSC_VIM=OFF -DSUPERNOVA=OFF -DNO_AVAHI=ON -DENABLE_TESTSUITE=OFF -DAUDIOAPI=bela
# make will take about 10 minutes, observe the log files on your main machine
make -j8
make install
SC3 plugins setup is similar, only the configuration step is different:
cmake -DSC_PATH="/usr/local/include/SuperCollider/" ..