blob: 7f291d01e318003bb284c2c4689cd2295b8cc6ce [file] [log] [blame]
Alexander Afanasyevabaab522014-04-30 20:42:11 -07001.. _Getting Started with ndn-cxx:
2
Alexander Afanasyevc5452c52014-04-29 17:21:51 -07003Getting started with ndn-cxx
4============================
5
6Supported platforms
7-------------------
8
9ndn-cxx uses continuous integration and has been tested on the following
10platforms:
11
12- Ubuntu 12.04 (64-bit and 32-bit)
Ivan Yeoba1a4a92015-01-11 00:45:57 -080013- Ubuntu 14.04 (64-bit and 32-bit)
14- Ubuntu 14.10 (64-bit and 32-bit)
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070015- OS X 10.8
16- OS X 10.9
Ivan Yeoba1a4a92015-01-11 00:45:57 -080017- OS X 10.10
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070018
19ndn-cxx is known to work on the following platforms, although they are not officially
20supported:
21
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070022- Fedora >= 20
Ivan Yeoba1a4a92015-01-11 00:45:57 -080023- CentOS >= 6.2
24- Gentoo Linux
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070025- FreeBSD >= 10.0
Ivan Yeoba1a4a92015-01-11 00:45:57 -080026- Raspbian >= 3.12
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070027
28Prerequisites
29-------------
30
31Required:
32~~~~~~~~~
33
34- ``python`` >= 2.6
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070035- ``libsqlite3``
36- ``libcrypto++``
37- ``pkg-config``
38- Boost libraries >= 1.48
39- OSX Security framework (on OSX platform only)
40
41Following are the detailed steps for each platform to install the compiler, all necessary
42development tools and libraries, and ndn-cxx prerequisites.
43
44- OS X
45
46 Install Xcode. In Xcode Preferences > Downloads, install "Command
47 Line Tools".
48
49 If using MacPorts, dependencies can be installed using the following
50 commands::
51
52 sudo port install pkgconfig boost sqlite3 libcryptopp
53
Junxiao Shi190bee22015-02-14 19:21:36 -070054 .. note::
55
56 If a major OS X system upgrade is performed after installing dependencies with MacPorts,
57 remember to `reinstall all ports <https://trac.macports.org/wiki/Migration>`__.
58
Ivan Yeoba1a4a92015-01-11 00:45:57 -080059- Ubuntu
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070060
61 In a terminal, enter::
62
63 sudo apt-get install build-essential
Alexander Afanasyev01515792014-12-16 14:20:01 -080064 sudo apt-get install libsqlite3-dev libcrypto++-dev
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070065
66 # For Ubuntu 12.04
67 sudo apt-get install libboost1.48-all-dev
68
Ivan Yeoba1a4a92015-01-11 00:45:57 -080069 # For all other Ubuntu versions
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070070 sudo apt-get install libboost-all-dev
71
Ivan Yeoba1a4a92015-01-11 00:45:57 -080072- Fedora
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070073
74 In a terminal, enter::
75
76 sudo yum install gcc-g++ git
Alexander Afanasyev01515792014-12-16 14:20:01 -080077 sudo yum install sqlite-devel cryptopp-devel boost-devel
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070078
79Optional:
80~~~~~~~~~
81
82To build tutorials, manpages, and API documentation the following
83dependencies need to be installed:
84
85- ``doxygen``
86- ``graphviz``
Alexander Afanasyev9b0e1142014-05-08 00:17:34 -070087- ``python-sphinx`` and sphinx extensions ``sphinxcontrib-doxylink``,
88 ``sphinxcontrib-googleanalytics``
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070089
Alexander Afanasyev9b0e1142014-05-08 00:17:34 -070090The following lists steps for common platforms to install these prerequisites:
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070091
Ivan Yeoba1a4a92015-01-11 00:45:57 -080092- On OS X with MacPorts::
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070093
94 sudo port install doxygen graphviz py27-sphinx sphinx_select
95 sudo port select sphinx py27-sphinx
96
Alexander Afanasyev9b0e1142014-05-08 00:17:34 -070097 # Install sphinx extensions
98 sudo port install py27-pip
99 sudo port select pip pip27
100 sudo pip install sphinxcontrib-doxylink sphinxcontrib-googleanalytics
101
Ivan Yeoba1a4a92015-01-11 00:45:57 -0800102- On Ubuntu::
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700103
Alexander Afanasyev9b0e1142014-05-08 00:17:34 -0700104 sudo apt-get install doxygen graphviz python-sphinx python-pip
105 sudo pip install sphinxcontrib-doxylink sphinxcontrib-googleanalytics
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700106
Ivan Yeoba1a4a92015-01-11 00:45:57 -0800107- On Fedora::
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700108
Alexander Afanasyev5946ed12015-01-19 23:41:39 -0800109 sudo yum install doxygen graphviz python-sphinx
Alexander Afanasyev9b0e1142014-05-08 00:17:34 -0700110 sudo pip install sphinxcontrib-doxylink sphinxcontrib-googleanalytics
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700111
112Build
113-----
114
115(These are instructions to build ndn-cxx. To do development of ndn-cxx
116code and update the build system, see Development.)
117
118To build in a terminal, change directory to the ndn-cxx root. Enter:
119
120::
121
122 ./waf configure
123 ./waf
124 sudo ./waf install
125
126This builds and installs the following items:
127
128- ``<LIBPATH>/libndn-cxx.a``: static NDN C++ library
129- ``<LIBPATH>/pkgconfig/libndn-cxx.pc``: pkgconfig file storing all
130 neccessary flags to build against the library. For example, if
131 pkgconfig or pkgconf package is installed and ``PKG_CONFIG_PATH`` is
132 configured properly (or ``<LIBPATH>/pkgconfig`` is a default path),
133 ``pkgconfig --libs --clflags libndn-cxx`` will return all necessary
134 compile and link flags for the library.
135- ``<BINPATH>/tlvdump``: a simple tool to dump contents of
136 TLV-formatted data
137- ``<BINPATH>/ndncatchunks3``: a simplified equivalent to ndncatchunks2
138 in NDNx package
139- ``<BINPATH>/ndnputchunks3``: a simplified equivalent to ndnputchunks2
140 in NDNx package
141- ``<BINPATH>/ndnsec``: tool to manage NDN keys and certificates
142- ``<BINPATH>/ndnsec-*``: convenience scripts for ``ndnsec`` tools
143
144If configured with tests: ``./waf configure --with-tests``), the above
145commands will also produce:
146
147- ``build/unit-tests``: A unit test binary for the library
148
Junxiao Shie04bd832014-11-29 23:02:38 -07001491.5GB available memory per CPU core is necessary for efficient compilation.
150On a multi-core machine with less than 1.5GB available memory per CPU core,
151limit the objects being compiled in parallel with ``./waf -jN`` where N is the amount
152of available memory divided by 1.5GB (eg. ``./waf -j1`` for 1.5GB memory),
153which could usually avoid memory thrashing and result in faster compilation.
154
Alexander Afanasyevc8bcd452014-05-12 17:58:47 -0700155Build with examples
156-------------------
157
158By default, examples in ``examples/`` are not build. To enable them, use
159``--with-examples`` configure option:
160
161::
162
163 ./waf configure --with-examples
164 ./waf
165
166To run examples:
167
168::
169
170 # trivial producer app
171 ./build/examples/producer
172
173 # trivial consumer app
174 ./build/examples/consumer
175
176 # trivial consumer app with timers
177 ./build/examples/consumer-with-timer
178
179If you want to test out a sample application, just create a ``.cpp`` file in ``examples/``
180folder and it will be compiled on the next run on ``./waf``. For example:
181
182::
183
184 cp examples/consumer.cpp examples/my-new-consumer-app.cpp
185 ./waf
186 ./build/examples/my-new-consumer-app
187
188
Alexander Afanasyev9b0e1142014-05-08 00:17:34 -0700189Debug symbols
190~~~~~~~~~~~~~
191
192The default compiler flags enable debug symbols to be included in binaries (i.e., ``-g``
193flag for ``./waf configure`` and ``-g3`` for ``./waf configure --debug``). This
194potentially allows more meaningful debugging information if your application crashes.
195
196If it is undesirable, default flags can be easily overridden:
197
198::
199
200 CXXFLAGS="-O2" ./waf configure --prefix=/usr --sysconfdir=/etc
201 ./waf
202 sudo ./waf install
203
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700204Documentation
205-------------
206
207ndn-cxx tutorials and API documentation can be built using the following
208commands:
209
210::
211
212 # Full set of documentation (tutorials + API) in build/docs
213 ./waf docs
214
215 # Only tutorials in `build/docs`
216 ./waf sphinx
217
218 # Only API docs in `build/docs/doxygen`
219 ./waf doxgyen
220
221Manpages are automatically created and installed during the normal build
222process (e.g., during ``./waf`` and ``./waf install``), if
223``python-sphinx`` module is detected during ``./waf configure`` stage.
224By default, manpages are installed into ``${PREFIX}/share/man`` (where
225default value for ``PREFIX`` is ``/usr/local``). This location can be
226changed during ``./waf configure`` stage using ``--prefix``,
227``--datarootdir``, or ``--mandir`` options.
228
229For more details, refer to ``./waf --help``.
230
231Development Build
232-----------------
233
234The following is the suggested configure commands for development build.
235
236::
237
238 ./waf configure --debug --with-tests
239 ./waf
240 sudo ./waf install
241
242In the development build all compiler optimizations are disabled by
243default and all warnings are treated as error. The default behavior can
244be overridden by setting ``CXXFLAGS`` environment variable before
245running ``./waf configure``:
246
247::
248
249 CXXFLAGS="-O1 -g3" ./waf configure --debug --with-tests
250 ...
Alexander Afanasyev5946ed12015-01-19 23:41:39 -0800251
252Customize Compiler
253------------------
254
255To customize compiler, set ``CXX`` environment variable to point to compiler binary and, in
256some case, specify type of the compiler using ``--check-cxx-compiler``. For example, when
257using clang compiler on Linux system, use the following:
258
259::
260
261 CXX=clang++ ./waf configure --check-cxx-compiler=clang++