#!/bin/sh # Cross-compile Bananarchy X11 UI components for armv7 (Cortex-A7 + NEON-VFPv4): # - sxmo-st (patched with HarfBuzz ligatures for Fira Code + XIM) # - sxmo-dmenu (patched with XIM + 240x320 vertical search bar + Fira Code) # - sxmo-dwm (configured for 240x320 + Fira Code + Pango statusbar + Nokia keypad) set -eu BASE_DIR="$(cd "$(dirname "$0")/.." && pwd)" ROOTFS_DIR="${ROOTFS_DIR:-$BASE_DIR/rootfs}" if [ -e "$ROOTFS_DIR" ]; then ROOTFS_DIR="$(realpath "$ROOTFS_DIR")" fi exec docker run --rm --network=host \ -e HOST_UID="$(id -u)" \ -e HOST_GID="$(id -g)" \ -v "$BASE_DIR:/bananarchy" \ -v "$ROOTFS_DIR:/target-rootfs" \ alpine:3.24 sh -eu -c ' cat > /etc/apk/repositories </dev/null echo "[2/5] Preparing armv7 sysroot (X11, Xft, HarfBuzz, Pango, FreeType, Fontconfig)..." SYSROOT="/tmp/armv7-sysroot" mkdir -p "$SYSROOT/etc/apk/keys" cp /etc/apk/repositories "$SYSROOT/etc/apk/repositories" cp /etc/apk/keys/* "$SYSROOT/etc/apk/keys/" apk --root "$SYSROOT" --initdb --arch armv7 add --no-scripts \ alpine-baselayout \ musl-dev \ linux-headers \ alsa-lib-dev \ libx11-dev \ libxft-dev \ libxinerama-dev \ libxext-dev \ libxrender-dev \ libxcb-dev \ xcb-util-dev \ fontconfig-dev \ freetype-dev \ harfbuzz-dev \ pango-dev \ glib-dev \ cairo-dev \ libjpeg-turbo-dev \ libpng-dev >/dev/null export PKG_CONFIG_SYSROOT_DIR="$SYSROOT" export PKG_CONFIG_LIBDIR="$SYSROOT/usr/lib/pkgconfig:$SYSROOT/usr/share/pkgconfig" CC="armv7-alpine-linux-musleabihf-gcc --sysroot=$SYSROOT" CXX="armv7-alpine-linux-musleabihf-g++ --sysroot=$SYSROOT" STRIP="armv7-alpine-linux-musleabihf-strip" OPT_CFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -fno-plt -fomit-frame-pointer" mkdir -p /bananarchy/prebuilt/sxmo-x11/usr/bin echo "[3/5] Compiling patched sxmo-st (with HarfBuzz Fira Code ligatures + XIM)..." cd /bananarchy/src/sxmo-st cp -f config.def.h config.h ST_INCS="$(pkgconf --cflags x11 xft fontconfig freetype2 harfbuzz)" ST_LIBS="$(pkgconf --libs x11 xft fontconfig freetype2 harfbuzz) -lm -lrt -lutil" $CC $OPT_CFLAGS -DVERSION=\"0.8.4.1-bananarchy\" -D_XOPEN_SOURCE=600 $ST_INCS \ st.c x.c hb.c $ST_LIBS -o /bananarchy/prebuilt/sxmo-x11/usr/bin/st $STRIP --strip-unneeded /bananarchy/prebuilt/sxmo-x11/usr/bin/st echo "[4/6] Compiling patched sxmo-dmenu plugin (dmenu.so with XIM + 240x320 vertical layout + Fira Code)..." mkdir -p /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins cd /bananarchy/src/sxmo-dmenu cp -f config.def.h config.h DMENU_INCS="$(pkgconf --cflags x11 xinerama xft fontconfig freetype2)" DMENU_LIBS="$(pkgconf --libs x11 xinerama xft fontconfig freetype2)" $CC $OPT_CFLAGS -fPIC -shared -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"5.0.14-bananarchy\" -DXINERAMA $DMENU_INCS \ dmenu.c drw.c util.c $DMENU_LIBS -o /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/dmenu.so $CC $OPT_CFLAGS -D_DEFAULT_SOURCE -DVERSION=\"5.0.14-bananarchy\" \ stest.c -o /bananarchy/prebuilt/sxmo-x11/usr/bin/stest cp -f dmenu_path dmenu_run /bananarchy/prebuilt/sxmo-x11/usr/bin/ chmod 755 /bananarchy/prebuilt/sxmo-x11/usr/bin/dmenu_path /bananarchy/prebuilt/sxmo-x11/usr/bin/dmenu_run $STRIP --strip-unneeded /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/dmenu.so /bananarchy/prebuilt/sxmo-x11/usr/bin/stest echo "[5/6] Compiling patched sxmo-dwm (240x320 + Fira Code + Pango statusbar + Plugin API)..." cd /bananarchy/src/sxmo-dwm cp -f config.def.h config.h DWM_INCS="$(pkgconf --cflags x11 xinerama xft fontconfig freetype2 pango pangoxft xcb xcb-res)" DWM_LIBS="$(pkgconf --libs x11 xinerama xft fontconfig freetype2 pango pangoxft xcb xcb-res) -lX11-xcb -lrt -ldl" $CC $OPT_CFLAGS -std=c99 -Wno-deprecated-declarations -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"6.3.1-bananarchy\" -DXINERAMA -DNOBONSAI $DWM_INCS \ dwm.c drw.c util.c $DWM_LIBS -o /bananarchy/prebuilt/sxmo-x11/usr/bin/dwm $STRIP --strip-unneeded /bananarchy/prebuilt/sxmo-x11/usr/bin/dwm echo "[6/6] Compiling DWM Plugins (xdrawer, dialer, calllog, callscreen, contacts, sms, files, camera, themes) and dwm-plugin runner..." mkdir -p /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins PLUG_INCS="$(pkgconf --cflags x11 xft fontconfig freetype2 pango pangoxft alsa libjpeg libpng)" PLUG_LIBS="$(pkgconf --libs x11 xft fontconfig freetype2 pango pangoxft alsa)" MEDIA_LIBS="$(pkgconf --libs libjpeg libpng)" $CXX $OPT_CFLAGS -fPIC -shared -std=c++17 -Wall -Wextra $PLUG_INCS \ /bananarchy/src/xdrawer/xdrawer.cpp $PLUG_LIBS \ -o /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/xdrawer.so $CXX $OPT_CFLAGS -fPIC -shared -std=c++17 -Wall -Wextra $PLUG_INCS \ /bananarchy/src/dwm-plugins/dialer_plugin.cpp $PLUG_LIBS \ -o /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/dialer.so $CXX $OPT_CFLAGS -fPIC -shared -std=c++17 -Wall -Wextra $PLUG_INCS \ /bananarchy/src/dwm-plugins/calllog_plugin.cpp $PLUG_LIBS \ -o /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/calllog.so $CXX $OPT_CFLAGS -fPIC -shared -std=c++17 -Wall -Wextra $PLUG_INCS \ /bananarchy/src/dwm-plugins/callscreen_plugin.cpp $PLUG_LIBS \ -o /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/callscreen.so $CXX $OPT_CFLAGS -fPIC -shared -std=c++17 -Wall -Wextra $PLUG_INCS \ /bananarchy/src/dwm-plugins/contacts_plugin.cpp $PLUG_LIBS \ -o /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/contacts.so $CXX $OPT_CFLAGS -fPIC -shared -std=c++17 -Wall -Wextra $PLUG_INCS \ /bananarchy/src/dwm-plugins/sms_plugin.cpp $PLUG_LIBS \ -o /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/sms.so $CXX $OPT_CFLAGS -fPIC -shared -std=c++17 -Wall -Wextra $PLUG_INCS \ /bananarchy/src/dwm-plugins/files_plugin.cpp $PLUG_LIBS $MEDIA_LIBS \ -o /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/files.so $CXX $OPT_CFLAGS -fPIC -shared -std=c++17 -Wall -Wextra $PLUG_INCS \ /bananarchy/src/dwm-plugins/camera_plugin.cpp $PLUG_LIBS $MEDIA_LIBS -lpthread \ -o /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/camera.so $CXX $OPT_CFLAGS -fPIC -shared -std=c++17 -Wall -Wextra $PLUG_INCS \ /bananarchy/src/dwm-plugins/themes_plugin.cpp $PLUG_LIBS \ -o /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/themes.so $STRIP --strip-unneeded \ /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/xdrawer.so \ /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/dialer.so \ /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/calllog.so \ /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/callscreen.so \ /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/contacts.so \ /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/sms.so \ /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/files.so \ /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/camera.so \ /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/themes.so $CC $OPT_CFLAGS -std=c99 -D_DEFAULT_SOURCE -Wall -Wextra \ /bananarchy/src/dwm-plugins/dwm_plugin_runner.c -ldl \ -o /bananarchy/prebuilt/sxmo-x11/usr/bin/dwm-plugin $STRIP --strip-unneeded /bananarchy/prebuilt/sxmo-x11/usr/bin/dwm-plugin ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/dmenu ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/xdmenu ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/xdrawer ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/XDrawer ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/xdialer ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/xcalllog ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/xcallscreen ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/xcontacts ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/xsms ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/xfiles ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/xcamera ln -sf dwm-plugin /bananarchy/prebuilt/sxmo-x11/usr/bin/xthemes mkdir -p /bananarchy/overlay/rootfs/usr/bin /bananarchy/overlay/rootfs/usr/lib/dwm/plugins cp -a /bananarchy/prebuilt/sxmo-x11/usr/bin/. /bananarchy/overlay/rootfs/usr/bin/ cp -a /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/. /bananarchy/overlay/rootfs/usr/lib/dwm/plugins/ if [ -d /target-rootfs/usr/bin ]; then mkdir -p /target-rootfs/usr/lib/dwm/plugins cp -a /bananarchy/prebuilt/sxmo-x11/usr/bin/. /target-rootfs/usr/bin/ cp -a /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/. /target-rootfs/usr/lib/dwm/plugins/ fi chown -R "$HOST_UID:$HOST_GID" \ /bananarchy/prebuilt/sxmo-x11 \ /bananarchy/overlay/rootfs/usr/bin \ /bananarchy/overlay/rootfs/usr/lib \ /bananarchy/src/sxmo-st \ /bananarchy/src/sxmo-dmenu \ /bananarchy/src/sxmo-dwm \ /bananarchy/src/xdrawer \ /bananarchy/src/dwm-plugins ls -lh /bananarchy/prebuilt/sxmo-x11/usr/bin/st \ /bananarchy/prebuilt/sxmo-x11/usr/bin/dmenu \ /bananarchy/prebuilt/sxmo-x11/usr/bin/dwm \ /bananarchy/prebuilt/sxmo-x11/usr/bin/dwm-plugin \ /bananarchy/prebuilt/sxmo-x11/usr/lib/dwm/plugins/*.so '