Compiling Mutable Instruments Peaks on osx Sonoma

Very rough notes on modifying peaks using a 2025 era apple os.


brew tap ArmMbed/homebrew-formulae
brew install cmake dfu-util arm-none-eabi-gcc
brew install arm-none-eabi-gcc
brew tap osx-cross/arm
brew install arm-gcc-bin

# Get the firmware:

git clone --recurse-submodules https://github.com/pichenettes/eurorack.git mutable_instruments_eurorack
cd mutable_instruments_eurorack/peaks
cd ..
git submodule update --init --recursive

cd peaks
ln -s ../stmlib stmlib

cd ..

git clone https://github.com/timchurches/Mutated-Mutables/

git submodule update --init --recursive

cd peaks
ln -s ../stmlib stmlib
# i think this may have failed so I copied it from the original repo
rsync -a ../mutable_instruments_eurorack/stmlib .
rsync -a ../stmlib .


# update the makefile
# you must edit the make file to point to the toolchain in /opt

TOOLCHAIN_PATH ?= /opt/homebrew/

edit the peaks/makefile

F_CRYSTAL      = 8000000L
F_CPU          = 72000000L
SYSCLOCK       = SYSCLK_FREQ_72MHz
FAMILY         = f10x
DENSITY        = md
MEMORY_MODE    = flash
# USB            = enabled

APPLICATION    = TRUE
BOOTLOADER     = peaks_bootloader

# Preferred upload command
UPLOAD_COMMAND  = upload_combo_jtag

# Packages to build
TARGET         = peaks
PACKAGES       = peaks \
		peaks/drivers \
		peaks/drums \
		peaks/modulations \
		peaks/number_station \
		peaks/pulse_processor \
		stmlib/utils \
		stmlib/system
RESOURCES      = peaks/resources

TOOLCHAIN_PATH ?= /opt/homebrew/

EXTRA_INCLUDES = -I/opt/homebrew/Cellar/arm-gcc-bin@10/10.3-2021.10_1/arm-none-eabi/include \
                -I/opt/homebrew/Cellar/arm-gcc-bin@10/10.3-2021.10_1/lib/arm-none-eabi/include \
                -I/opt/homebrew/Cellar/arm-gcc-bin@10/10.3-2021.10_1/arm-none-eabi/include/c++/10.3.1 \
                -I/opt/homebrew/Cellar/arm-gcc-bin@10/10.3-2021.10_1/arm-none-eabi/include/c++/10.3.1/arm-none-eabi

# Add these library paths                                                                                                                                                                                             
EXTRA_LIBS = -L/opt/homebrew/Cellar/arm-gcc-bin@10/10.3-2021.10_1/arm-none-eabi/lib \
             -L/opt/homebrew/Cellar/arm-gcc-bin@10/10.3-2021.10_1/lib/gcc/arm-none-eabi/10.3.1

# Add the path where crt0.o resides                                                                                                                                                                                   
EXTRA_LDFLAGS = -L/opt/homebrew/Cellar/arm-gcc-bin@10/10.3-2021.10_1/arm-none-eabi/lib/thumb/v7-m/nofp

include stmlib/makefile.inc

# Rule for building the firmware update file
wav:  $(TARGET_BIN)
	python stm_audio_bootloader/fsk/encoder.py \
		-s 48000 -b 16 -n 8 -z 4 -p 256 \
		$(TARGET_BIN)

and the stmlib/makefile.inc

# add the line 
# $(EXTRA_INCLUDES) \
#
INCFLAGS = \
            		-I. \
                        $(EXTRA_INCLUDES) \
                        -D$(ARCH_DEFINE) \
                        -D$(MODEL_DEFINE) \
			$(APPLICATION_DEFINE) \
                        $(PROJECT_CONFIGURATION) \
                        -DF_CPU=$(F_CPU) \
                        -DF_CRYSTAL=$(F_CRYSTAL) \
                        -DHSE_VALUE=$(F_CRYSTAL) \
                        -DUSE_STDPERIPH_DRIVER \
			-D$(SYSCLOCK)=$(F_CPU)

and

LDFLAGS = \
    -Wl,-Map=$(BUILD_DIR)$(TARGET).map \
    -Wl,--gc-sections \
    -T $(LINKER_SCRIPT) \
    $(ARCHFLAGS) \
    $(INCFLAGS) \
    $(EXTRA_LDFLAGS) \
    $(EXTRA_LIBS) \
    -L$(STM32_PATH)

LDFLAGS += --specs=nosys.specs --specs=nano.specs

Leave a comment

Your email address will not be published. Required fields are marked *