(Added up-to-date instructions on compiling under linux) |
(Added Information for subversion login.) |
||
(17 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
⚫ | |||
− | Pre-built compilers can be found near the bottom of this page: [http://forum.chdk-treff.de/download_dev.php http://forum.chdk-treff.de/download_dev.php], 32-bit only (use a VM). Using the "gcc 4.6.0" cross-compiler and the packages |
||
− | sudo apt-get install gcc-4.6 subversion make |
||
− | (ubuntu 13.10 i386, needed to make some tools on the build machine) with a symlink from /usr/bin/gcc-4.6 to /somewhere/on/your/PATH/gcc were able to successfully build trunk (Jan 2014). |
||
+ | The CHDK source is available from the official [https://subversion.apache.org/ subversion] repository. To get the current development source into a directory called chdk in your home directory use |
||
− | The remainder of this page is mostly out of date; "below there be dragons". |
||
⚫ | |||
− | '''MOST PEOPLE SHOULDN'T BE BUILDING THEIR OWN CROSS-TOOLCHAIN - THEY SHOULD JUST INSTALL A PRE-BUILT ONE LIKE ANY OTHER PACKAGE.''' |
||
+ | ''(When subversion.assembla.com requires a login, use anything, e.g. "guest"/"guest".)'' |
||
+ | Stable releases are available in branches named like /svn/chdk/branches/release-N_M |
||
− | ---- |
||
+ | To update your source tree with changes added by the CHDK developers after your initial checkout, use |
||
− | This is the procedure I used to compile CHDK (April 2007). |
||
− | Look for the shorter alternative procedure at the end of this page. |
||
⚫ | |||
− | June 2007. I have modified the procedure to use gcc-3.4.6 and |
||
− | Vitaly's patch in place of gcc-4.1.2. The reason for the |
||
− | change is that there is an issue with 'endianness' and |
||
− | floating point numbers that is addressed by Vitaly's patch. |
||
+ | Subversion is generally available from your distro package manager. For more information about subversion usage, see the [http://svnbook.red-bean.com/ documentation]. |
||
− | I compiled the CHDK with gcc-4.1.2, both 'trunk' and 'grand' |
||
− | branches, with success |
||
− | since April until I met a problem using the 'pow' function |
||
− | under 'trunk'. The 'grand' branch addresses the issue differently |
||
− | and the floating point code worked fine under the 'grand' branch when compiled |
||
− | with gcc-4.1.2. |
||
⚫ | |||
− | There is a 'minor' difference of behavior between the |
||
+ | As of late 2020, the CHDK development branch requires gcc-arm-none-eabi version 4, 5, 8, 9 or (experimentally) 10. The 1.5 stable branch requires gcc 3, 4 or 5, either none-eabi or elf (for digic 5 and below ports only). Note that CHDK is sensitive to toolchain version and configuration, and that an incorrect toolchain may result in builds that compile but do not run. |
||
− | two compilers. With gcc-4.1.2, the variable __arm__ is defined |
||
− | even when the compiler is called with option -mtumb; |
||
− | with gcc-3.4.6 and the patch and option -mthumb, the variable |
||
− | __arm__ is not defined but variable __thumb__ is. The CHDK |
||
− | file 'include/lowlevel.h' is sensitive to that difference of behavior. |
||
+ | If your distro provides a supported gcc cross compiler version, simply install it using the package manager. On Debian based distros, the package is typically called gcc-arm-none-eabi, but beware that some distro versions may only offer a non-supported gcc version like 6 or 7. |
||
− | The reason I used gcc-4.1.2 in the first place is that I was not |
||
− | aware of Vitaly's patch. |
||
+ | If no suitable package is available, pre-compiled toolchains are available from [https://launchpad.net/gcc-arm-embedded/+download]. gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2 is known to work for both the development and stable branches. Note this toolchain is 32 bit, meaning 32 bit application support may need to be enabled in your distro (see [https://chdk.setepontos.com/index.php?topic=12133.msg125084#msg125084 here). Pre-compiled toolchains are also available from https://releases.linaro.org/components/toolchain/binaries/ |
||
⚫ | |||
− | {{notice|CHDK source was split into two main streams effective Dec 26,2011. A stable stream was created as a branch and the main trunk became the development or unstable stream. References on this page are to the development or unstable stream. Change https://tools.assembla.com/svn/chdk to https://tools.assembla.com/svn/chdk/branches/release-1_2 to use the stable stream.}} |
||
− | * Create a directory where to load the CHDK source code. |
||
+ | If you install a 3rd party toolchain, you may need to add it to your path. |
||
− | > mkdir ~/chdk && cd ~/chdk |
||
+ | ==Host toolchain and other dependencies== |
||
− | * Get the CHDK source code. |
||
+ | You will also need to install gcc for your host platform to build various CHDK tools. Distro package managers generally include a group / meta package like build-essentials or similar. At a minimum, you need gcc, make and libc development files. Building CHDK packages also requires zip. |
||
+ | To build stubs (automatically identified firmware functions and variables) for Digic 6 and later, you also need the capstone libriary configured as described on [[Digic_6-7_Porting#Configuring_CHDK_capstone_tools]]. This is generally required for porting new models, but not for building existing ports or adding non-camera specific features. |
||
⚫ | |||
⚫ | |||
− | * and update the source code every now and then: |
||
+ | To configure compile time options, copy buildconf.inc to localbuildconf.inc and edit to taste. In particular, you may want to set the default PLATFORM and PLATFORMSUB, and the paths to capstone libraries, and the OPT_GEN_STUBS settings. For the stable branch, you may also need to set OPT_USE_GCC_EABI to match your compiler. |
||
+ | To do a full build of a port (a2200 firmware 100b, in this example), use the following in the root of your CHDK source tree |
||
− | > cd chdk && svn up |
||
⚫ | |||
⚫ | |||
+ | The compiled CHDK core binary files DISKBOOT.BIN and PS.FIR/FI2 (if enabled) are output to bin in the source directory. Modules are output in the CHDK/modules directory. |
||
− | {{Attention|There are alternate guides for setting up newer cross compilers here: [[gcc433 | gcc433]] and here [[Gcc452 | gcc452]]}} |
||
+ | You can do an incremental build (recompiling only changed files) by omitting clean, but beware that some changes may not be correctly detected, especially in header files and makefiles. |
||
− | Get the sources of gcc and binutils from a GNU repository. Decide where the cross compiler will be on your computer. |
||
+ | To build a full zip package of CHDK files suitable for installing on an SD card, use |
||
− | > mkdir ~/arm-elf |
||
⚫ | |||
− | :Tell your computer you are going to run programs from that location. |
||
+ | To build packages for all ports, use |
||
− | > export PATH=${HOME}/arm-elf/bin:$PATH |
||
⚫ | |||
− | :Create a working area and build binutils and gcc. |
||
⚫ | |||
− | |||
− | > mkdir ~/wa |
||
− | > cd ~/wa |
||
− | > tar xvfj ~/src/binutils-2.17.tar.bz2 |
||
− | > tar xvfj ~/src/gcc-3.4.6.tar.bz2 |
||
− | |||
− | Note: About using the latest Gcc-4.3.3 take a look at [[Gcc433|this article]]. |
||
− | |||
− | > cd binutils-2.17 |
||
− | > ./configure --srcdir=../binutils-2.17 --target=arm-elf \ |
||
− | --prefix=${HOME}/arm-elf --disable-werror |
||
− | > make |
||
− | > make install |
||
− | > cd .. |
||
− | |||
− | :Apply Vitaly's patch to the compiler. |
||
− | |||
− | > (cd gcc-3.4.6 && patch -p0 <~/chdk/tools/patches/gcc-3.4-arm.diff) |
||
− | |||
− | > mkdir gcc-3.4.6-arm-elf && cd gcc-3.4.6-arm-elf |
||
− | > ../gcc-3.4.6/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=${HOME}/arm-elf |
||
− | > (unset LIBRARY_PATH; unset CFLAGS; make && make install) |
||
− | |||
− | : That's it for the installation of the cross-compiler. |
||
− | |||
⚫ | |||
− | Go to either 'trunk' or 'grand'. |
||
− | |||
⚫ | |||
− | |||
− | : Manually edit file <makefile.inc> to select PLATFORM and PLATFORMSUB for your camera: just remove the "#" comment characters. Also, add the following line at the beginning of file <makefile.inc> to tell CHDK where the arm cross compiler is, |
||
− | |||
− | export PATH=${HOME}/arm-elf/bin:${PATH} |
||
− | |||
− | : You should be ready to compile everything. |
||
− | |||
− | > make fir |
||
− | |||
− | : The results are left in the "bin" directory. |
||
− | |||
− | : If you want to compile firmware for an another camera, just execute make with <tt>PLATFORM</tt> and <tt>PLATFORMSUB</tt> arguments. For example: |
||
− | |||
− | > make PLATFORM=a620 PLATFORMSUB=100f fir |
||
− | |||
− | : Before compiling firmware for a different camera, the build directory may need to be cleaned. For example: |
||
− | |||
⚫ | |||
− | |||
− | : To compile firmware for all cameras just type: |
||
− | |||
⚫ | |||
− | |||
− | == Alternative cross compilers. == |
||
− | === Compiling CHDK on Ubuntu === |
||
− | See this forum thread : [http://chdk.setepontos.com/index.php?topic=8065.msg84880 Compiling CHDK on Ubuntu 11.10] |
||
− | === An alternative method with gcc-3.4.6 === |
||
− | There is a patch included in CHDK for building with gcc-3.4.6. It's a simpler install if you want to use this version of gcc. This method uses a global install of the arm-elf tools. |
||
− | |||
− | Remember to clear any CFLAGS you've got set: |
||
− | |||
− | > export CFLAGS="" |
||
− | |||
− | ==== Compile and install binutils ==== |
||
− | Extract the source, change to its directory, and |
||
− | |||
− | > mkdir binutils-2.17-arm-elf |
||
− | > cd binutils-2.17-arm-elf/ |
||
− | > ../configure --srcdir=../ --target=arm-elf && make && sudo make install |
||
− | |||
− | === Compile and install GCC-3.4.6 === |
||
− | Download gcc-3.4.6, extract it and change to that directory. |
||
− | Patch the GCC source with the toolkit patch: |
||
− | |||
− | > patch -p0 < [path_to_chdk]/tools/patches/gcc-3.4-arm.diff |
||
− | |||
− | : Build the source: |
||
− | |||
− | > mkdir gcc-arm-elf |
||
− | > cd gcc-arm-elf/ |
||
− | > ../configure --srcdir=../ --target=arm-elf --with-cpu=arm9 \ |
||
− | --with-newlib --enable-multilib --enable-languages=c \ |
||
− | && make && sudo make install |
||
− | |||
− | You can now build the CHDK source as directed above |
||
− | |||
− | ===Compile and install GCC-4.5.2=== |
||
− | (Updated 23rd Nov 2013) Currently, mpfr.org seems to be unavailable. So download request mentioned in 24th Sep 2013 update won't work. You can download mpfr from [http://ftp.gnu.org/gnu/mpfr/ here]. |
||
− | |||
− | |||
− | (Updated 24th Sept 2013) |
||
− | [http://pastebin.com/eYe609dp Here] is a script to build the tool chain needed for building CHDK |
||
− | based on GCC 4.5.2. |
||
− | |||
− | Create a suitable folder to build GCC with something like mkdir ~/build-dir and save the script to this folder. |
||
− | |||
− | MPFR version 3.0.0 is no longer the current version, therefore you will need edit the script and change the following line... |
||
− | |||
− | wget -c http://www.mpfr.org/mpfr-current/$MPFR.tar.bz2 |
||
− | |||
− | to |
||
− | |||
− | wget -c http://www.mpfr.org/mpfr-3.0.0/$MPFR.tar.bz2 |
||
− | |||
− | Dont forget to chmod the script o+x so you can run it. |
||
− | |||
− | |||
− | |||
− | |||
− | |||
− | If you encounter any issues with the script, don't forget to post any fixes here. |
||
− | |||
− | After building the tool chain you can now download and build CHDK: |
||
− | |||
− | > export PATH=${HOME}/build-dir/arm/toolchain/bin:${PATH} |
||
− | > svn co https://tools.assembla.com/svn/chdk/trunk chdk |
||
− | > cd chdk |
||
⚫ | |||
− | |||
− | You may need to adjust the PATH to match the build folder you created above and the platform variable in last line to the model of your camera. |
||
− | The ./bin/DISKBOOT.BIN need to be copied to your SD card. |
||
− | If you want a PS.FI2 for auto booting, you need to follow ./platform/fi2.inc.txt to get ./bin/PS.FI2 |
||
− | after building CHDK. |
||
− | |||
− | Note: If you have pre-existing cross compilers (for example if you have been coding for your raspberry pi), you might need to alter you PATH variable to exclude the related paths (anything like /home/blah/sandbox/raspian/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin ) before you attempt to install GCC with the above script, otherwise you may end up with some very strange results. |
||
− | |||
− | ===The Gentoo way=== |
||
− | |||
− | Gentoo Linux contains a nice utility to automate this process. Emerge '''sys-devel/crossdev''' and run |
||
− | crossdev -t arm-elf -s1 --without-headers --binutils 2.18-r4 |
||
− | This commands should compile and merge the latest gcc and binutils 2.18 (the latest binutils-2.19.1 doesn't work with chdk). Look at the versions at $PORTDIR_OVERLAY/cross-arm-elf/binutils/<br />The first line in makefile.inc should look then like this:<br /> |
||
− | PATH := /usr/i686-pc-linux-gnu/arm-elf/binutils-bin/2.18/:/usr/i686-pc-linux-gnu/arm-elf/gcc-bin/4.4.1/:${PATH} |
||
− | |||
− | ===GCC 4.x=== |
||
− | Well, this works fine on Ubuntu 8.04.2. |
||
− | About using the latest Gcc-4.3.3 take a look at this [[Gcc433|article]]. |
||
− | |||
− | ===Success reports=== |
||
− | |||
− | - binutils-2.22 and gcc-4.5.3 on Gentoo ~amd64 (using sys-devel/crossdev) |
||
− | |||
− | - binutils-2.23 and gcc-4.5.4 gcc-4.6.3 gcc-4.7.2 (latest needs --enable-obsolete to allow arm-elf binary format) OpenSUSE amd64 |
||
− | |||
− | ===Python GUI=== |
||
− | {{notice|''' An GUI written in python is available here [http://dl.dropbox.com/u/4997718/testing.zip for download]}} |
||
− | |||
− | cd directory/where/compiler/is |
||
− | python chdk_linux_compiling_gui.py |
||
− | The rest should be self-explaining. |
||
− | |||
− | More info can be found in the german forum: |
||
− | |||
− | http://forum.chdk-treff.de/viewtopic.php?f=1&t=1829 |
||
− | |||
− | Use google translate if you can't read german. |
||
⚫ |
Latest revision as of 17:56, 30 October 2022
Getting the CHDK source
The CHDK source is available from the official subversion repository. To get the current development source into a directory called chdk in your home directory use
svn co http://subversion.assembla.com/svn/chdk/trunk ~/chdk
(When subversion.assembla.com requires a login, use anything, e.g. "guest"/"guest".)
Stable releases are available in branches named like /svn/chdk/branches/release-N_M
To update your source tree with changes added by the CHDK developers after your initial checkout, use
svn up ~/chdk
Subversion is generally available from your distro package manager. For more information about subversion usage, see the documentation.
Installing a cross compiler
As of late 2020, the CHDK development branch requires gcc-arm-none-eabi version 4, 5, 8, 9 or (experimentally) 10. The 1.5 stable branch requires gcc 3, 4 or 5, either none-eabi or elf (for digic 5 and below ports only). Note that CHDK is sensitive to toolchain version and configuration, and that an incorrect toolchain may result in builds that compile but do not run.
If your distro provides a supported gcc cross compiler version, simply install it using the package manager. On Debian based distros, the package is typically called gcc-arm-none-eabi, but beware that some distro versions may only offer a non-supported gcc version like 6 or 7.
If no suitable package is available, pre-compiled toolchains are available from [1]. gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2 is known to work for both the development and stable branches. Note this toolchain is 32 bit, meaning 32 bit application support may need to be enabled in your distro (see [https://chdk.setepontos.com/index.php?topic=12133.msg125084#msg125084 here). Pre-compiled toolchains are also available from https://releases.linaro.org/components/toolchain/binaries/
If you install a 3rd party toolchain, you may need to add it to your path.
Host toolchain and other dependencies
You will also need to install gcc for your host platform to build various CHDK tools. Distro package managers generally include a group / meta package like build-essentials or similar. At a minimum, you need gcc, make and libc development files. Building CHDK packages also requires zip.
To build stubs (automatically identified firmware functions and variables) for Digic 6 and later, you also need the capstone libriary configured as described on Digic_6-7_Porting#Configuring_CHDK_capstone_tools. This is generally required for porting new models, but not for building existing ports or adding non-camera specific features.
Compiling CHDK
To configure compile time options, copy buildconf.inc to localbuildconf.inc and edit to taste. In particular, you may want to set the default PLATFORM and PLATFORMSUB, and the paths to capstone libraries, and the OPT_GEN_STUBS settings. For the stable branch, you may also need to set OPT_USE_GCC_EABI to match your compiler.
To do a full build of a port (a2200 firmware 100b, in this example), use the following in the root of your CHDK source tree
make PLATFORM=a2200 PLATFORMSUB=100b clean fir
The compiled CHDK core binary files DISKBOOT.BIN and PS.FIR/FI2 (if enabled) are output to bin in the source directory. Modules are output in the CHDK/modules directory.
You can do an incremental build (recompiling only changed files) by omitting clean, but beware that some changes may not be correctly detected, especially in header files and makefiles.
To build a full zip package of CHDK files suitable for installing on an SD card, use
make PLATFORM=... PLATFORMSUB=... firzipsubcomplete
To build packages for all ports, use
make batch-zip-complete