#!/usr/bin/env bash set -e CROSS=arm-linux-gnueabihf CFLAGS_CROSS="-O2 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard" CFLAGS_CROSS="-O2 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard" # Debian armhf packages use these paths ARM_INCLUDE="-I/usr/include/arm-linux-gnueabihf -I/usr/include" ARM_LIBDIR="/usr/lib/arm-linux-gnueabihf" SYSROOT=/home/user/Public/Projects/OpenWRT/flint1-armv7/src/mosh-sysroot BUILDDIR=/tmp/mosh-arm-build SRCDIR=/home/user/Public/Projects/OpenWRT/flint1-armv7/src/mosh BINDIR=/home/user/Public/Projects/OpenWRT/flint1-armv7/binaries mkdir -p "$SYSROOT" "$BUILDDIR" "$BINDIR" echo "=== [1/3] Building protobuf host tools + ARM library ===" PROTO_VER=3.21.12 cd "$BUILDDIR" rm -rf protobuf-"${PROTO_VER}" tar -xzf /tmp/protobuf-"${PROTO_VER}".tar.gz cd protobuf-"${PROTO_VER}" # Build host protoc ./configure --prefix=/tmp/host-protoc make -j$(nproc) make install HOST_PROTOC=/tmp/host-protoc/bin/protoc echo " host protoc: $($HOST_PROTOC --version)" # Cross-compile protobuf library make distclean ./configure \ --host=${CROSS} \ --prefix="$SYSROOT" \ --with-protoc="$HOST_PROTOC" \ CC=${CROSS}-gcc \ CXX=${CROSS}-g++ \ CFLAGS="-static ${CFLAGS_CROSS}" \ CXXFLAGS="-static ${CFLAGS_CROSS} -std=c++14" \ LDFLAGS="-static" make -j$(nproc) make install echo " protobuf ARM OK: $SYSROOT/lib/libprotobuf.a" echo "=== [2/3] Configuring mosh ===" cd "$SRCDIR" [ -f configure ] || ./autogen.sh ./configure \ --host=${CROSS} \ --prefix="$SYSROOT" \ CC=${CROSS}-gcc \ CXX=${CROSS}-g++ \ CFLAGS="-static ${CFLAGS_CROSS}" \ CXXFLAGS="-static ${CFLAGS_CROSS}" \ LDFLAGS="-static -L${SYSROOT}/lib -L${ARM_LIBDIR}" \ LIBS="-lz -lzstd -ldl" \ CPPFLAGS="-I${SYSROOT}/include ${ARM_INCLUDE}" \ PKG_CONFIG="pkg-config" \ PKG_CONFIG_PATH="${SYSROOT}/lib/pkgconfig:${ARM_LIBDIR}/pkgconfig" \ PKG_CONFIG_LIBDIR="${SYSROOT}/lib/pkgconfig:${ARM_LIBDIR}/pkgconfig" echo "=== [3/3] Compiling mosh ===" make -j$(nproc) cp src/frontend/mosh-server "$BINDIR/mosh-server-static-armv7" 2>/dev/null || \ cp src/frontend/mosh-server "$BINDIR/mosh-server-static-armv7" cp src/frontend/mosh-client "$BINDIR/mosh-client-static-armv7" 2>/dev/null || \ cp src/frontend/mosh-client "$BINDIR/mosh-client-static-armv7" echo "" echo "=== Build Complete ===" file "$BINDIR/mosh-server-static-armv7" file "$BINDIR/mosh-client-static-armv7" ls -lh "$BINDIR/"