Files
openwrt/flint1-armv7/build/build-mosh-static.sh
2026-03-22 00:54:57 -07:00

77 lines
2.3 KiB
Bash
Executable File

#!/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/"