four things will affect general binary compatibility: CPU architecture (microprocessor ISAs, co-processors, byte order, ABIs, ...) initial options: cortexa8 (any SoC with an ARM Cortex-A8 core) ISAs: ARMv7-A, Thumb, Thumb-2, NEON SIMD byte order: little-endian ABI: GNU EABI floating-point ABI: hardware CFLAGS: -O3 -fsingle-precision-constant GCC configure options: --with-arch=armv7-a \ --with-cpu=cortex-a8 --with-tune=cortex-a8 \ --with-mode=thumb --with-fpu=neon --with-float=hard planned future options: i486 (any CPU with Intel 80486 microarchitecture) i586 (any CPU with Intel P5 microarchitecture) i686 (any CPU with Intel P6 or any successive microarchitecture) amd64 (any CPU with AMD64 or Intel 64 architecture) other ARM cores mips* powerpc* kernel initial options: linux different hardware targets will be built with different configs planned future options: kfreebsd knetbsd system libraries initial options: eglibc portable C/C++ library: works with almost any kernel optimized for speed rather than for space (big and fast) planned future options: uclibc different configurations of uClibc can be ABI-incompatible only works with Linux optimized for space rather than for speed (small and slow) example architecture string: cortexa8-linux-eglibc GCC package build system: include architecture mk file, which set architecture-specific configure opts opkhelper build flags system: read CFLAGS et al from e.g.