No edit summary |
|||
Line 11: | Line 11: | ||
N.B. You don't need to '''wget''' and '''ln -s''' for GMP and MPFR sources if they are already installed on your computer. E.g. use the the following on Ubuntu: |
N.B. You don't need to '''wget''' and '''ln -s''' for GMP and MPFR sources if they are already installed on your computer. E.g. use the the following on Ubuntu: |
||
− | + | : libgmp3-dev - Multiprecision arithmetic library developers tools |
|
− | + | : libmpfr-dev - multiple precision floating-point computation developers tools |
|
If you prefer to use the ubuntuversion of those libraries, you can use the followring command instead: |
If you prefer to use the ubuntuversion of those libraries, you can use the followring command instead: |
||
− | + | : > sudo apt-get install libgmp3-dev libmpfr-dev |
|
The following assume that you're getting the newer sources for those libraries. |
The following assume that you're getting the newer sources for those libraries. |
||
Line 29: | Line 29: | ||
:Create some directories, and modify your path to use the cross compiler and binutils |
:Create some directories, and modify your path to use the cross compiler and binutils |
||
− | + | :: > mkdir ~/arm-elf |
|
− | + | :: > export PATH=~/arm-elf/bin:$PATH |
|
− | + | :: > mkdir ~/wa |
|
− | + | :: > cd ~/wa |
|
:Create a place for downloads, and download some stuff you will need. I have chosen some random mirrors here, you are free to choose whatever mirror is closer to you. |
:Create a place for downloads, and download some stuff you will need. I have chosen some random mirrors here, you are free to choose whatever mirror is closer to you. |
||
Line 39: | Line 39: | ||
at version 2.4.1, and 2.4.1 has been substituted for 2.4.0 in all that follows. if you cannot use 2.4.1 find mpfr-2.4.0, but check the [http://www.mpfr.org/mpfr-current/#changes security problem] this version has first. |
at version 2.4.1, and 2.4.1 has been substituted for 2.4.0 in all that follows. if you cannot use 2.4.1 find mpfr-2.4.0, but check the [http://www.mpfr.org/mpfr-current/#changes security problem] this version has first. |
||
− | + | :: > mkdir down |
|
− | + | :: > cd down |
|
− | + | :: > wget ftp://ftp.nluug.nl/mirror/languages/gcc/releases/gcc-4.3.3/gcc-4.3.3.tar.bz2 |
|
− | + | :: > wget http://ftp.sunet.se/pub/gnu/gmp/gmp-4.2.4.tar.bz2 |
|
− | + | :: > wget http://www.mpfr.org/mpfr-current/mpfr-2.4.1.tar.bz2 |
|
− | + | :: > wget http://ftp.download-by.net/gnu/gnu/binutils/binutils-2.18.tar.bz2 |
|
:Unpack and prepare sources. |
:Unpack and prepare sources. |
||
− | + | :: > cd .. |
|
− | + | :: > for zipped in down/* ; do tar xjf $zipped ; done # Note: This may take a while. |
|
− | + | :: > ln -s $(pwd)/gmp-4.2.4 gcc-4.3.3/gmp |
|
− | + | :: > ln -s $(pwd)/mpfr-2.4.1 gcc-4.3.3/mpfr |
|
:Now we're ready to build binutils |
:Now we're ready to build binutils |
||
− | + | :: > cd binutils-2.18/ |
|
− | + | :: > ./configure --srcdir=`pwd` --target=arm-elf --prefix=~/arm-elf --disable-werror |
|
− | + | :: > make -j 3 |
|
− | + | :: > make install |
|
− | + | :: > cd .. |
|
''Its nessesary for me to pass the "--disable-werror" flag to configure, since I use gcc version 4.3.3. Somewhere between version 4.1.2 and 4.3.3 gcc started producing some new warnings, and the binutils code doesn't avoid those yet. Since I doubt it will harm I included the flag above to enable gcc 4.3.3 users to compile binutils without errors.'' |
''Its nessesary for me to pass the "--disable-werror" flag to configure, since I use gcc version 4.3.3. Somewhere between version 4.1.2 and 4.3.3 gcc started producing some new warnings, and the binutils code doesn't avoid those yet. Since I doubt it will harm I included the flag above to enable gcc 4.3.3 users to compile binutils without errors.'' |
||
Line 65: | Line 65: | ||
:Configure gcc (Thanks to Geekmug [[User:Geekmug/Compiling_CHDK_under_Windows#Building_gcc]]) |
:Configure gcc (Thanks to Geekmug [[User:Geekmug/Compiling_CHDK_under_Windows#Building_gcc]]) |
||
− | + | :: > ed gcc-4.3.3/gcc/config/arm/t-arm-elf << EOF |
|
− | + | :: > /MULTILIB_OPTIONS/s/^M/# M/ |
|
− | + | :: > /MULTILIB_DIRNAMES/s/^M/# M/ |
|
− | + | :: > /mno-thumb-interwork/s/^# // |
|
− | + | :: > /normal interwork/s/^# // |
|
− | + | :: > wq |
|
− | + | :: > EOF |
|
:Compile gcc |
:Compile gcc |
||
− | + | :: > mkdir gcc-4.3.3-arm-elf && cd gcc-4.3.3-arm-elf |
|
− | + | :: > ../gcc-4.3.3/configure --srcdir=../gcc-4.3.3 --target=arm-elf \ |
|
− | --enable-multilib --enable-languages=c --enable-clocale=gnu \ |
+ | ::: --enable-multilib --enable-languages=c --enable-clocale=gnu \ |
− | --disable-libm --disable-libc --disable-threads \ |
+ | ::: --disable-libm --disable-libc --disable-threads \ |
− | --disable-nls --disable-libssp --disable-intl \ |
+ | ::: --disable-nls --disable-libssp --disable-intl \ |
− | --with-cpu=arm9 --with-newlib --prefix= |
+ | ::: --with-cpu=arm9 --with-newlib --prefix=~/arm-elf |
− | + | :: > (unset LIBRARY_PATH; unset CFLAGS; make -j 3 && make install) # Change "3" to "your systems number of cores" + 1 |
|
N.B.: To compile the SX10 image (and possibly others; e.g. the SX1 image) you might have to remove the <tt>--with-cpu=arm9</tt> flag (as noted [http://chdk.setepontos.com/index.php/topic,845.msg32025.html#msg32025 here]). |
N.B.: To compile the SX10 image (and possibly others; e.g. the SX1 image) you might have to remove the <tt>--with-cpu=arm9</tt> flag (as noted [http://chdk.setepontos.com/index.php/topic,845.msg32025.html#msg32025 here]). |
||
Line 90: | Line 90: | ||
<pre> |
<pre> |
||
+ | mkdir ~/arm-elf |
||
− | HOME=/the/path/I/realy/want/ |
||
− | + | export PATH=~/arm-elf/bin:$PATH |
|
+ | mkdir ~/wa |
||
− | export PATH=${HOME}/arm-elf/bin:$PATH |
||
− | + | cd ~/wa |
|
− | cd ${HOME}/wa |
||
mkdir down |
mkdir down |
||
Line 109: | Line 108: | ||
cd binutils-2.18/ |
cd binutils-2.18/ |
||
− | ./configure --target=arm-elf --prefix= |
+ | ./configure --srcdir=`pwd` --target=arm-elf --prefix=~/arm-elf --disable-werror |
make -j 3 |
make -j 3 |
||
make install |
make install |
||
Line 127: | Line 126: | ||
--disable-libm --disable-libc --disable-threads \ |
--disable-libm --disable-libc --disable-threads \ |
||
--disable-nls --disable-libssp --disable-intl \ |
--disable-nls --disable-libssp --disable-intl \ |
||
− | --with-cpu=arm9 --with-newlib --prefix= |
+ | --with-cpu=arm9 --with-newlib --prefix=~/arm-elf |
− | (unset LIBRARY_PATH; unset CFLAGS; make -j 3 && make install) # Change 3 |
+ | (unset LIBRARY_PATH; unset CFLAGS; make -j 3 && make install) # Change "3" to "your systems number of cores" + 1 |
</pre> |
</pre> |
Revision as of 22:04, 21 July 2009
This page is about installing a buildenvironment with the gcc 4.3.3 compiler (newest at the time of this page creation). Originally this page used a (slightly modified or fixed) version 2.19.1 of binutils, but since it didn't work, the page is being modified to use version 2.18.
It has been tested and it seems to be able to build working images!
A problem seems to be analysing firmware dumps with binutils 2.18 though. arm-elf-objdump raises the flag "segmentation violation", when trying to dump the firware followring the instructions on this wiki. Binutils 2.19.1 is able to do this, however, it doesn't seem to be able to compile working chdk images. Further investigation is going on. For now, I guess the solution is to have two version of binutils, one to analyse firmware, and one to build chdk images. This page only covers installing binutils 2.18, but you can install binutils 2.19.1 by replacing "2.18" with "2.19.1" in the instructions below.
Here is the original for older gcc: Compiling_CHDK_under_Linux
Below is how I do it with Ubuntu GNU/Linux 8.10:
N.B. You don't need to wget and ln -s for GMP and MPFR sources if they are already installed on your computer. E.g. use the the following on Ubuntu:
- libgmp3-dev - Multiprecision arithmetic library developers tools
- libmpfr-dev - multiple precision floating-point computation developers tools
If you prefer to use the ubuntuversion of those libraries, you can use the followring command instead:
- > sudo apt-get install libgmp3-dev libmpfr-dev
The following assume that you're getting the newer sources for those libraries.
Some steps are common, so instead of reproducing it here, I just refer you to the relavant section on the page Compiling_CHDK_under_Linux.
However, some of it I have copied.
Follow the steps for getting the source.
Get the sources of gcc and binutils from a GNU repository. Decide where the cross compiler will be on your computer.
- Create some directories, and modify your path to use the cross compiler and binutils
- > mkdir ~/arm-elf
- > export PATH=~/arm-elf/bin:$PATH
- > mkdir ~/wa
- > cd ~/wa
- Create a place for downloads, and download some stuff you will need. I have chosen some random mirrors here, you are free to choose whatever mirror is closer to you.
Here are some mirrors: gcc mirrors, gmplib mirrors, mpfr mirrors (There appears to be only one mirror for mpfr at this time). It should be noted that mpfr is now at version 2.4.1, and 2.4.1 has been substituted for 2.4.0 in all that follows. if you cannot use 2.4.1 find mpfr-2.4.0, but check the security problem this version has first.
- Unpack and prepare sources.
- > cd ..
- > for zipped in down/* ; do tar xjf $zipped ; done # Note: This may take a while.
- > ln -s $(pwd)/gmp-4.2.4 gcc-4.3.3/gmp
- > ln -s $(pwd)/mpfr-2.4.1 gcc-4.3.3/mpfr
- Now we're ready to build binutils
- > cd binutils-2.18/
- > ./configure --srcdir=`pwd` --target=arm-elf --prefix=~/arm-elf --disable-werror
- > make -j 3
- > make install
- > cd ..
Its nessesary for me to pass the "--disable-werror" flag to configure, since I use gcc version 4.3.3. Somewhere between version 4.1.2 and 4.3.3 gcc started producing some new warnings, and the binutils code doesn't avoid those yet. Since I doubt it will harm I included the flag above to enable gcc 4.3.3 users to compile binutils without errors.
- Configure gcc (Thanks to Geekmug User:Geekmug/Compiling_CHDK_under_Windows#Building_gcc)
- > ed gcc-4.3.3/gcc/config/arm/t-arm-elf << EOF
- > /MULTILIB_OPTIONS/s/^M/# M/
- > /MULTILIB_DIRNAMES/s/^M/# M/
- > /mno-thumb-interwork/s/^# //
- > /normal interwork/s/^# //
- > wq
- > EOF
- Compile gcc
- > mkdir gcc-4.3.3-arm-elf && cd gcc-4.3.3-arm-elf
- > ../gcc-4.3.3/configure --srcdir=../gcc-4.3.3 --target=arm-elf \
- --enable-multilib --enable-languages=c --enable-clocale=gnu \
- --disable-libm --disable-libc --disable-threads \
- --disable-nls --disable-libssp --disable-intl \
- --with-cpu=arm9 --with-newlib --prefix=~/arm-elf
- > (unset LIBRARY_PATH; unset CFLAGS; make -j 3 && make install) # Change "3" to "your systems number of cores" + 1
N.B.: To compile the SX10 image (and possibly others; e.g. the SX1 image) you might have to remove the --with-cpu=arm9 flag (as noted here).
Thats it! You should now have a working buildenvironment, and you can continue from "Compiling the CHDK." at Compiling_CHDK_under_Linux.
Here is the whole process for the impatient:
mkdir ~/arm-elf export PATH=~/arm-elf/bin:$PATH mkdir ~/wa cd ~/wa mkdir down cd down wget ftp://ftp.nluug.nl/mirror/languages/gcc/releases/gcc-4.3.3/gcc-4.3.3.tar.bz2 wget http://ftp.sunet.se/pub/gnu/gmp/gmp-4.2.4.tar.bz2 wget http://www.mpfr.org/mpfr-current/mpfr-2.4.1.tar.bz2 wget http://ftp.download-by.net/gnu/gnu/binutils/binutils-2.18.tar.bz2 cd .. for zipped in down/* ; do tar xjf $zipped ; done # Note: This may take a while. ln -s $(pwd)/gmp-4.2.4 gcc-4.3.3/gmp ln -s $(pwd)/mpfr-2.4.1 gcc-4.3.3/mpfr cd binutils-2.18/ ./configure --srcdir=`pwd` --target=arm-elf --prefix=~/arm-elf --disable-werror make -j 3 make install cd .. ed gcc-4.3.3/gcc/config/arm/t-arm-elf << EOF /MULTILIB_OPTIONS/s/^M/# M/ /MULTILIB_DIRNAMES/s/^M/# M/ /mno-thumb-interwork/s/^# // /normal interwork/s/^# // wq EOF mkdir gcc-4.3.3-arm-elf && cd gcc-4.3.3-arm-elf ../gcc-4.3.3/configure --srcdir=../gcc-4.3.3 --target=arm-elf \ --enable-multilib --enable-languages=c --enable-clocale=gnu \ --disable-libm --disable-libc --disable-threads \ --disable-nls --disable-libssp --disable-intl \ --with-cpu=arm9 --with-newlib --prefix=~/arm-elf (unset LIBRARY_PATH; unset CFLAGS; make -j 3 && make install) # Change "3" to "your systems number of cores" + 1