Compiling and installing OwlPS = Basics = It is planned to use the ``autotools`` in a near future, but for now, OwlPS uses a simple set of GNU makefiles to compile and install the various modules. The top-level makefile will call ``make`` into the subdirectories for all the modules. At any level, you can type: ``` make help to see the usable targets and requirements to compile. Once you have all the requirements, the easy way is to just call ``make`` from the top-level directory, to build all the modules. = Compiling = You can choose the compiler to use by setting the CC variable when calling ``make``, for example: make CC=tcc By default, ``clang`` will be used for C modules, or ``colorgcc`` if ``clang`` is not installed. If neither ``clang`` or ``colorgcc`` is installed, CC is left to the ``make`` default. For OwlPS Positioner (C++), ``colorgcc`` is used, or the default CC if it is not installed. Please keep in mind that this module requires GCC 4.4 or later. = Compiling on BSD systems = Remember to use ``gmake`` instead of ``make``. From the top-level, you will need to set the MAKE variable, for example: ``` gmake MAKE=gmake OwlPS Listener will not compile since it still contains some Linux-specific code. You may want to comment-out the related lines of the top-level makefile. You might also need to set some variables, for example CC to force a specific GCC version to be used. = Compiling for OpenWrt = == The OpenWrt toolchain == We strongly advise that you download the full OpenWrt source tree instead of just the pre-compiled SDK, because it will allow you to easily add the components needed by the OwlPS modules you want to build. The OpenWrt documentation will help you with that: - http://wiki.openwrt.org/doc/howto/buildroot.exigence - http://wiki.openwrt.org/doc/howto/build In the configuration (``make menuconfig``), you have to: + Choose the OpenWrt //Target System// (and possibly //Subtarget//). + Select the components needed to build (press the key to have a //M// or a //*//). For example: - in the //Libraries// menu, select //boost-program_options//, //confuse// and //libiw//; - in the //Base system// menu, //libpthread//, //librt// and //libstdcpp// should now be automatically selected. == Make options == To compile for OpenWrt, you need to set the ``OPENWRT_VERSION`` variable when calling make, for example: ``` make OPENWRT_VERSION=12.09 You can also specify OPENWRT_ROOT and OPENWRT_TARGET: - OPENWRT_ROOT defines the path to the base directory in which the OpenWrt stuff is (default: $HOME/openwrt). - OPENWRT_TARGET is the name of the OpenWrt target to build for (default: atheros). The toolchain is assumed to be under the ``$OPENWRT_ROOT/$OPENWRT_TARGET/$OPENWRT_VERSION`` directory. For maintainability's sake, we don't handle changes of version of the toolchain's tools, so you have to create symbolic links under this directory (change the ``*`` with the relevant version numbers and all): - ``target_uClibc`` pointing on ``staging_dir/target-$ARCH_*_uClibc-*`` - ``toolchain_gcc_uClibc`` pointing on ``staging_dir/toolchain-$ARCH_*_gcc-*_uClibc-*`` It might be easier to install your OpenWrt buildroot in a separate directory, and just use symbolic links to point to the relevant version (cf. example below). == Example of OpenWrt set-up == We assume here that you want to build for the last OpenWrt development version (//trunk//), for the //ar71xx// target, and that the OpenWrt material is in the ``/opt/openwrt`` directory. You will compile with the following command line: ``` make OPENWRT_VERSION=trunk OPENWRT_TARGET=ar71xx OPENWRT_ROOT=/opt/openwrt We also assume your trunk OpenWrt source tree is in the ``/opt/openwrt/trunk`` directory. For this to work, you will first create the ``/opt/openwrt/ar71xx/trunk`` directory, and link the toolchain's directories from it. As of writing, the following commands will do what you need: ``` mkdir -p /opt/openwrt/ar71xx/trunk cd /opt/openwrt/ar71xx/trunk ln -s ../../trunk/staging_dir ln -s staging_dir/target-mips_r2_uClibc-0.9.33.2 target_uClibc ln -s staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2 \ toolchain_gcc_uClibc ``` Of course, you will have to update the ``target_uClibc`` and ``toolchain_gcc_uClibc`` symbolic links from time to time, as the tools' version numbers change in trunk. = Installing = At any level, you can install what is installable by typing, as ``root``: ``` make install