# GL-AX1800 (Flint1) SDK Research and Cross-Compilation Strategy **Date:** 2026-01-11 **Device:** GL-AX1800 (Flint 1) **SoC:** Qualcomm IPQ6000 (Quad-core ARM @ 1.2GHz) ## Architecture Confirmation (CORRECTED) > [!IMPORTANT] > **Confirmed from actual hardware:** > - **Flint1 (GL-AX1800)**: ARMv7 rev 4 (v7l) - **32-bit ARM** > - **Flint2 (GL-MT6000)**: ARMv8 rev 4 (v8l) - **64-bit ARM (aarch64)** > > These are **different architectures** and require **separate binaries**. ### Architecture Details **GL-AX1800 (Flint1):** - CPU: ARMv7 Processor rev 4 (v7l) - Instruction set: 32-bit ARM - Typical target triplet: `arm-linux-musleabihf` or `armv7l-linux-musleabihf` **GL-MT6000 (Flint2):** - CPU: ARMv8 Processor rev 4 (v8l) - Instruction set: 64-bit ARM (aarch64) - Typical target triplet: `aarch64-linux-musl` --- ## SDK Options for GL-AX1800 (ARMv7) ### Option 1: Pre-built musl.cc Toolchain (RECOMMENDED for Quick Start) **Source:** https://musl.cc/ #### Relevant Toolchains - `armv7l-linux-musleabihf-cross.tgz` (ARMv7, hard-float) - `arm-linux-musleabihf-cross.tgz` (Generic ARM, hard-float) **Download:** ```bash wget https://musl.cc/armv7l-linux-musleabihf-cross.tgz tar -xzf armv7l-linux-musleabihf-cross.tgz export PATH=$PWD/armv7l-linux-musleabihf-cross/bin:$PATH ``` #### Advantages - Quick setup (download and extract) - Modern GCC (13.2+) with C++23 support - Proven for static binary compilation - Small download (~40-50MB compressed) #### Disadvantages - Not optimized for IPQ6000 specifically - Generic ARMv7 (not Cortex-A7 specific) --- ### Option 2: musl-cross-make (Build Your Own) **Source:** https://github.com/richfelker/musl-cross-make #### Configuration for ARMv7 ```makefile TARGET = armv7l-linux-musleabihf # or: arm-linux-musleabihf GCC_VER = 14.2.0 MUSL_VER = 1.2.5 LINUX_VER = 6.6.y GCC_CONFIG += --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard ``` #### Advantages - Full control over toolchain versions - Can build latest GCC 14+ for C++23 - Optimize for Cortex-A7 specifically - Creates musl-based static-friendly toolchain #### Disadvantages - Time-consuming build (30-60 minutes) - Requires build dependencies - More complex setup --- ### Option 3: GL.iNet SDK (NOT RECOMMENDED) **SDK:** `ipq807x-2102` **GCC:** 5.5.0 (Too old) **Architecture:** arm_cortex-a7 (32-bit) #### Why Not Use This? - ❌ GCC 5.5.0 cannot compile C++23 (btop) - ❌ Outdated toolchain from ~2017 - ❌ Build failures documented in `agent-notes/glax1800-build-results.md` - ✅ Correct architecture (ARMv7), but toolchain too old --- ## Compilation Requirements ### btop Requirements **Language:** C++23 **Minimum GCC:** 11 (experimental), **14+ recommended** (full support) **Dependencies:** None (headers only) **Build System:** Make or CMake **Static Linking:** Fully supported with musl #### Build Strategy ```bash # With OpenWrt SDK make STATIC=true VERBOSE=true CXX=aarch64-openwrt-linux-musl-g++ \ CXXFLAGS="-static -std=c++23 -O3" LDFLAGS="-static" ``` --- ### mosh Requirements **Language:** C++14 **Build System:** Autotools (./configure) **Dependencies (must be cross-compiled):** - **protobuf** 3.x (C++ library, requires host protoc) - **ncurses** 6.x (terminfo) - **OpenSSL** 1.1.x (or omit with `--without-crypto`) - **zlib** (compression) #### Build Strategy (Multi-Stage) 1. **Build host protoc** (x86_64) ```bash cd protobuf-3.17.3 ./configure --prefix=/usr/local make && sudo make install ``` 2. **Cross-compile protobuf libraries** ```bash ./configure --host=aarch64-linux-musl --prefix=$PWD/sysroot \ --with-protoc=/usr/local/bin/protoc \ CXXFLAGS="-static" LDFLAGS="-static" make && make install ``` 3. **Cross-compile ncurses** ```bash ./configure --host=aarch64-linux-musl --prefix=$PWD/sysroot \ --without-shared --with-normal --without-debug make && make install ``` 4. **Build mosh** (static) ```bash ./configure --host=aarch64-linux-musl \ PKG_CONFIG_PATH=$PWD/sysroot/lib/pkgconfig \ CXXFLAGS="-static" LDFLAGS="-static -pthread" \ --without-crypto # Optional: skip OpenSSL make ``` #### Existing Build Environment The `src/mosh/` directory already has: - `env.sh` - Cross-compilation environment - `sysroot/` - Custom libraries - `host_protoc/` - Host protobuf compiler - Built static binaries (for aarch64) ✅ **This can likely be reused or adapted!** --- ## Recommended Approach (CORRECTED) ### Phase 1: Toolchain Setup **Use musl.cc pre-built ARMv7 toolchain for fastest results:** ```bash cd /home/user/Public/Projects/OpenWRT/sdk/ # Download ARMv7 hard-float toolchain wget https://musl.cc/armv7l-linux-musleabihf-cross.tgz tar -xzf armv7l-linux-musleabihf-cross.tgz # Add to PATH export PATH=$PWD/armv7l-linux-musleabihf-cross/bin:$PATH # Verify armv7l-linux-musleabihf-gcc --version ``` --- ### Phase 2: Build btop for ARMv7 ```bash cd /home/user/Public/Projects/OpenWRT/src/btop # Clean previous builds make clean # Build static for ARMv7 make STATIC=true \ CXX=armv7l-linux-musleabihf-g++ \ CXXFLAGS="-static -std=c++23 -O3 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard" \ LDFLAGS="-static" # Verify architecture file bin/btop # Should show: ELF 32-bit LSB executable, ARM, EABI5 # Copy to flint1 binaries cp bin/btop /home/user/Public/Projects/OpenWRT/binaries/flint1/btop/ ``` --- ### Phase 3: Build mosh for ARMv7 Mosh requires cross-compiling dependencies. Two options: #### Option A: Adapt Existing Environment The `src/mosh/` directory has a working setup for aarch64. Update it for ARMv7: ```bash cd /home/user/Public/Projects/OpenWRT/src/mosh # Update environment export PATH=/path/to/armv7l-linux-musleabihf-cross/bin:$PATH export CC=armv7l-linux-musleabihf-gcc export CXX=armv7l-linux-musleabihf-g++ export AR=armv7l-linux-musleabihf-ar export RANLIB=armv7l-linux-musleabihf-ranlib # Rebuild protobuf for ARMv7 # (Host protoc already built) # Configure mosh ./configure --host=armv7l-linux-musleabihf \ CXXFLAGS="-static" \ LDFLAGS="-static -pthread" \ --without-crypto make clean && make ``` #### Option B: Fresh Build Follow multi-stage process from research document (protobuf → ncurses → mosh). --- ## Next Steps 1. ✅ **Verify architecture** - Confirmed ARMv7 (32-bit ARM) vs ARMv8 (aarch64) 2. ⏭️ **Download ARMv7 toolchain** - Use musl.cc armv7l-linux-musleabihf 3. ⏭️ **Build btop** - Static ARMv7 binary with modern GCC 4. ⏭️ **Build mosh** - Cross-compile dependencies + static linking 5. ⏭️ **Create .ipk packages** - Package for opkg installation 6. ⏭️ **Test on hardware** - Verify on actual GL-AX1800