Code Sourcery G++ Lite
From ITRS
Sourcery CodeBench Lite Edition
Unless you:
- Already got a GCC toolchain as part of an SDK
- Are hacking on GCC yourself
- Work for a microprocessor design company
- You need an ARMv7 toolchain that uses the armv7hf hard floating point ABI (try Linaro)
you probably want to use CodeSourcery G++ Light to start embedded Linux or Non-OS development. CodeSourcery does a lot of upstream gcc, binutils, eglibc, gdb, qemu work and they test their toolchains.
Read Chapter 3 of {arm,ia32,mips}-2012.03/share/doc/*/pdf/getting-started.pdf for the command line options to choose the correct:
- architecture (arm: -mcpu cortex-a9, x86_64: -m64)
- endianess (mipsel: -EL)
- floating point ABI (mips: -msoft-float, arm VFPv3 with NEON: -mfloat-abi=softfp -mfpu=neon) and
- C library (mips: -muclibc)
Use "gcc -print-multi-directory" to print the directory name of the "multilib" variant you want and copy it to your embedded device.
Here's a table of the configurations supported:
arm-2012.03 ARMv5TE - Little-Endian, Soft-Float, GLIBC Command-line option(s): default (-march=armv5te) Sysroot subdirectory: ./ Dynamic linker: lib/ld-linux.so.3 ARMv4T - Little-Endian, Soft-Float, GLIBC Command-line option(s): -march=armv4t Sysroot subdirectory: armv4t/ Dynamic linker: lib/ld-linux.so.3 Notes: This should also be used for ARMv5T cores such as the ARM1020T. ARMv7-A Thumb-2 - Little-Endian, Soft-Float, GLIBC Command-line option(s): -mthumb -march=armv7-a Sysroot subdirectory: thumb2/ Dynamic linker: lib/ld-linux.so.3 NOTE: while the compiler supports the "hard float" ABI (-mfloat-abi=hard) no compatible runtime libraries are provided in the Lite version. Get the Linaro toolchain linked to below if you want hard float ABI support. mips-2012.03 MIPS32 revision 2 - Big-Endian, O32 Command-line option(s): default Sysroot subdirectory: ./ Dynamic linker: lib/ld.so.1 MIPS32 revision 2 - Big-Endian, N64 Command-line option(s): -mabi=64 Sysroot subdirectory: ./ Dynamic linker: lib64/ld.so.1 MIPS32 revision 2 - Little-Endian, O32 Command-line option(s): -EL Sysroot subdirectory: el/ Dynamic linker: lib/ld.so.1 MIPS32 revision 2 - Little-Endian, N64 Command-line option(s): -EL -mabi=64 Sysroot subdirectory: el/ Dynamic linker: lib64/ld.so.1 MIPS32 revision 2 - Big-Endian, Soft-Float, O32 Command-line option(s): -msoft-float Sysroot subdirectory: soft-float/ Dynamic linker: lib/ld.so.1 MIPS32 revision 2 - Big-Endian, Soft-Float, N64 Command-line option(s): -msoft-float -mabi=64 Sysroot subdirectory: soft-float/ Dynamic linker: lib64/ld.so.1 MIPS32 revision 2 - Little-Endian, Soft-Float, O32 Command-line option(s): -EL -msoft-float Sysroot subdirectory: soft-float/el/ Dynamic linker: lib/ld.so.1 < ... microMIPs: -mmicroimps, MIPS16: -mips16 ...> MIPS32 revision 2 - uClibc, Big-Endian, O32 Command-line option(s): -muclibc Sysroot subdirectory: uclibc/ Dynamic linker: lib/ld-uClibc.so.0 MIPS32 revision 2 - uClibc, Little-Endian, O32 Command-line option(s): -muclibc -EL Sysroot subdirectory: uclibc/el/ Dynamic linker: lib/ld-uClibc.so.0 MIPS32 revision 2 - uClibc, Big-Endian, Soft-Float, O32 Command-line option(s): -muclibc -msoft-float Sysroot subdirectory: uclibc/soft-float/ Dynamic linker: lib/ld-uClibc.so.0 MIPS32 revision 2 - uClibc, Little-Endian, Soft-Float, O32 Command-line option(s): -muclibc -EL -msoft-float Sysroot subdirectory: uclibc/soft-float/el/ Dynamic linker: lib/ld-uClibc.so.0 ia32-2012.03 Intel Pentium 4 - GLIBC, 32-bit Command-line option(s): default Sysroot subdirectory: ./ Dynamic linker: lib/ld-linux.so.2 Intel Xeon (Nocona) - GLIBC, 64-bit Command-line option(s): -m64 Sysroot subdirectory: ./ Dynamic linker: lib64/ld-linux-x86-64.so.2 Intel Atom - GLIBC, 32-bit Command-line option(s): -march=atom Sysroot subdirectory: atom/ Dynamic linker: lib/ld-linux.so.2 Intel Core 2 - GLIBC, 64-bit Command-line option(s): -march=core2 -m64 Sysroot subdirectory: core2/ Dynamic linker: lib64/ld-linux-x86-64.so.2
Remote Debugging
- (gdb) set sysroot SYSROOT-SUBDIRECTORY
- This helps GDB find the debuginfo and allows you to strip the copy on your target device.
See Also
- Cross Compiling
- Cross Compiling for Windows and Mac on a Linux Host
- System Programming
- Linaro Toolchain Binaries -- armv7hf toolschain that can target the ARM versions of Ubuntu, Fedora etc.