2007-07-16 21:41:19 -07:00
|
|
|
The Waf build system is used to build ns-3. Waf is a Python-based
|
|
|
|
|
build system (http://www.freehackers.org/~tnagy/waf.html)
|
|
|
|
|
|
2008-09-11 08:45:00 -07:00
|
|
|
Note: We've added a wiki page with more complete build instructions
|
|
|
|
|
than the quick ones you find below:
|
2013-11-13 16:06:43 -05:00
|
|
|
http://www.nsnam.org/wiki/Installation
|
2008-09-11 08:45:00 -07:00
|
|
|
|
2007-07-16 21:41:19 -07:00
|
|
|
=== Installing Waf ===
|
|
|
|
|
|
2009-10-23 13:08:12 +01:00
|
|
|
The top-level ns-3 directory should contain a current waf script, so
|
|
|
|
|
there is no need to have WAF installed in the system. We are using
|
|
|
|
|
some extensions to WAF, which can be found in the 'waf-tools'
|
|
|
|
|
directory. The upstream location for these WAF extensions is:
|
2008-12-29 13:28:54 +00:00
|
|
|
|
|
|
|
|
https://code.launchpad.net/~gjc/waf/cmd
|
|
|
|
|
|
|
|
|
|
|
2007-07-16 21:41:19 -07:00
|
|
|
=== Building with Waf ===
|
|
|
|
|
|
2007-10-15 21:13:21 -07:00
|
|
|
To build ns-3 with waf type the commands from the top-level directory:
|
|
|
|
|
1. ./waf configure [options]
|
|
|
|
|
2. ./waf
|
2007-07-16 21:41:19 -07:00
|
|
|
|
2007-10-15 21:13:21 -07:00
|
|
|
To see valid configure options, type ./waf --help. The most important
|
2007-07-16 21:41:19 -07:00
|
|
|
option is -d <debug level>. Valid debug levels (which are listed in
|
2011-12-07 16:11:42 -08:00
|
|
|
waf --help) are: "debug" or "optimized", with debug being default. It is
|
2007-07-16 21:41:19 -07:00
|
|
|
also possible to change the flags used for compilation with (e.g.):
|
2011-12-07 16:11:42 -08:00
|
|
|
CXXFLAGS="-O3" ./waf configure. By default, ns-3 is built as debug code,
|
|
|
|
|
with examples and tests disabled, and with python bindings enabled.
|
2007-07-16 21:41:19 -07:00
|
|
|
|
|
|
|
|
[ Note: Unlike some other build tools, to change the build target,
|
|
|
|
|
the option must be supplied during the configure stage rather than
|
2007-10-15 21:13:21 -07:00
|
|
|
the build stage (i.e., "./waf -d optimized" will not work; instead, do
|
|
|
|
|
"./waf -d optimized configure; ./waf" ]
|
2007-07-16 21:41:19 -07:00
|
|
|
|
2011-12-07 16:11:42 -08:00
|
|
|
The resulting executables and libraries are placed in build/.
|
2007-07-16 21:41:19 -07:00
|
|
|
|
|
|
|
|
Other waf usages include:
|
|
|
|
|
|
2011-04-12 14:35:16 -07:00
|
|
|
1. ./waf configure --enable-examples --enable-tests
|
|
|
|
|
Turn on examples and tests.
|
2007-07-16 21:41:19 -07:00
|
|
|
|
2011-12-07 16:11:42 -08:00
|
|
|
2. ./waf configure --disable-python
|
|
|
|
|
Disable python bindings.
|
2007-07-16 21:41:19 -07:00
|
|
|
|
2011-12-07 16:11:42 -08:00
|
|
|
3. ./waf --doxygen
|
|
|
|
|
Run doxygen to generate documentation
|
2007-07-16 21:41:19 -07:00
|
|
|
|
2007-10-15 21:13:21 -07:00
|
|
|
4. ./waf --run "program [args]"
|
2007-07-16 21:41:19 -07:00
|
|
|
Run a ns3 program, given its target name, with the given
|
2017-09-01 11:40:28 +03:00
|
|
|
arguments. This takes care of automatically modifying the
|
2007-07-16 21:41:19 -07:00
|
|
|
path for finding the ns3 dynamic libraries in the environment
|
|
|
|
|
before running the program. Note: the "program [args]" string is
|
|
|
|
|
parsed using POSIX shell rules.
|
|
|
|
|
|
2007-10-15 21:13:21 -07:00
|
|
|
4.1 ./waf --run programname --command-template "... %s ..."
|
2007-07-18 12:20:31 +01:00
|
|
|
|
|
|
|
|
Same as --run, but uses a command template with %s replaced by the
|
|
|
|
|
actual program (whose name is given by --run). This can be use to
|
|
|
|
|
run ns-3 programs with helper tools. For example, to run unit
|
|
|
|
|
tests with valgrind, use the command:
|
|
|
|
|
|
2007-10-15 21:13:21 -07:00
|
|
|
./waf --run run-tests --command-template "valgrind %s"
|
2007-07-18 12:20:31 +01:00
|
|
|
|
2007-10-15 21:13:21 -07:00
|
|
|
5. ./waf --shell
|
2007-07-16 21:41:19 -07:00
|
|
|
Starts a nested system shell with modified environment to run ns3 programs.
|
|
|
|
|
|
2007-10-15 21:13:21 -07:00
|
|
|
6. ./waf distclean
|
2007-07-16 21:41:19 -07:00
|
|
|
Cleans out the entire build/ directory
|
|
|
|
|
|
2007-10-15 21:13:21 -07:00
|
|
|
7. ./waf dist
|
2007-07-16 21:41:19 -07:00
|
|
|
The command 'waf dist' can be used to create a distribution tarball.
|
|
|
|
|
It includes all files in the source directory, except some particular
|
|
|
|
|
extensions that are blacklisted, such as back files (ending in ~).
|
|
|
|
|
|
|
|
|
|
=== Extending ns-3 ===
|
|
|
|
|
|
|
|
|
|
To add new modules:
|
2011-05-09 18:04:52 -07:00
|
|
|
1. Create the module directory under src;
|
2007-07-16 21:41:19 -07:00
|
|
|
2. Add the source files to it;
|
|
|
|
|
3. Add a 'wscript' describing it;
|
2011-12-07 16:11:42 -08:00
|
|
|
|
|
|
|
|
A convenience program to auto-generate the template of a new module can
|
|
|
|
|
be found in src/create-module.py.
|
2007-07-16 21:41:19 -07:00
|
|
|
|
|
|
|
|
A module's wscript file is basically a regular Waf script. A ns-3
|
|
|
|
|
module is created as a cpp/shlib object, like this:
|
|
|
|
|
|
|
|
|
|
def build(bld):
|
2011-12-07 16:11:42 -08:00
|
|
|
module = bld.create_ns3_module('ns3-mymodule', ['core'])
|
|
|
|
|
module.source = [
|
|
|
|
|
'model/ns3-mymodule.cc',
|
|
|
|
|
'helper/ns3-mymodule-helper.cc',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
headers = bld.new_task_gen(features=['ns3header'])
|
|
|
|
|
headers.module = 'ns3-mymodule'
|
|
|
|
|
headers.source = [
|
|
|
|
|
'model/ns3-mymodule.h',
|
|
|
|
|
'helper/ns3-mymodule-helper.h',
|
|
|
|
|
]
|
2007-07-16 21:41:19 -07:00
|
|
|
|
2011-12-07 16:11:42 -08:00
|
|
|
if bld.env.ENABLE_EXAMPLES:
|
|
|
|
|
bld.add_subdirs('examples')
|
2007-07-16 21:41:19 -07:00
|
|
|
|
2011-12-07 16:11:42 -08:00
|
|
|
# bld.ns3_python_bindings()
|
2006-12-04 08:39:11 +01:00
|
|
|
|