Wikia

CHDK Wiki

Compiling CHDK under Mac OS X

Talk2
576pages on
this wiki
Revision as of 07:15, September 9, 2010 by Emlyn77 (Talk | contribs)

Building CHDK requires gcc 4.3.2 and the ARM GCC toolchain.

1. Install MacPorts - http://www.macports.org/install.php

2. Before you install gcc you'll need a working compiler, so Apple's dev. tool (from the installation CD) should be installed.

3. Install gcc v4.3.2. from the terminal, type -

sudo port install gcc43
  (type the admin password as prompted)
  (this took several hours on my macbook pro)

4. Install arm-elf-gcc v4.3.2 with thumb interwork multilib support - from the terminal.

sudo port deactivate arm-elf-gcc

# the above command may give an ignorable error -
# port deactivate failed: Registry error: arm-elf-gcc not registered as installed & active"

  sudo port install arm-elf-gcc +interwork

# the above command may give the fatal error
# "ld: duplicate symbol _init_inline_once in libbackend.a(tree-inline.o) and 
#   tree-inline.ocollect2: ld returned 1 exit status"
# still working out how to fix this, but see http://trac.macports.org/ticket/20816 (leads to diff error)

5. make gcc v4.3.2 the default compiler.

cd /usr/bin
  rm gcc
  ln -s /opt/local/bin/gcc-mp-4.3 gcc

6. make arm-elf-gcc v4.3.2 default.

cd /usr/local/arm/bin
  rm arm-elf-gcc
  ln -s /opt/local/bin/arm-elf-gcc-4.3.2 arm-elf-gcc

From here, the directions for compiling under linux will work Compiling_CHDK_under_Linux although the directions for installing the compiler and cross compiler can be skipped.

Troubleshooting

If arm-elf-gcc doesn't compile, make sure you are using the latest version of MacPorts. To update it, type:

sudo port selfupdate

If that doesn't work, reinstall it from the website. If it gives you an error about libmpfr or something like that, type:

sudo port install mpfr

and try again.

Alternative Method

I was unable to get the above instructions working - I could install arm-elf-gcc but it failed to compile CHDK properly. Therefore I played around with the Linux instructions and managed to get something similar working on Mac OS X. I may have missed a step or two, but hopefully this is useful for someone.

1. Install the dependencies gmp, mpfr, libmpc and gettext (I used macports for this):

sudo port install gmp mpfr libmpc gettext

2. Download and extract the sources for binutils 2.17 and gcc 3.4.6 to a working directory.

3. Go into the binutils directory and configure and make:

cd binutils-2.17.90
./configure --srcdir=../binutils-2.17.90 --target=arm-elf --prefix=/install/path \
            --disable-nls --disable-libssp --disable-intl --disable-werror
make
make install
cd ..

Replace /install/path with the path where you want it to be installed. I'm not sure why srcdir is set like that, I just copied it and as it worked I didn't try without, but maybe it is not needed. disable-werror is needed because there are some warnings when building with a recent version of gcc, and by default these are treated as errors and make the build fail.

4. Make sure /install/path/bin is in your PATH

5. Do the same with gcc, applying Vitaly's patch from CHDK:

cd gcc-3.4.6
patch -p0 < /path/to/chdk/tools/patches/gcc-3.4-arm.diff
./configure --srcdir=../gcc-3.4.6 --target=arm-elf --enable-multilib --enable-languages=c \
            --enable-clocale=gnu --disable-libm --disable-libc --disable-threads --disable-nls \
            --disable-libssp --disable-intl --disable-libiberty --with-cpu=arm9 --with-newlib \
            --prefix=/install/path
make
make install
cd ..

5. The echo command on OS X does not understand the -e flag, so you have to modify chdk/tools/gensigs.sh script and change the last line from:

echo -e "\t{ NULL }\n};"

to:

echo "        { NULL }"
echo "};"

6. Try compiling CHDK, hopefully it now works.

Around Wikia's network

Random Wiki