Mac Tutorial: How to compile and upload the firmware of MIs eurorack modules


Okay so in ‘/Users/Ryan/arm-cs-tools/bin’ the file ‘arm-none-eabi-gcc’ does exist (794KB). Is that where it should be?


Okay guys I got it working. Silly amateur mistake of not being specific with my TOOLCHAIN_PATH as you mentioned…just had to add /Volumes/. Thank you guys so much for the help.


I’ve been trying to compile Elements and Clouds on my own and after many hours of trying, (I’m still learning), I am not sure what to do. I have gotten the Elements firmware to compile but can not get the bootloader, or the .wav file made, or any of the Clouds code for that matter. I am using the tool chain 4.8 that pichenettes linked above, although I am not positive I set up the PATH correctly. All other firmware/wav files for the STFM32F1 modules are compiling correctly. I am using OSX 10.10

Things I have tried:

  • git submodule init && git submodule update
  • set PYTHONPATH, export PYTHONPATH=$PYTHONPATH:./Library/Python/2.7/site-packages:.
  • TOOLCHAIN_PATH is set in elements/makefile and elements/bootloader/makefile to 4.8 tool chain
  • using newer versions of the tool chain
  • pulling my hair out
  • lots of other things that probably did nothing…but i guess i have learned a lot so far

Any hints? Here is my terminal message, it looks about the same for Elements and Clouds:

Homes-Mac-Pro:eurorack Ryan$ make -f elements/bootloader/makefile
/usr/local/arm-4.8.3/bin/arm-none-eabi-g++ -c -g -O2 -Wall -Werror -Wno-unused-local-typedefs -fasm -finline -finline-functions-called-once -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -I. -DGCC_ARMCM4 -DSTM32F4XX -DNO_APPLICATION -DF_CPU=168000000L -DF_CRYSTAL=8000000L -DUSE_STDPERIPH_DRIVER -DSYSCLK_FREQ_168MHz=168000000L -Istmlib/third_party/STM -Istmlib/third_party/STM/CMSIS/CM3_f4xx -Istmlib/third_party/STM/CMSIS/CM3_f4xx/startup/gcc -Istmlib/third_party/STM/STM32F4xx_StdPeriph_Driver/inc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb-interwork -funroll-loops -fno-exceptions -fno-rtti elements/bootloader/ -o build/elements_bootloader/bootloader.o
elements/bootloader/ In function ‘void InitializeReception()’:
elements/bootloader/ error: no matching function for call to 'stm_audio_bootloader::PacketDecoder::Init(int)'
elements/bootloader/ note: candidate is:
In file included from elements/bootloader/
./stm_audio_bootloader/qpsk/packet_decoder.h:57:8: note: void stm_audio_bootloader::PacketDecoder::Init()
void Init();
./stm_audio_bootloader/qpsk/packet_decoder.h:57:8: note: candidate expects 0 arguments, 1 provided
make: ***** [build/elements_bootloader/bootloader.o] Error 1

And if this helps, here is a snippet from Clouds trying to compile the firmware…I can include more of the message if necessary:

In file included from ./clouds/dsp/granular_processor.h:38:0,
from clouds/
./clouds/dsp/fx/pitch_shifter.h: In member function ‘void clouds::PitchShifter::set_size(float)’:
./clouds/dsp/fx/pitch_shifter.h:101:39: error: ‘ONE_POLE’ was not declared in this scope
ONE_POLE(size_, target_size, 0.05f)


When have you cloned the public repo?

For some reason it looks like it’s trying to build with some out of date versions of both stm-audio-bootloader and stmlib!


No more than a week ago using git clone .
I ran git submodule update stmlib && git submodule update stm_audio_bootloader as well from my eurorack directory.


Okay…so maybe I was updating wrong? I just got elements and clouds bootloader and .wav to compile! I manually pulled the stm_audio_bootloader folder…wish I had tried that sooner. Thanks for the hint!
P.S. just got my Shades and Links today, can’t wait to put em to use :slight_smile:


Hi, I am still stucking a little bit with the build Process of the Elements code.
If I create the bin with “make -f elements/makefile hex”, everything went fine. But if I try to create the Bootloader combo with “make -f elements/bootloader/makefile hex” , i’ll get this error Message:

