blob: 755da6f6f624710e69fc4555816de88dc550ddfc [file] [log] [blame]
Alexander Afanasyevc5452c52014-04-29 17:21:51 -07001Getting started with ndn-cxx
2============================
3
4Supported platforms
5-------------------
6
Davide Pesaventoab7300b2020-04-09 00:51:41 -04007ndn-cxx is built against a continuous integration system and has been tested on the
8following platforms:
Alexander Afanasyevc5452c52014-04-29 17:21:51 -07009
Davide Pesavento762548b2023-03-05 11:02:02 -050010- Ubuntu 22.04 (jammy)
Davide Pesavento2be774b2024-06-07 17:25:31 -040011- Ubuntu 24.04 (noble)
Davide Pesavento762548b2023-03-05 11:02:02 -050012- Debian 11 (bullseye)
Davide Pesaventoe1005da2023-10-31 20:35:02 -040013- Debian 12 (bookworm)
Davide Pesaventof6625002022-07-31 17:15:02 -040014- CentOS Stream 9
Davide Pesaventoe913e3a2024-12-10 20:25:04 -050015- macOS 13 / 14 / 15
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070016
Davide Pesavento762548b2023-03-05 11:02:02 -050017ndn-cxx should also work on the following platforms, although they are not officially
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070018supported:
19
Davide Pesavento762548b2023-03-05 11:02:02 -050020- Any other recent version of Ubuntu not listed above
Davide Pesaventoe913e3a2024-12-10 20:25:04 -050021- Fedora >= 34
22- Alpine >= 3.14
Davide Pesaventoe1005da2023-10-31 20:35:02 -040023- Any version of Raspberry Pi OS based on Debian 11 (bullseye) or later
Davide Pesaventoe913e3a2024-12-10 20:25:04 -050024- macOS >= 11
Davide Pesaventoea5ce492022-09-30 20:25:25 -040025- FreeBSD >= 12.2
Davide Pesavento534b8412018-12-08 19:19:09 -050026
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070027Prerequisites
28-------------
29
Davide Pesaventoab7300b2020-04-09 00:51:41 -040030Required
31~~~~~~~~
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070032
Davide Pesaventoe913e3a2024-12-10 20:25:04 -050033- GCC >= 10.2 or clang >= 10.0 (if you are on Linux or FreeBSD)
Davide Pesavento2be774b2024-06-07 17:25:31 -040034- Xcode >= 13.0 or corresponding version of Command Line Tools (if you are on macOS)
Davide Pesavento550d8c92023-11-05 01:30:01 -040035- Boost >= 1.71.0
Davide Pesaventof6625002022-07-31 17:15:02 -040036- OpenSSL >= 1.1.1
Davide Pesavento8a8afa22025-03-12 17:42:20 -040037- SQLite >= 3.31
38- pkgconf >= 1.6
39- Python >= 3.8
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070040
Davide Pesaventoab7300b2020-04-09 00:51:41 -040041To build ndn-cxx from source, one must first install a C++ compiler and all necessary
42development tools and libraries:
Davide Pesaventod776a932020-03-20 18:42:36 -040043
Davide Pesavento487cc9a2025-05-01 23:32:05 -040044- On **Debian** and **Ubuntu**, run in a terminal:
Davide Pesaventod776a932020-03-20 18:42:36 -040045
Davide Pesavento487cc9a2025-05-01 23:32:05 -040046 .. code-block:: shell
Davide Pesaventod776a932020-03-20 18:42:36 -040047
Davide Pesavento487cc9a2025-05-01 23:32:05 -040048 sudo apt install build-essential libboost-all-dev libssl-dev libsqlite3-dev pkgconf python3
Davide Pesaventod776a932020-03-20 18:42:36 -040049
Davide Pesavento487cc9a2025-05-01 23:32:05 -040050- On **CentOS** and **Fedora**, run in a terminal:
Davide Pesaventod776a932020-03-20 18:42:36 -040051
Davide Pesavento487cc9a2025-05-01 23:32:05 -040052 .. code-block:: shell
Davide Pesaventod776a932020-03-20 18:42:36 -040053
Davide Pesavento487cc9a2025-05-01 23:32:05 -040054 sudo dnf install gcc-c++ boost-devel openssl-devel sqlite-devel pkgconf python3
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070055
Davide Pesavento933a5672020-07-03 22:32:43 -040056- On **macOS**
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070057
Davide Pesavento487cc9a2025-05-01 23:32:05 -040058 * Install either Xcode (from the App Store) or the Command Line Tools
59 (with ``xcode-select --install``)
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070060
Davide Pesavento487cc9a2025-05-01 23:32:05 -040061 * If using Homebrew (recommended), enter the following in a terminal:
Davide Pesaventocad94b02021-04-09 21:23:03 -040062
Davide Pesavento487cc9a2025-05-01 23:32:05 -040063 .. code-block:: shell
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070064
Davide Pesavento487cc9a2025-05-01 23:32:05 -040065 brew install boost openssl pkgconf
Alexander Afanasyev67cb75c2016-06-15 12:34:58 -070066
Davide Pesavento487cc9a2025-05-01 23:32:05 -040067- On **FreeBSD**, run in a terminal:
Alexander Afanasyev67cb75c2016-06-15 12:34:58 -070068
Davide Pesavento487cc9a2025-05-01 23:32:05 -040069 .. code-block:: shell
Alexander Afanasyev67cb75c2016-06-15 12:34:58 -070070
Davide Pesavento487cc9a2025-05-01 23:32:05 -040071 sudo pkg install boost-libs openssl sqlite3 pkgconf python3
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070072
Davide Pesaventoab7300b2020-04-09 00:51:41 -040073Optional
74~~~~~~~~
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070075
Davide Pesavento01cea502021-07-31 19:25:42 -040076To build tutorials, man pages, and API documentation the following additional dependencies
Davide Pesaventoab7300b2020-04-09 00:51:41 -040077need to be installed:
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070078
Davide Pesaventof6625002022-07-31 17:15:02 -040079- doxygen
80- graphviz
Davide Pesavento487cc9a2025-05-01 23:32:05 -040081- `sphinx <https://www.sphinx-doc.org/>`__
82- `sphinxcontrib-doxylink <https://github.com/sphinx-contrib/doxylink>`__
83- `furo <https://pradyunsg.me/furo/>`__
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070084
Davide Pesaventod776a932020-03-20 18:42:36 -040085The following lists the steps to install these prerequisites on various common platforms.
Alexander Afanasyevc5452c52014-04-29 17:21:51 -070086
Davide Pesavento487cc9a2025-05-01 23:32:05 -040087.. tip::
Davide Pesavento3ffae262021-08-27 18:48:22 -040088 On Linux, you may need to add ``$HOME/.local/bin`` to the ``PATH`` environment variable
89 for your user, for example:
90
Davide Pesavento487cc9a2025-05-01 23:32:05 -040091 .. code-block:: shell
Davide Pesavento3ffae262021-08-27 18:48:22 -040092
Davide Pesavento487cc9a2025-05-01 23:32:05 -040093 export PATH="${HOME}/.local/bin${PATH:+:}${PATH}"
Davide Pesavento3ffae262021-08-27 18:48:22 -040094
Davide Pesavento87208f92022-08-30 19:51:23 -040095- On **Debian** and **Ubuntu**:
Davide Pesavento933a5672020-07-03 22:32:43 -040096
Davide Pesavento487cc9a2025-05-01 23:32:05 -040097 .. code-block:: shell
Alexander Afanasyev9b0e1142014-05-08 00:17:34 -070098
Davide Pesavento534b8412018-12-08 19:19:09 -050099 sudo apt install doxygen graphviz python3-pip
Davide Pesaventoee3ebeb2025-03-21 22:08:02 -0400100 python3 -m pip install --user -r docs/requirements.txt
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700101
Davide Pesavento933a5672020-07-03 22:32:43 -0400102- On **CentOS** and **Fedora**:
103
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400104 .. code-block:: shell
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700105
Davide Pesavento2349e282020-03-24 14:28:03 -0400106 sudo dnf install doxygen graphviz python3-pip
Davide Pesaventoee3ebeb2025-03-21 22:08:02 -0400107 python3 -m pip install --user -r docs/requirements.txt
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700108
Davide Pesavento933a5672020-07-03 22:32:43 -0400109- On **macOS**:
110
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400111 .. code-block:: shell
Davide Pesaventod776a932020-03-20 18:42:36 -0400112
113 brew install doxygen graphviz
Davide Pesaventoee3ebeb2025-03-21 22:08:02 -0400114 python3 -m pip install --user -r docs/requirements.txt
Davide Pesaventod776a932020-03-20 18:42:36 -0400115
Davide Pesavento933a5672020-07-03 22:32:43 -0400116- On **FreeBSD**:
117
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400118 .. code-block:: shell
Davide Pesavento534b8412018-12-08 19:19:09 -0500119
Davide Pesaventoea5ce492022-09-30 20:25:25 -0400120 sudo pkg install doxygen graphviz py39-sphinx
Davide Pesavento534b8412018-12-08 19:19:09 -0500121
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400122Building
123--------
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700124
Davide Pesavento534b8412018-12-08 19:19:09 -0500125.. note::
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400126 These are the instructions for a regular build of ndn-cxx (release mode). If you are planning
127 to develop or modify the ndn-cxx code itself, you should do a :ref:`Development build`.
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700128
Davide Pesavento933a5672020-07-03 22:32:43 -0400129To build in a terminal, change directory to the ndn-cxx root, then enter:
130
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400131.. code-block:: shell
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700132
Davide Pesaventofbca6112022-07-03 16:31:04 -0400133 ./waf configure
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700134 ./waf
135 sudo ./waf install
136
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400137By default, only the shared variant of the ndn-cxx library will be built. To build the
Davide Pesavento933a5672020-07-03 22:32:43 -0400138static library, pass ``--enable-static`` to the ``./waf configure`` command:
139
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400140.. code-block:: shell
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700141
Spyridon Mastorakis5ebfda62015-07-21 20:57:40 -0700142 ./waf configure --enable-static
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700143
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400144To disable the build of the shared library and build only the static library, use the
145additional ``--disable-shared`` option. Note that at least one variant of the library
146needs to be enabled.
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700147
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400148.. code-block:: shell
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700149
Spyridon Mastorakis5ebfda62015-07-21 20:57:40 -0700150 ./waf configure --enable-static --disable-shared
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700151
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400152On Linux, it is necessary to run the following command after the shared library has
Davide Pesavento933a5672020-07-03 22:32:43 -0400153been installed:
154
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400155.. code-block:: shell
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700156
Davide Pesavento534b8412018-12-08 19:19:09 -0500157 sudo ldconfig
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700158
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400159.. tip::
Davide Pesavento4dc4b3c2024-02-05 20:05:54 -0500160 On Linux, when the library is installed in a non-default location (generally, not in
161 ``/usr/lib`` or ``/usr/local/lib``), the following additional actions may be necessary.
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700162
Davide Pesavento4dc4b3c2024-02-05 20:05:54 -0500163 The library installation path should be added to ``/etc/ld.so.conf`` or to
164 ``/etc/ld.so.conf.d/*.conf`` before running ``ldconfig``. For example:
Davide Pesavento933a5672020-07-03 22:32:43 -0400165
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400166 .. code-block:: shell
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700167
Davide Pesavento4dc4b3c2024-02-05 20:05:54 -0500168 echo /usr/local/lib64 | sudo tee /etc/ld.so.conf.d/ndn-cxx.conf
169 sudo ldconfig
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700170
Davide Pesavento534b8412018-12-08 19:19:09 -0500171 Alternatively, the ``LD_LIBRARY_PATH`` environment variable can be set to point to
Davide Pesavento933a5672020-07-03 22:32:43 -0400172 the installation directory of the shared library:
173
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400174 .. code-block:: shell
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700175
Davide Pesavento4dc4b3c2024-02-05 20:05:54 -0500176 export LD_LIBRARY_PATH=/usr/local/lib64
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700177
Davide Pesavento534b8412018-12-08 19:19:09 -0500178The ``./waf install`` command installs the following files:
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700179
Davide Pesavento4dc4b3c2024-02-05 20:05:54 -0500180- ``<LIBDIR>/libndn-cxx.a``: static NDN C++ library (if enabled).
181- ``<LIBDIR>/libndn-cxx.so``, ``<LIBDIR>/libndn-cxx.so.<VERSION>`` (on Linux),
182 ``<LIBDIR>/libndn-cxx.dylib``, ``<LIBDIR>/libndn-cxx.<VERSION>.dylib`` (on macOS):
Davide Pesavento534b8412018-12-08 19:19:09 -0500183 shared NDN C++ library (if enabled).
Davide Pesavento8a8afa22025-03-12 17:42:20 -0400184- ``<LIBDIR>/pkgconfig/libndn-cxx.pc``: pkgconfig file storing all necessary flags
185 to build against the library. For example, if ``pkgconf`` is installed and
186 ``PKG_CONFIG_PATH`` is configured properly (or if ``<LIBDIR>/pkgconfig`` is a default
187 search path), the command ``pkgconf --cflags --libs libndn-cxx`` will return all
Davide Pesavento5afb1fb2024-12-10 15:15:42 -0500188 necessary compile and link flags for the ndn-cxx library.
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400189- ``<BINDIR>/ndnsec``: command-line tool to manage NDN keys and certificates used by
190 ndn-cxx applications.
Davide Pesavento4dc4b3c2024-02-05 20:05:54 -0500191- ``<BINDIR>/ndnsec-*``: convenience aliases for ``ndnsec`` tools.
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700192
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400193If configured with tests (``./waf configure --with-tests``), the above commands
194will also produce:
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700195
Davide Pesavento5afb1fb2024-12-10 15:15:42 -0500196- ``build/unit-tests``: a unit test binary for the library; it will not be installed.
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700197
Davide Pesaventoab7300b2020-04-09 00:51:41 -04001981.5 GB available memory per CPU core is necessary for efficient compilation. On a
199multi-core machine with less than 1.5 GB available memory per CPU core, limit the
200objects being compiled in parallel with ``./waf -jN``, where N is the amount of
201available memory divided by 1.5 GB (e.g., ``./waf -j2`` for 3 GB of memory). This
202should avoid memory thrashing and result in faster compilation.
Junxiao Shie04bd832014-11-29 23:02:38 -0700203
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400204Building with examples
205----------------------
Alexander Afanasyevc8bcd452014-05-12 17:58:47 -0700206
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400207By default, the examples in the ``examples/`` directory will not be built. To enable
Davide Pesavento933a5672020-07-03 22:32:43 -0400208them, pass ``--with-examples`` during the configuration step:
209
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400210.. code-block:: shell
Alexander Afanasyevc8bcd452014-05-12 17:58:47 -0700211
Davide Pesaventofbca6112022-07-03 16:31:04 -0400212 ./waf configure --with-examples
Alexander Afanasyevc8bcd452014-05-12 17:58:47 -0700213 ./waf
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700214 sudo ./waf install
Davide Pesavento2349e282020-03-24 14:28:03 -0400215 sudo ldconfig # on Linux only
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700216
Davide Pesavento933a5672020-07-03 22:32:43 -0400217To run the examples:
218
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400219.. code-block:: shell
Alexander Afanasyevc8bcd452014-05-12 17:58:47 -0700220
221 # trivial producer app
222 ./build/examples/producer
223
224 # trivial consumer app
225 ./build/examples/consumer
226
227 # trivial consumer app with timers
228 ./build/examples/consumer-with-timer
229
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400230If you want to make a new sample application, just create a ``.cpp`` file inside the
Davide Pesavento933a5672020-07-03 22:32:43 -0400231``examples/`` directory and it will be compiled during the next run of ``./waf``:
232
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400233.. code-block:: shell
Alexander Afanasyevc8bcd452014-05-12 17:58:47 -0700234
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400235 cp examples/consumer.cpp examples/my-new-app.cpp
236 ... # edit examples/my-new-app.cpp with your preferred editor
Alexander Afanasyevc8bcd452014-05-12 17:58:47 -0700237 ./waf
Alexander Afanasyev7ed29432015-06-05 18:01:16 -0700238 sudo ./waf install
Davide Pesavento2349e282020-03-24 14:28:03 -0400239 sudo ldconfig # on Linux only
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400240 ./build/examples/my-new-app
Alexander Afanasyevc8bcd452014-05-12 17:58:47 -0700241
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400242Building the documentation
243--------------------------
244
Eric Newberrybdfb53a2020-10-01 10:43:46 -0700245Tutorials and API documentation can be built using the following commands:
Davide Pesavento933a5672020-07-03 22:32:43 -0400246
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400247.. code-block:: shell
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700248
249 # Full set of documentation (tutorials + API) in build/docs
250 ./waf docs
251
Davide Pesavento2349e282020-03-24 14:28:03 -0400252 # Only tutorials in build/docs
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700253 ./waf sphinx
254
Davide Pesavento2349e282020-03-24 14:28:03 -0400255 # Only API docs in build/docs/doxygen
Sepehr Abdous4fc6db22018-08-22 15:26:06 -0700256 ./waf doxygen
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700257
Davide Pesavento01cea502021-07-31 19:25:42 -0400258If ``sphinx-build`` is detected during ``./waf configure``, man pages will automatically
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400259be built and installed during the normal build process (i.e., during ``./waf`` and
Davide Pesavento01cea502021-07-31 19:25:42 -0400260``./waf install``). By default, man pages will be installed into ``${PREFIX}/share/man``
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400261(the default value for ``PREFIX`` is ``/usr/local``). This location can be changed
262during the ``./waf configure`` stage using the ``--prefix``, ``--datarootdir``, or
263``--mandir`` options.
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700264
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400265For further details, please refer to ``./waf --help``.
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700266
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400267Debug symbols
268-------------
269
270The default compiler flags include debug symbols in binaries. This should provide
271more meaningful debugging information if ndn-cxx or your application crashes.
272
273If this is not desired, the default flags can be overridden to disable debug symbols.
274The following example shows how to completely disable debug symbols and configure
275ndn-cxx to be installed into ``/usr`` with configuration in the ``/etc`` directory.
276
277.. code-block:: shell
278
279 CXXFLAGS="-O2" ./waf configure --prefix=/usr --sysconfdir=/etc
280 ./waf
281 sudo ./waf install
282
283Customizing the compiler
284------------------------
285
286To build ndn-cxx with a different compiler (rather than the platform default), set the
287``CXX`` environment variable to point to the compiler binary. For example, to build
288with clang on Linux, use the following:
289
290.. code-block:: shell
291
292 CXX=clang++ ./waf configure
293
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400294.. _Development build:
Davide Pesavento534b8412018-12-08 19:19:09 -0500295
296Development build
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700297-----------------
298
Davide Pesavento933a5672020-07-03 22:32:43 -0400299The following is the suggested build procedure for development builds:
300
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400301.. code-block:: shell
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700302
Davide Pesaventofbca6112022-07-03 16:31:04 -0400303 ./waf configure --debug --with-tests
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700304 ./waf
305 sudo ./waf install
Davide Pesavento2349e282020-03-24 14:28:03 -0400306 sudo ldconfig # on Linux only
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700307
Davide Pesaventoab7300b2020-04-09 00:51:41 -0400308In a development build, most compiler optimizations will be disabled and all warnings
309will be treated as errors. This default behavior can be overridden by setting the
Davide Pesavento933a5672020-07-03 22:32:43 -0400310``CXXFLAGS`` environment variable before running ``./waf configure``, for example:
311
Davide Pesavento487cc9a2025-05-01 23:32:05 -0400312.. code-block:: shell
Alexander Afanasyevc5452c52014-04-29 17:21:51 -0700313
Davide Pesavento81de5d92022-12-30 01:08:05 -0500314 CXXFLAGS="-O1 -g3 -Wall" ./waf configure --debug --with-tests
315 ./waf