Gentoo: crossdev avr
- 1 Cross compile ?
- 2 Why sys-devel/crossdev ?
- 3 Installation of AVR target
Cross compile ?
Cross compile is name of build process which produce machine code for different architecture. For example I am also embed device developer and I produce machine code for AVR platform on x86_64 workstation. Effectively I am doing cross compile on x86_64 to AVR target. I am writing source code in C language and partly in assembler.
Why sys-devel/crossdev ?
Because it is Gentoo specific tool to manage necessary software to perform cross compile (e.g. binutils, headers, libraries, and compiler). It is very simple to use and it save time.
Installation of AVR target
I recommend latest version of sys-devel/crossdev so first of all put this ebuild to package.keywords. This package don't have USE flags so it is enough to perform:
crossdev is using own local portage overlay to build target specific configuration. Following line is necessarily in /etc/make.conf. Of course you can use different location :)
If directory dont exist then create it
mkdir -p /opt/local/portage
crossdev is using new layout of /etc/portage/package.* . If you don't migrated to this layout yet then you should to it now. New layout is expecting /etc/portage/package.keywords/ (and all others) to be a directory and configuration in files inside of it.
installation of cross compile tools
crossdev -t avr
And you should see following:
* crossdev version: 20120721 * Host Portage ARCH: amd64 * Target Portage ARCH: * * Target System: avr * Stage: 4 (C/C++ compiler) * ABIs: default * binutils: binutils-[latest] * gcc: gcc-[latest] * libc: avr-libc-[latest] * CROSSDEV_OVERLAY: /opt/local/portage * PORT_LOGDIR: /var/log/portage * PORTAGE_CONFIGROOT: * Portage flags: !!! WARNING - Cannot auto-configure CHOST avr !!! You should edit /usr/avr/etc/portage/make.conf !!! by hand to complete your configuration * Log: /var/log/portage/cross-avr-binutils.log * Emerging cross-binutils ... [ ok ] * Log: /var/log/portage/cross-avr-gcc-stage1.log * Emerging cross-gcc-stage1 ... [ ok ] * Log: /var/log/portage/cross-avr-avr-libc.log * Emerging cross-avr-libc ... [ ok ] * Log: /var/log/portage/cross-avr-gcc-stage2.log * Emerging cross-gcc-stage2 ... [ ok ]
If no errors reported then you can start using AVR-GCC just by typing "avr-gcc" to command line.
Just for reference I included name and version installed by crossdev tool (this may be bit old right now):
# eix -c cross-avr/* [I] cross-avr/avr-libc  (1.8.0[?]@03.08.2012): C library for Atmel AVR microcontrollers [I] cross-avr/binutils  (2.22.90[?]@03.08.2012): Tools necessary to build programs [I] cross-avr/gcc  (4.6.3(4.6)[?]@03.08.2012): The GNU Compiler Collection [N] cross-avr/gdb  ((~)7.4.1): GNU debugger  /opt/local/portage #
de-installation of cross compile tools
If you whould like to remove AVR tools then simply enter following command:
crossdev -C avr
If crossdev is no longer required on machine then it can be removed using portage command:
emerge -C crossdev
I don't recommend to remove crossdev if there are still targets installed using crossdev.
/usr/libexec/gcc/avr/ld: cannot open linker script file ldscripts/avr5.x: No such file or directory
# locate ldscripts/avr5.x /usr/lib64/binutils/avr/2.22.90/ldscripts/avr5.x # ln -s /usr/lib/binutils/avr/2.22.90/ldscripts /usr/avr/lib/ldscripts
/usr/libexec/gcc/avr/ld: cannot find crtm328p.o: No such file or directory
# locate crtm328p.o /usr/avr/lib/avr5/crtm328p.o # ln -s /usr/avr/lib/avr5/crtm328p.o /usr/avr/lib/crtm328p.o
Problem to compile AVR target
C compiler cannot create executables.
or similar errors during compilation of AVR target. More details @ cross-avr/gcc fails to emerge
echo "cross-avr/gcc -sanitize" > /etc/portage/package.use/avr-gcc-disable-sanitize