Skip to content
probonopd edited this page Apr 19, 2022 · 24 revisions

This page contains information relevant for developers.

Building locally

Normal users do not need to build the source code, as compiled versions are provided for download. If you are a developer and want to build the source code yourself, you can use the following example, e.g., to build for Raspberry Pi 4 on a Ubuntu 20.04 build system. See build.yml for complete build steps that create versions for Raspberry Pi 1, 2, 3,and 4 in 32-bit and 64-bit as required.

# Choose your RPi
export RPI=4

git clone https://github.com/probonopd/MiniDexed
cd MiniDexed
mkdir -p kernels sdcard

# Recursively pull git submodules
git submodule update --init --recursive

# Install toolchain
if [ "${RPI}" -gt 2 ]
then
	wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
else
	wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi.tar.xz
fi
tar xvf gcc-arm-*-*.tar.xz 
export PATH=$(readlink -f ./gcc-*/bin/):$PATH

# Build dependencies and MiniDexed
./build.sh
cp ./src/kernel*.img ./kernels/

# Get Raspberry Pi boot files
cd ./circle-stdlib/libs/circle/boot
make
if [ "${RPI}" -gt 2 ]
then
	make armstub64
fi
cd -

# Make zip that contains Raspberry Pi 4 boot files. The contents can be copied to a FAT32 formatted partition on a microSD card
cd sdcard
../getsysex.sh
cd ..
cp -r ./circle-stdlib/libs/circle/boot/* sdcard
rm -rf sdcard/config*.txt sdcard/README sdcard/Makefile sdcard/armstub sdcard/COPYING.linux
cp ./src/config.txt ./src/minidexed.ini ./src/*img ./src/performance.ini sdcard/
echo "usbspeed=full" > sdcard/cmdline.txt
cd sdcard
cp ../kernels/* . || true
zip -r ../MiniDexed_$GITHUB_RUN_NUMBER_$(date +%Y-%m-%d).zip *
cd -

# Optionally, create a RPi image. This can be written to a microSD card using tools like Etcher or dd
sudo apt install --yes  mount parted
IMG="`date +%Y-%m-%d`_minidexed-RPi${RPI}.img"
dd of="${IMG}" seek=50MiB bs=1 count=0
sudo parted "${IMG}" mktable msdos
sudo parted "${IMG}" mkpart primary fat32 2048s 100%
DEV=`sudo losetup --find --partscan --show "${IMG}"`
sudo mkfs.vfat -F 32 -n BOOT "${DEV}p1"
mkdir boot
sudo mount "${DEV}p1" boot
sudo cp -R sdcard/* boot
sudo umount boot
sudo losetup -d "${DEV}"
rm -r boot

# Write to SD card
sudo dd if="${IMG}" of=/dev/mmcblk0 bs=512k status=progress && sync

Naming conventions

MiniDexed is based on Circle, a C++ bare metal environment for Raspberry Pi with USB (32 and 64 bit). The following naming conventions are used:

  • Identifiers for types and variables will be written this way: "MyExampleIdentifier" (each word starts with an uppercase letter).
  • Class names start with a "C", other types (struct, enum) with a "T".
  • Member variable names of a class start with a "m_", static variables in a class definition with a "s_".
  • Variable names get a prefix, which specify its (simple) standard type. This prefix follows the "m_" or "s_", if it is used. Variables of complex types do not have such prefix (except a "p" for pointer). Only one of these prefixes is used (i.e. "puch" for a pointer to an unsigned char is not used, use only "p" instead):
uch	unsigned char, u8, uint8_t
us	unsigned short u16, uint16_t
ul	unsigned long
ch	signed char, s8, int8_t
s	signed short, s16, int16_t
l	signed long
n	unsigned, int, u32, s32, uint32_t, int32_t, or any other (non-float) numeric variable
f	float, double
b	bool, boolean
p	Pointer to a simple or complex type

Updating Synth_Dexed git submodule

From time to time, developers need to update a git submodule, such as Synth_Dexed. If the submodule should be updated on an incoming pull request, then one actually needs to do the change in the respository and on the branch from which the pull request originates (example: a pull request came from https://github.com/rsta2/MiniDexed/, branch enable-filter and we want to update the Synth_Dexed git submodule to c58ac7c):

git clone https://github.com/rsta2/MiniDexed/
cd MiniDexed
git checkout enable-filter
git submodule update --init --recursive
cd Synth_Dexed
git fetch
git checkout c58ac7c
cd ..
git add Synth_Dexed
git commit -m "Submodule updated"
git push origin enable-filter
Clone this wiki locally