It's very well possible there are binaries elsewhere but I didn't see them; and in any case getting this to work is a lot more useful for me. The linaro build tool 'crosstool-ng' seems to expect debian and/or ubuntu and simply didn't work.
I started from linaro-toolchain-binaries page, and downloaded the full sources sources part 1 and part 2 (although part2 is just the linux kernel source which isn't necessary).
First, some variables/setup which makes it work:
top=`pwd` prefix=/home/notzed/cross mkdir -p ${prefix} export PATH=${PATH}:${prefix}/binprefix is the install location.
tar xvjf ~/Downloads/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src-part1.tar.bz2 gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/ gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/gmp-5.0.2.tar.bz2 gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/libiconv-1.14.tar.gz gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/expat-2.1.0.tar.gz gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/gdb-linaro-7.6.1-2013.10.tar.bz2 gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/zlib-1.2.5.tar.gz gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/isl-0.11.1.tar.bz2 gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/gcc-linaro-4.8-2013.10.tar.xz gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/linaro-prebuilt-sysroot-2013.10.tar.bz2 gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/binutils-linaro-2.23.2-2013.10-4.tar.bz2 gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/mpfr-3.1.0.tar.xz gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/pkg-config-0.25.tar.gz gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/cloog-0.18.0.tar.gz gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/md5sum gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/mpc-0.9.tar.gzThen untar the interesting ones in a way that the configure scripts expect. I use a script for this but this is what it executes:
mkdir -p build tar xJf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/gcc-linaro-4.8-2013.10.tar.xz -C build mv build/gcc-linaro-4.8-2013.10 build/gcc-linaro tar xjf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/binutils-linaro-2.23.2-2013.10-4.tar.bz2 -C build mv build/binutils-linaro-2.23.2-2013.10-4 build/binutils-linaro tar xjf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/linaro-prebuilt-sysroot-2013.10.tar.bz2 -C ${prefix} tar xjf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/gmp-5.0.2.tar.bz2 -C build ln -s ../gmp-5.0.2 build/gcc-linaro/gmp tar xzf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/mpc-0.9.tar.gz -C build ln -s ../mpc-0.9 build/gcc-linaro/mpc tar xJf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/mpfr-3.1.0.tar.xz -C build ln -s ../mpfr-3.1.0 build/gcc-linaro/mpfr tar xzf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_src/zlib-1.2.5.tar.gz -C build ln -s ../zlib-1.2.5 build/gcc-linaro/zlib
The
Then the building, just two stages: binutils then gcc. The sysroot from linaro is used and contains libc and so on.
Binutils is straightforward and only takes a minute or so to build.
top=`pwd` mkdir -p ${top}/build/binutils-build cd ${top}/build/binutils-build ../binutils-linaro/configure \ --prefix=${prefix} \ --target=arm-linux-gnueabihf \ --disable-nls --disable-werror \ --with-sysroot=${prefix}/linaro-prebuilt-sysroot-2013.10 make -j8 make install
Then gcc. This was the painful one ... but to cut the long story short this is what I did to get it to work. It takes a few minutes to build.
mkdir -p ${top}/build/gcc-build cd ${top}/build/gcc-build ../gcc-linaro/configure \ --prefix=${prefix} \ --host=x86_64-linux-gnu \ --build=x86_64-linux-gnu \ --target=arm-linux-gnueabihf \ --with-float=hard --with-arch=armv7-a -with-fpu=vfpv3-d16 \ --disable-nls --disable-werror \ --enable-languages=c,c++ \ --with-sysroot=${prefix}/linaro-prebuilt-sysroot-2013.10 make -j8 make install
*shrug* I can't really say whether it's right or wrong but - but it worked well enough to cross compile a working binary.
The ezesdk
So mostly why I did this was so that I could do some re-arranging of the elf-loader code into a more wide-reaching library and keep working on it locally on my workstation rather than having to do it on the parallella. Not that it isn't fast enough to do the little bit of compiling I need - it certainly is - it was just all done on a whim really (one that drew out to a good few hours although not particularly intense ones, in between making another batch of biltong, cooking some corned beef, drinking, and surfing the web).
Another whimsical decision was to fork the epiphany e-hal library. This ... isn't really something I originally intended to do because it just means more to maintain and also there may be future functionality that would be best kept there - such as multi-process arbitration and so forth. But I guess one small but real justification is that right now I need to access some private (-local) data structures which are presumably 'private' for a reason; and if they ever really went private things would break.
Anyway ... I've just been extremely tired the last few days and a bit distracted by some stuff (to somewhat understate it) so it may well just be a bad idea but I suppose i'll see how far I get. It's taken long enough just to decide on a directory layout. At this point i'm going to have libezehost.so which will be the host driver (e-hal + elf-loader, etc), and libezecore.a which will be the on-core api (i.e. e-lib equivalent) although much of it is inline.
I unfortunately have to start working on that other project tomorrow which means a long commute on cyclist hostile roads (more so than average) so tonight better be an early one. Just as well i'm totally knackered and might not even make 10pm - although daylight saving just ended today so it's "really" later than that.
No comments:
Post a Comment