Difference between revisions of "Gentoo: crossdev avr"
Lukas Dzunko (talk | contribs) (→Why sys-devel/crossdev ?) |
Lukas Dzunko (talk | contribs) (→Why sys-devel/crossdev ?) |
||
Line 2: | Line 2: | ||
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. | 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 ? == | == 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 save time. | + | 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 == | == Installation of AVR target == |
Revision as of 18:01, 13 February 2016
Contents
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
sys-devel/crossdev
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:
emerge crossdev
required configuration
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 :)
PORTDIR_OVERLAY="/opt/local/portage"
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 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. For example for AVR target you can find cross-avr there.
installation of cross compile tools
Just invoke:
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 this end with no problem then you can start compiling code for AVR platform using "avr-gcc".
Just for reference i included name and version installed by crossdev tool:
# eix -c cross-avr/* [I] cross-avr/avr-libc [1] (1.8.0[?]@03.08.2012): C library for Atmel AVR microcontrollers [I] cross-avr/binutils [1] (2.22.90[?]@03.08.2012): Tools necessary to build programs [I] cross-avr/gcc [1] (4.6.3(4.6)[?]@03.08.2012): The GNU Compiler Collection [N] cross-avr/gdb [1] ((~)7.4.1): GNU debugger [1] /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 present targets installed using crossdev.
workarounds
Problem with linker 1
/usr/libexec/gcc/avr/ld: cannot open linker script file ldscripts/avr5.x: No such file or directory
Fix:
# 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
Problem with linker 2
/usr/libexec/gcc/avr/ld: cannot find crtm328p.o: No such file or directory
Fix:
# locate crtm328p.o /usr/avr/lib/avr5/crtm328p.o # ln -s /usr/avr/lib/avr5/crtm328p.o /usr/avr/lib/crtm328p.o