This is where all the magic of the user interface of MustardOS (muOS) comes to life.
You will need make, ccache, and a C compiler. Everything else depends on which target you are building for.
Cross-compiling for ARM devices (normal workflow)
A pre-built aarch64 toolchain is expected at ~/x-tools/aarch64-buildroot-linux-gnu/. Other toolchain roots can be pointed to by setting the XTOOL
environment variable. The toolchain must include gcc, g++, ar, ld, and strip for the target host tuple.
Native builds for x86 / x86-64
A system gcc and the following development packages are required:
| Package | Purpose |
|---|---|
SDL2 |
Display and input |
SDL2_mixer |
Audio |
SDL2_ttf |
Font rendering |
SDL2_image |
Image loading |
libcurl |
Network requests |
libpng |
PNG support |
On Fedora/RHEL: sudo dnf install SDL2-devel SDL2_mixer-devel SDL2_ttf-devel SDL2_image-devel libcurl-devel libpng-devel
On Debian/Ubuntu: sudo apt install libsdl2-dev libsdl2-mixer-dev libsdl2-ttf-dev libsdl2-image-dev libcurl4-openssl-dev libpng-dev
All cross-compile builds go through xtool.sh, which sets up the toolchain environment and then calls make.
# Standard release build (aarch64 Cortex-A53, the most common target)
BUILD=release ./xtool.sh make -j$(nproc)
# Verbose build (shows each compiler command and all error output)
DEBUG=1 BUILD=release ./xtool.sh make -j$(nproc)DEVICE targets
DEVICE |
Use for |
|---|---|
ARM64_A53 |
H700, A133P — default if unset |
ARM64_A53_CRYPTO |
A53 with hardware AES/CRC |
ARM64 |
Generic ARMv8-A |
ARM32 |
Original 35x (ARMv7 hard-float) |
ARM32_A9 |
Cortex-A9 with NEON |
# Example: build for generic ARM64
DEVICE=ARM64 BUILD=release ./xtool.sh make -j$(nproc)BUILD accepts release (production image) or test (development image with test flags). It defaults to test if unset.
Use DEVICE=NATIVE to build and run directly on the host machine. This is useful for quick iteration and debugging without hardware.
DEVICE=NATIVE BUILD=release ./xtool.sh make -j$(nproc)Binaries and shared libraries land in bin/ just like a cross-compiled build.
common: Common Libraries and Functionslookup: Friendly name lookup table mainly for arcade contentlvgl: LVGL Embedded Graphics Librarymodule: Frontend menu system modulesstage: Hardware overlay staging system
mubattery: Background battery monitor daemonmucredits: Supporter Creditsmufbset: Customised framebuffer resolution switchermuhotkey: Global Hotkey Systemmulog: System log viewermulookup: Content Name Lookupmuremap: Background input remap daemonmurgb: RGB LED and MCU controller daemonmusplash: Standalone PNG splash screenmuwarn: First Install Disclaimer Messagemuxcharge: Charging Information Screenmuxfrontend: Main Frontend Specific Runnermuxmessage: Information and Progress Screen
muxactivity: Activity Tracker Informationmuxapp: Application Listmuxappcon: Application Control Managermuxarchive: Archive Managermuxassign: Assignable System/Core for Contentmuxbackup: Device Backup Menumuxbtall: Bluetooth Device Listmuxbtcon: Bluetooth Connection Managermuxbtdev: Bluetooth Device Informationmuxchrony: System Clock Informationmuxcoladjust: Content Colour Adjustment Menumuxcolfilter: Content Colour Filter Menumuxcollect: Content Collection Managermuxconfig: Configuration Menumuxconnect: Connectivity Menumuxcontrol: Content Control Scheme Selectormuxcustom: Customisation Menumuxdanger: Dangerous Settingsmuxdevice: Device Settingsmuxdownload: Archive Downloadermuxfont: Font Settingsmuxgov: System Governor Selectormuxhdmi: HDMI Configurationmuxhistory: Content History Menumuxinfo: Information Menumuxinstall: First Time Install Menumuxkiosk: Kiosk Mode Managementmuxlanguage: Language Selectormuxlaunch: Main Menumuxnetadv: Advanced Network Settingsmuxnetinfo: Network Informationmuxnetprofile: Network Profile Managermuxnetscan: Network SSID Scannermuxnetwork: Network Configurationmuxnews: Community Newsmuxoption: Content Explorer Optionsmuxoverlay: Content Overlay Settingsmuxpass: Passcode Screenmuxpasscfg: Passcode Configurationmuxpicker: Customisation Package Selectormuxplore: Content Explorermuxpower: Power Settingsmuxraopt: RetroArch Optionsmuxremap: Button Remappingmuxrgb: RGB LED Settingsmuxrtc: Date and Timemuxsearch: Content Searchmuxshader: Shader Settingsmuxshare: Shared Frontend Module Statemuxshot: Screenshot Viewermuxsort: Sorting Settingsmuxspace: Disk Usage Informationmuxsplash: Simple PNG Based Splash Screenmuxstorage: Storage Migrate/Sync Informationmuxsysinfo: System Informationmuxtag: Content Tag Managermuxtask: Task Toolkitmuxtester: Input Testermuxtext: Basic Text File Viewermuxtheme: Theme Pickermuxthemedown: Custom Theme Downloadmuxthemefilter: Custom Theme Filtermuxthemeopt: Theme Optionsmuxtimezone: Timezone Selectormuxtweakadv: Advanced Settingsmuxtweakgen: General Settingsmuxvisual: Interface Optionsmuxwebserv: Web Services
The following third party libraries are bundled in this repository.
Embedded graphics library used as the core UI toolkit for all menus and widgets. Includes the TinyTTF font renderer which in turn embeds stb_truetype for glyph rasterisation.
- Version: 8.4.0
- License: MIT
- Location:
lvgl/
Single-file C library for parsing JSON. Used throughout the codebase to read language translation files, configuration data, and API responses.
- Author: Josh Baker
- License: MIT
- Location:
common/json/
Minimal C INI file parser. Used for reading and writing .ini configuration files.
- Author: univrsal
- License: BSD 2-Clause
- Location:
common/mini/
Single-file C library for deflate/inflate, zlib-compatible compression, and ZIP archive reading and writing. Used to extract downloaded ZIP archives.
- Version: 11.3.0
- License: MIT (portions also released as public domain / Unlicense)
- Location:
common/miniz/
Extremely fast non-cryptographic hash algorithm. Used to compute file checksums for content verification.
- Version: 0.8.3
- Author: Yann Collet
- License: BSD 2-Clause
- Location:
common/xxhash/
Single-header C library for writing PNG, BMP, TGA, JPEG, and HDR image files. Used to capture and save screenshots from the framebuffer.
- Version: 1.16
- Author: Sean Barrett
- License: Public domain
- Location:
common/png/stb_image_write.h