CMakeLists.txt: use GNUInstallDirs
[libam7xxx.git] / HACKING.asciidoc
index 5b2937d..8c8a3ce 100644 (file)
@@ -5,13 +5,42 @@
 libam7xxx uses the linux kernel coding style:
 http://kernel.org/doc/Documentation/CodingStyle
 
+=== Getting and compiling libam7xxx
+
+libam7xxx depends on 'libusb-1.0' and optionally on 'libav' or 'ffmpeg' (3.1+)
+for its example programs, the build system used is 'cmake'.
+
+On a Debian based system, the dependencies can be installed with this command:
+
+  $ sudo aptitude install cmake \
+                          libusb-1.0-0-dev \
+                          libavformat-dev \
+                          libavcodec-dev \
+                          libavdevice-dev \
+                          libswscale-dev \
+                          libxcb1-dev
+
+With libav/ffmpeg version previous than 0.9 this patch is needed:
+https://git.ao2.it/libam7xxx.git/blob/6d2d8613958e1f0ef011e9d848426086caafe9db:/debian/patches/0002-Revert-am7xxx-play-switch-to-avcodec_encode_video2.patch
+
+The library and the example programs can be compiled following these steps:
+
+  $ git clone git://git.ao2.it/libam7xxx.git
+  $ cd libam7xxx
+  $ mkdir build
+  $ cd build
+  $ cmake ../
+  $ make
+
+After that the example programs can be found in the +bin/+ subdirectory.
+
 === Debug builds
 
 The suggested way to hack on the project is:
 
   $ mkdir build
   $ cd build
-  $ cmake ../ -DCMAKE_BUILD_TYPE=debug
+  $ cmake -D CMAKE_BUILD_TYPE=debug -D STRICT_COMPILATION_CHECKS=ON ../
   $ make
 
 If you want to check the code with the ''sparse'' static analysis tool you
@@ -19,6 +48,49 @@ can run:
 
   $ mkdir build
   $ cd build
-  $ cmake ../ -DCMAKE_C_COMPILER=cgcc
+  $ cmake -D CMAKE_C_COMPILER=cgcc ../
   $ make
 
+And for a pre-release check with a different compiler, which never hurts:
+
+  $ mkdir build
+  $ cd build
+  $ cmake -D CMAKE_C_COMPILER=clang -D CMAKE_BUILD_TYPE=debug -D STRICT_COMPILATION_CHECKS=ON ../
+  $ make
+
+=== Cross Builds
+
+If you want to build for MS Windows:
+
+  $ sudo aptitude install mingw-w64
+  $ mkdir build
+  $ cd build
+  $ wget -nv https://github.com/libusb/libusb/releases/download/v1.0.21/libusb-1.0.21.7z
+  $ 7z -olibusb-1.0.21 x libusb-1.0.21.7z
+  $ wget -nv https://ffmpeg.zeranoe.com/builds/win32/dev/ffmpeg-3.4.2-win32-dev.zip
+  $ unzip ffmpeg-3.4.2-win32-dev.zip
+  $ cmake  \
+          -D GNU_HOST=i686-w64-mingw32 \
+          -D CMAKE_TOOLCHAIN_FILE=../cmake_modules/mingw_cross_toolchain.cmake \
+          -D CMAKE_INSTALL_PREFIX=libam7xxx-win/ \
+          -D LIBUSB_1_INCLUDE_DIR=libusb-1.0.21/include/libusb-1.0 \
+          -D LIBUSB_1_LIBRARY=libusb-1.0.21/MinGW32/dll/libusb-1.0.dll \
+          -D FFMPEG_ROOT=$(pwd)/ffmpeg-3.4.2-win32-dev \
+          ../
+  $ make
+
+After that you will find libam7xxx.dll in lib/ and picoproj.exe in the bin/
+directory.
+
+=== Valgrind
+
+You can run the test program under the http://valgrind.org/[valgrind]
+dynamic analyzer by using a command like:
+
+  $ valgrind --leak-check=full --show-reachable=yes --track-origins=yes \
+    ./bin/picoproj -W 800 -H 480 -f my_image.jpg
+
+or, for am7xxx-play:
+
+  $ valgrind --leak-check=full --show-reachable=yes --track-origins=yes \
+    ./bin/am7xxx-play -f x11grab -i :0