HACKING.asciidoc: add info about compiling am7xxx-play for Windows
[libam7xxx.git] / HACKING.asciidoc
1 == Hacking libam7xxx
2
3 === Coding style
4
5 libam7xxx uses the linux kernel coding style:
6 http://kernel.org/doc/Documentation/CodingStyle
7
8 === Getting and compiling libam7xxx
9
10 libam7xxx depends on 'libusb-1.0' and optionally on 'libav' or 'ffmpeg' for
11 its example programs, the build system used is 'cmake'.
12
13 On a Debian based system, the dependencies can be installed with this command:
14
15   $ sudo aptitude install cmake \
16                           libusb-1.0-0-dev \
17                           libavformat-dev \
18                           libavcodec-dev \
19                           libavdevice-dev \
20                           libswscale-dev
21
22 The library and the example programs can be compiled following these steps:
23
24   $ git clone git://git.ao2.it/libam7xxx.git
25   $ cd libam7xxx
26   $ mkdir build
27   $ cd build
28   $ cmake ../
29   $ make
30
31 After that the example programs can be found in the +bin/+ subdirectory.
32
33 === Debug builds
34
35 The suggested way to hack on the project is:
36
37   $ mkdir build
38   $ cd build
39   $ cmake -D CMAKE_BUILD_TYPE=debug -D STRICT_COMPILATION_CHECKS=ON ../
40   $ make
41
42 If you want to check the code with the ''sparse'' static analysis tool you
43 can run:
44
45   $ mkdir build
46   $ cd build
47   $ cmake -D CMAKE_C_COMPILER=cgcc ../
48   $ make
49
50 === Cross Builds
51
52 If you want to build for MS Windows:
53
54   $ sudo aptitude install mingw-w64
55   $ mkdir build
56   $ cd build
57   $ wget -nv http://sourceforge.net/projects/libusbx/files/releases/1.0.11/Windows/libusbx-1.0.11-win.7z
58   $ 7z -olibusbx-1.0.11-win x libusbx-1.0.11-win.7z
59   $ wget -nv http://win32.libav.org/win32/libav-win32-20120521.7z
60   $ 7z x libav-win32-20120521.7z
61   $ cmake  \
62           -D GNU_HOST=i686-w64-mingw32 \
63           -D CMAKE_TOOLCHAIN_FILE=../cmake_modules/mingw_cross_toolchain.cmake \
64           -D CMAKE_INSTALL_PREFIX=libam7xxx-win/ \
65           -D LIBUSB_1_INCLUDE_DIR=libusbx-1.0.11-win/include/libusbx-1.0 \
66           -D LIBUSB_1_LIBRARY=libusbx-1.0.11-win/MinGW32/dll/libusb-1.0.dll \
67           -D FFMPEG_ROOT=$(pwd)/libav-win32-20120521/usr \
68           ../
69   $ make
70
71 After that you will find libam7xxx.dll in lib/ and picoproj.exe in the bin/
72 directory.
73
74 === Valgrind
75
76 You can run the test program under the http://valgrind.org/[valgrind]
77 dynamic analyzer by using a command like:
78
79   $ valgrind --leak-check=full --show-reachable=yes --track-origins=yes \
80     ./bin/picoproj -W 800 -H 480 -f my_image.jpg