1 Cross compilation for ARM based Linux systems {#tutorial_arm_crosscompile_with_cmake} 2 ============================================= 3 4 This steps are tested on Ubuntu Linux 12.04, but should work for other Linux distributions. I case 5 of other distributions package names and names of cross compilation tools may differ. There are 6 several popular EABI versions that are used on ARM platform. This tutorial is written for *gnueabi* 7 and *gnueabihf*, but other variants should work with minimal changes. 8 9 Prerequisites 10 ------------- 11 12 - Host computer with Linux; 13 - Git; 14 - CMake 2.6 or higher; 15 - Cross compilation tools for ARM: gcc, libstc++, etc. Depending on target platform you need to 16 choose *gnueabi* or *gnueabihf* tools. Install command for *gnueabi*: 17 @code{.bash} 18 sudo apt-get install gcc-arm-linux-gnueabi 19 @endcode 20 Install command for *gnueabihf*: 21 @code{.bash} 22 sudo apt-get install gcc-arm-linux-gnueabihf 23 @endcode 24 - pkgconfig; 25 - Python 2.6 for host system; 26 - [optional] ffmpeg or libav development packages for armeabi(hf): libavcodec-dev, 27 libavformat-dev, libswscale-dev; 28 - [optional] GTK+2.x or higher, including headers (libgtk2.0-dev) for armeabi(hf); 29 - [optional] libdc1394 2.x; 30 - [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev for armeabi(hf). 31 32 Getting OpenCV Source Code 33 -------------------------- 34 35 You can use the latest stable OpenCV version available in *sourceforge* or you can grab the latest 36 snapshot from our [Git repository](https://github.com/Itseez/opencv.git). 37 38 ### Getting the Latest Stable OpenCV Version 39 40 - Go to our [page on Sourceforge](http://sourceforge.net/projects/opencvlibrary); 41 - Download the source tarball and unpack it. 42 43 ### Getting the Cutting-edge OpenCV from the Git Repository 44 45 Launch Git client and clone [OpenCV repository](http://github.com/itseez/opencv) 46 47 In Linux it can be achieved with the following command in Terminal: 48 @code{.bash} 49 cd ~/<my_working _directory> 50 git clone https://github.com/Itseez/opencv.git 51 @endcode 52 53 Building OpenCV 54 --------------- 55 56 -# Create a build directory, make it current and run the following command: 57 @code{.bash} 58 cmake [<some optional parameters>] -DCMAKE_TOOLCHAIN_FILE=<path to the OpenCV source directory>/platforms/linux/arm-gnueabi.toolchain.cmake <path to the OpenCV source directory> 59 @endcode 60 Toolchain uses *gnueabihf* EABI convention by default. Add -DSOFTFP=ON cmake argument to switch 61 on softfp compiler. 62 @code{.bash} 63 cmake [<some optional parameters>] -DSOFTFP=ON -DCMAKE_TOOLCHAIN_FILE=<path to the OpenCV source directory>/platforms/linux/arm-gnueabi.toolchain.cmake <path to the OpenCV source directory> 64 @endcode 65 For example: 66 @code{.bash} 67 cd ~/opencv/platforms/linux 68 mkdir -p build_hardfp 69 cd build_hardfp 70 71 cmake -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake ../../.. 72 @endcode 73 74 -# Run make in build (\<cmake_binary_dir\>) directory: 75 @code{.bash} 76 make 77 @endcode 78 79 @note 80 Optionally you can strip symbols info from the created library via install/strip make target. 81 This option produces smaller binary (\~ twice smaller) but makes further debugging harder. 82 83 ### Enable hardware optimizations 84 85 Depending on target platform architecture different instruction sets can be used. By default 86 compiler generates code for armv5l without VFPv3 and NEON extensions. Add -DENABLE_VFPV3=ON to 87 cmake command line to enable code generation for VFPv3 and -DENABLE_NEON=ON for using NEON SIMD 88 extensions. 89 90 TBB is supported on multi core ARM SoCs also. Add -DWITH_TBB=ON and -DBUILD_TBB=ON to enable it. 91 Cmake scripts download TBB sources from official project site 92 <http://threadingbuildingblocks.org/> and build it. 93