doc/build-waf.txt
changeset 635 71b92dfe5f55
parent 602 dda9e3976114
child 657 be551a3b07c6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/build-waf.txt	Thu May 17 11:32:22 2007 +0200
@@ -0,0 +1,86 @@
+WAF is an alternative build system, similar to SCons.  NS-3 now is
+able to build with WAF, in parallel to SCons.
+
+Note: the WAF build scripts are experimental at this stage.
+
+
+=== Building with WAF ===
+
+To build NS-3 with waf type the commands:
+ 1. ./waf configure [options]
+ 2. ./waf
+
+[ Note: if ./waf does not exist, see the section "Note for developers" below ]
+
+To see valid configure options, type ./waf --help.  The most important
+option is -d <debug level>.  Valid debug levels (which are listed in
+./waf --help) are: ultradebug, debug, release, and optimized.
+
+The resulting binaries are placed in build/<debuglevel>/srcpath.
+
+Other waf usages include:
+
+ 1. ./waf check
+    Runs the unit tests
+
+ 2. ./waf --doxygen
+    Run doxygen to generate documentation
+
+ 3. ./waf --lcov-report
+    Run code coverage analysis (assuming the project was configured
+with --enable-gcov)
+
+=== Extending NS-3 ===
+
+To add new modules:
+  1. Create the module directory under src (or src/devices, or whatever);
+  2. Add the source files to it;
+  3. Add a 'wscript' describing it;
+  4. Add the module subdirectory name to the all_modules list in src/wscript.
+
+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):
+    obj = bld.create_obj('cpp', 'shlib')
+
+    ## set module name; by convention it starts with ns3-
+    obj.name = 'ns3-mymodule'
+    obj.target = obj.name 
+
+    ## list dependencies to other modules
+    obj.uselib_local = ['ns3-core'] 
+
+    ## list source files (private or public header files excluded)
+    obj.source = [
+        'mymodule.cc',
+    ]
+
+    ## list module public header files
+    headers = bld.create_obj('ns3header')
+    headers.source = [
+        'mymodule-header.h',
+    ]
+
+
+=== Note for developers ===
+
+The NS-3 code repository does not contain the waf script.  Instead,
+developers should check it out from a subversion repository:
+
+  svn checkout http://waf.googlecode.com/svn/tags/ns3/ waf
+
+[ note: 'tags/ns3' is a tag that represents the last svn version
+tested to work correctly with ns3, although 'trunk' will likely work
+ as well ]
+
+Then it can be installed system-wide with 'sudo ./waf-light install'.
+When preparing a distribution, the resulting 'waf' script, which is
+self contained (no external files needed), can be easily included in
+the tarball so that users downloading NS-3 can easily build it without
+having WAF installed (although Python >= 2.3 is still needed).
+
+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 ~).
+