The following 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.
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.
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:
To prevent mixups of
gcc versions, I created symbolic links of
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
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
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.
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
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
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/" ..