doc/build.txt
author Vedran Miletić <rivanvx@gmail.com>
Tue, 02 Aug 2011 17:42:33 -0400
changeset 7385 10beb0e53130
parent 7145 a925e518220b
child 7621 b0120c820a67
permissions -rw-r--r--
standardize emacs c++ mode comments
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
     1
The Waf build system is used to build ns-3.  Waf is a Python-based
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
     2
build system (http://www.freehackers.org/~tnagy/waf.html)
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
     3
3688
e49a3c85cfd9 add reference to wiki page
Tom Henderson <tomh@tomh.org>
parents: 1788
diff changeset
     4
Note:  We've added a wiki page with more complete build instructions
e49a3c85cfd9 add reference to wiki page
Tom Henderson <tomh@tomh.org>
parents: 1788
diff changeset
     5
than the quick ones you find below:
e49a3c85cfd9 add reference to wiki page
Tom Henderson <tomh@tomh.org>
parents: 1788
diff changeset
     6
http://www.nsnam.org/wiki/index.php/Installation
e49a3c85cfd9 add reference to wiki page
Tom Henderson <tomh@tomh.org>
parents: 1788
diff changeset
     7
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
     8
=== Installing Waf ===
17
b959311b6aa1 build instructions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
5449
a9678e91ec7d Update the build.txt file with new WAF information
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4534
diff changeset
    10
The top-level ns-3 directory should contain a current waf script, so
a9678e91ec7d Update the build.txt file with new WAF information
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4534
diff changeset
    11
there is no need to have WAF installed in the system.  We are using
a9678e91ec7d Update the build.txt file with new WAF information
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4534
diff changeset
    12
some extensions to WAF, which can be found in the 'waf-tools'
a9678e91ec7d Update the build.txt file with new WAF information
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4534
diff changeset
    13
directory. The upstream location for these WAF extensions is:
4064
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3688
diff changeset
    14
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3688
diff changeset
    15
    https://code.launchpad.net/~gjc/waf/cmd
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3688
diff changeset
    16
10222f483860 Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3688
diff changeset
    17
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    18
=== Building with Waf ===
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    19
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    20
To build ns-3 with waf type the commands from the top-level directory:
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    21
 1. ./waf configure [options]
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    22
 2. ./waf
17
b959311b6aa1 build instructions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    24
To see valid configure options, type ./waf --help.  The most important
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    25
option is -d <debug level>.  Valid debug levels (which are listed in
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    26
waf --help) are: "debug" or "optimized".  It is
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    27
also possible to change the flags used for compilation with (e.g.):
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    28
CXXFLAGS="-O3" ./waf configure.
57
9385fba1589e add doc target to BUILD file
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 17
diff changeset
    29
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    30
[ Note:  Unlike some other build tools, to change the build target,
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    31
the option must be supplied during the configure stage rather than
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    32
the build stage (i.e., "./waf -d optimized" will not work; instead, do
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    33
"./waf -d optimized configure; ./waf" ]
17
b959311b6aa1 build instructions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    35
The resulting binaries are placed in build/<debuglevel>/srcpath.
17
b959311b6aa1 build instructions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    37
Other waf usages include:
17
b959311b6aa1 build instructions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
7024
4392d52b3536 Make examples not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6998
diff changeset
    39
 1. ./waf configure --enable-examples --enable-tests
4392d52b3536 Make examples not be built by default
Mitch Watrous <watrous@u.washington.edu>
parents: 6998
diff changeset
    40
    Turn on examples and tests.
17
b959311b6aa1 build instructions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    42
 2. ./waf --doxygen
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    43
    Run doxygen to generate documentation
116
d4ee28e845f3 add lcov support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 115
diff changeset
    44
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    45
 3. ./waf --lcov-report
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    46
    Run code coverage analysis (assuming the project was configured
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    47
with --enable-gcov)
17
b959311b6aa1 build instructions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    49
 4. ./waf --run "program [args]"
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    50
    Run a ns3 program, given its target name, with the given
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    51
    arguments.  This takes care of automatically modifying the the
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    52
    path for finding the ns3 dynamic libraries in the environment
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    53
    before running the program.  Note: the "program [args]" string is
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    54
    parsed using POSIX shell rules.
101
2437ccac8acd add documentation on build system
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 88
diff changeset
    55
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    56
 4.1 ./waf --run programname --command-template "... %s ..."
935
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
    57
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
    58
    Same as --run, but uses a command template with %s replaced by the
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
    59
    actual program (whose name is given by --run).  This can be use to
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
    60
    run ns-3 programs with helper tools.  For example, to run unit
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
    61
    tests with valgrind, use the command:
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
    62
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    63
         ./waf --run run-tests --command-template "valgrind %s"
935
53e1e53c373f WAF: add a --command-template option to e.g. allow running programs with valgrind, gdb, etc.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 934
diff changeset
    64
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    65
 5. ./waf --shell
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    66
    Starts a nested system shell with modified environment to run ns3 programs.
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    67
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    68
 6. ./waf distclean
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    69
    Cleans out the entire build/ directory
101
2437ccac8acd add documentation on build system
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 88
diff changeset
    70
1788
572cef188fdf updates for 3.0.7
Tom Henderson <tomh@tomh.org>
parents: 935
diff changeset
    71
 7. ./waf dist
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    72
    The command 'waf dist' can be used to create a distribution tarball.
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    73
    It includes all files in the source directory, except some particular
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    74
    extensions that are blacklisted, such as back files (ending in ~).
101
2437ccac8acd add documentation on build system
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 88
diff changeset
    75
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    76
=== Extending ns-3 ===
101
2437ccac8acd add documentation on build system
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 88
diff changeset
    77
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    78
To add new modules:
7145
a925e518220b Rescan wifi's bindings and fix some paths in the documentation
Mitch Watrous <watrous@u.washington.edu>
parents: 7024
diff changeset
    79
  1. Create the module directory under src;
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    80
  2. Add the source files to it;
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    81
  3. Add a 'wscript' describing it;
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    82
  4. Add the module subdirectory name to the all_modules list in src/wscript.
101
2437ccac8acd add documentation on build system
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 88
diff changeset
    83
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    84
A module's wscript file is basically a regular Waf script.  A ns-3
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    85
module is created as a cpp/shlib object, like this:
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    86
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    87
def build(bld):
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    88
    obj = bld.create_obj('cpp', 'shlib')
101
2437ccac8acd add documentation on build system
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 88
diff changeset
    89
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    90
    ## set module name; by convention it starts with ns3-
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    91
    obj.name = 'ns3-mymodule'
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    92
    obj.target = obj.name 
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    93
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    94
    ## list dependencies to other modules
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    95
    obj.uselib_local = ['ns3-core'] 
168
037cd2b37c67 split high precision implementations in different files
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 125
diff changeset
    96
929
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    97
    ## list source files (private or public header files excluded)
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    98
    obj.source = [
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
    99
        'mymodule.cc',
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
   100
    ]
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
   101
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
   102
    ## list module public header files
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
   103
    headers = bld.create_obj('ns3header')
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
   104
    headers.source = [
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
   105
        'mymodule-header.h',
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
   106
    ]
9394956b7fc4 changes for 3.0.4 release
Tom Henderson <tomh@tomh.org>
parents: 658
diff changeset
   107