Marcuss-Mini:eurorack marcuskorb$ make -f elements/bootloader/makefile hex
stmlib/ build/elements_bootloader/ No such file or directory
/usr/local/arm-4.8.3/bin/arm-none-eabi-g++ -MM -g -O2 -Wall -Werror -Wno-unused-local-typedefs -fasm -finline -finline-functions-called-once -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -I. -DGCC_ARMCM4 -DSTM32F4XX -DNO_APPLICATION -DF_CPU=168000000L -DF_CRYSTAL=8000000L -DUSE_STDPERIPH_DRIVER -DSYSCLK_FREQ_168MHz=168000000L -Istmlib/third_party/STM -Istmlib/third_party/STM/CMSIS/CM3_f4xx -Istmlib/third_party/STM/CMSIS/CM3_f4xx/startup/gcc -Istmlib/third_party/STM/STM32F4xx_StdPeriph_Driver/inc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb-interwork -funroll-loops -fno-exceptions -fno-rtti elements/bootloader/ -MF build/elements_bootloader/bootloader.d -MT build/elements_bootloader/bootloader.o
make: /usr/local/arm-4.8.3/bin/arm-none-eabi-g++: No such file or directory
make: ***** [build/elements_bootloader/bootloader.d] Error 1
Marcuss-Mini:eurorack marcuskorb$

especially the line " make: /usr/local/arm-4.8.3/bin/arm-none-eabi-g++: " looks strange for me, because in the makefile I have entered the right path. Does someone know where this path came from?

btw: Is it possible that an friendly Person can upload (or send) me the Bootloader combo :slight_smile: :slight_smile:
this would be really great.


For the STM32F4 projects, the toolchain path is not taken from stmlib/ but from the project makefile (elements/makefile or elements/bootloader/makefile).


Edit: ^ he’s quick


somehow, for reason beyond me, I have made it to the end of the tutorial… but, when I try to upload, I receive this error:

python stmlib/programming/serial/ \\
-p /dev/cu.usbserial-AH02F3DH \\
-b 115200 \\
-e -v \\
-w build/braids/braids_bootloader_combo.bin
Can’t init. Ensure that BOOT0 is enabled and reset device
Traceback (most recent call last):
File “stmlib/programming/serial/”, line 413, in
bootversion = cmd.cmdGet()
File “stmlib/programming/serial/”, line 106, in cmdGet
if self.cmdGeneric(0x00):
File “stmlib/programming/serial/”, line 103, in cmdGeneric
return self._wait_for_ack(hex(cmd))
File “stmlib/programming/serial/”, line 69, in _wait_for_ack
raise CmdException(“No response to s” info)
main.CmdException: No response to 0x0
make: ***** [upload_combo_serial] Error 1

Is this a connection error to the FTDI or on Braids?


Are you sure you put your Braids into firmware boot loader mode with this step:

Press and hold RESET. Press SYSBOOT simultaneously, then release RESET while still holding SYSBOOT.


I did, numerous times. I tried with it powered on. I tried holding both buttons down then powering it on. I’m assuming that once you release RESET while still holding SYSBOOT, you can let go of SYSBOOT.


Yes, you can let go of SYSBOOT now…

Jumper cables connected correctly? RX->TX, TX->RX, GND->GND?

Braids powered up via the Eurorack power cable?


Jumper cables connected correctly? RX->TX, TX->RX, GND->GND? - Yep

Braids powered up via the Eurorack power cable? - Yep

Before powering I went over every solder joint with a jewelers loupe and didnt find any bridges. Also, all voltages check out.


did you compile the file as a .hex? in the first line i see braids_bootloader_combo.bin and I thought you should be trying to upload the .hex file.


Hi, I’ve not read the whole thread but I did get clouds building for me. I downloaded the 4.8.3 version of the compiler and did all of that but I was getting the same:

error: ‘ONE_POLE’ was not declared in this scope

error above. It was mentioned to check the submodule and make sure it was updated. I ran update, I deleted it and re-inited it, etc. Found the issue. If you cd into stmlib and do a git status, you’ll likely get:

HEAD detached at d6fdac5

And sure enough, if you go back to the eurorack git page, you’ll see stmlib is linked to that changelist. So if you go into stmlib and do a ‘git checkout master’ this will update stmlib to the latest which will build clouds. If you go back up to the eurorack directory and do a ‘git status’, you’ll see something like:

Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)

modified: stmlib (new commits)

no changes added to commit (use “git add” and/or “git commit -a”)

So the top level project is definitely not in sync with the submodule in the repo itself.

Hope that’s helpful!


Now fixed!


Got it, everything’s building, thanks!


Very silly ameture question here. According to step 2.5 on the guide for installing the arm toolchain it says

#Copy the src release package into ~/mac-build/ directory
$ cp gcc-arm-none-eabi-4_8-2013q4-20131204-src.tar.bz2 ~/mac-build”

Where exactly is the mac build directory?


Um, it is at ~/mac-build

~ means your home directory - the terminal shell automatically substitutes the correct path for it. If ~/mac-build doesn’t exist, just create it:

mkdir ~/mac-build