116 lines
3.8 KiB
ReStructuredText
116 lines
3.8 KiB
ReStructuredText
|
|
.. _ARM-Linux-cross-compile:
|
|
|
|
Cross compilation for ARM based Linux systems
|
|
*********************************************
|
|
|
|
This steps are tested on Ubuntu Linux 12.04, but should work for other Linux distributions.
|
|
I case of other distributions package names and names of cross compilation tools may differ.
|
|
There are several popular EABI versions that are used on ARM platform. This tutorial is
|
|
written for *gnueabi* and *gnueabihf*, but other variants should work with minimal changes.
|
|
|
|
|
|
Prerequisites
|
|
=============
|
|
|
|
* Host computer with Linux;
|
|
* Git;
|
|
* CMake 2.6 or higher;
|
|
* Cross compilation tools for ARM: gcc, libstc++, etc. Depending on target platform you need
|
|
to choose *gnueabi* or *gnueabihf* tools.
|
|
Install command for *gnueabi*:
|
|
|
|
.. code-block:: bash
|
|
|
|
sudo apt-get install gcc-arm-linux-gnueabi
|
|
|
|
Install command for *gnueabihf*:
|
|
|
|
.. code-block:: bash
|
|
|
|
sudo apt-get install gcc-arm-linux-gnueabihf
|
|
|
|
* pkgconfig;
|
|
* Python 2.6 for host system;
|
|
* [optional] ffmpeg or libav development packages for armeabi(hf): libavcodec-dev, libavformat-dev, libswscale-dev;
|
|
* [optional] GTK+2.x or higher, including headers (libgtk2.0-dev) for armeabi(hf);
|
|
* [optional] libdc1394 2.x;
|
|
* [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev for armeabi(hf).
|
|
|
|
|
|
Getting OpenCV Source Code
|
|
==========================
|
|
|
|
You can use the latest stable OpenCV version available in *sourceforge* or you can grab the latest
|
|
snapshot from our `Git repository <https://github.com/Itseez/opencv.git>`_.
|
|
|
|
|
|
Getting the Latest Stable OpenCV Version
|
|
----------------------------------------
|
|
|
|
* Go to our `page on Sourceforge <http://sourceforge.net/projects/opencvlibrary>`_;
|
|
|
|
* Download the source tarball and unpack it.
|
|
|
|
|
|
Getting the Cutting-edge OpenCV from the Git Repository
|
|
-------------------------------------------------------
|
|
|
|
Launch Git client and clone `OpenCV repository <http://github.com/itseez/opencv>`_
|
|
|
|
In Linux it can be achieved with the following command in Terminal:
|
|
|
|
.. code-block:: bash
|
|
|
|
cd ~/<my_working _directory>
|
|
git clone https://github.com/Itseez/opencv.git
|
|
|
|
|
|
Building OpenCV
|
|
===============
|
|
|
|
#. Create a build directory, make it current and run the following command:
|
|
|
|
.. code-block:: bash
|
|
|
|
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>
|
|
|
|
Toolchain uses *gnueabihf* EABI convention by default. Add ``-DSOFTFP=ON`` cmake argument to switch on softfp compiler.
|
|
|
|
.. code-block:: bash
|
|
|
|
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>
|
|
|
|
For example:
|
|
|
|
.. code-block:: bash
|
|
|
|
cd ~/opencv/platforms/linux
|
|
mkdir -p build_hardfp
|
|
cd build_hardfp
|
|
|
|
cmake -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake ../../..
|
|
|
|
#. Run make in build (<cmake_binary_dir>) directory:
|
|
|
|
.. code-block:: bash
|
|
|
|
make
|
|
|
|
.. note::
|
|
|
|
Optionally you can strip symbols info from the created library via install/strip make target.
|
|
This option produces smaller binary (~ twice smaller) but makes further debugging harder.
|
|
|
|
Enable hardware optimizations
|
|
-----------------------------
|
|
|
|
Depending on target platform architecture different instruction sets can be used. By default
|
|
compiler generates code for armv5l without VFPv3 and NEON extensions. Add ``-DENABLE_VFPV3=ON``
|
|
to cmake command line to enable code generation for VFPv3 and ``-DENABLE_NEON=ON`` for using
|
|
NEON SIMD extensions.
|
|
|
|
TBB is supported on multi core ARM SoCs also.
|
|
Add ``-DWITH_TBB=ON`` and ``-DBUILD_TBB=ON`` to enable it. Cmake scripts download TBB sources
|
|
from official project site `<http://threadingbuildingblocks.org/>`_ and build it.
|