WAF: add a new --enable-modules configure option, to tell WAF to build only the specified set of ns-3 modules and its dependencies; programs depending on those modules are automatically excluded from the build.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/wscript Tue Nov 20 18:27:43 2007 +0000
@@ -0,0 +1,44 @@
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+import Object
+
+def build(bld):
+ env = bld.env_of_name('default')
+
+ if env['NS3_ENABLED_MODULES']:
+ modules = env['NS3_ENABLED_MODULES']
+ changed = True
+ while changed:
+ changed = False
+ for module in modules:
+ module_obj = Object.name_to_obj(module)
+ if module_obj is None:
+ raise ValueError("module %s not found" % module)
+ for dep in module_obj.add_objects:
+ if not dep.startswith('ns3-'):
+ continue
+ if dep not in modules:
+ modules.append(dep)
+ changed = True
+
+ ## remove objects that depend on modules not listed
+ for obj in list(Object.g_allobjs):
+ if hasattr(obj, 'ns3_module_dependencies'):
+ for dep in obj.ns3_module_dependencies:
+ if dep not in modules:
+ Object.g_allobjs.remove(obj)
+ break
+ if obj.name in env['NS3_MODULES'] and obj.name not in modules:
+ Object.g_allobjs.remove(obj)
+
+
+
+ ## Create a single ns3 library containing all modules
+ lib = bld.create_obj('cpp', 'shlib')
+ lib.name = 'ns3'
+ lib.target = 'ns3'
+ if env['NS3_ENABLED_MODULES']:
+ lib.add_objects = list(modules)
+ else:
+ lib.add_objects = list(env['NS3_MODULES'])
+
+
--- a/src/applications/onoff/wscript Fri Nov 16 08:47:17 2007 +0100
+++ b/src/applications/onoff/wscript Tue Nov 20 18:27:43 2007 +0000
@@ -1,7 +1,7 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
def build(bld):
- module = bld.create_ns3_module('onoff', ['core'])
+ module = bld.create_ns3_module('onoff', ['core', 'simulator', 'node'])
module.source = [
'onoff-application.cc',
]
--- a/src/wscript Fri Nov 16 08:47:17 2007 +0100
+++ b/src/wscript Tue Nov 20 18:27:43 2007 +0000
@@ -36,19 +36,28 @@
" specific platforms, such as Linux and Solaris)"),
action="store_true", dest='enable_rpath', default=False)
+ opt.add_option('--enable-modules',
+ help=("Build only these modules (and dependencies)"),
+ dest='enable_modules')
+
def configure(conf):
conf.sub_config('core')
conf.sub_config('simulator')
blddir = os.path.abspath(os.path.join(conf.m_blddir, conf.env.variant()))
- conf.env['NS3_MODULE_PATH'] = [os.path.join(blddir)]
+ conf.env['NS3_MODULE_PATH'] = [os.path.join(blddir, 'lib')]
if Params.g_options.enable_rpath:
conf.env.append_value('RPATH', '-Wl,-rpath=%s' % (os.path.join(blddir),))
## Used to link the 'run-tests' program with all of ns-3 code
conf.env['NS3_MODULES'] = ['ns3-' + module.split('/')[-1] for module in all_modules]
+ if Params.g_options.enable_modules:
+ conf.env['NS3_ENABLED_MODULES'] = ['ns3-'+mod for mod in
+ Params.g_options.enable_modules.split(',')]
+
+
def create_ns3_module(bld, name, dependencies=()):
module = bld.create_obj('cpp', 'objects')
module.name = 'ns3-' + name
--- a/tutorial/wscript Fri Nov 16 08:47:17 2007 +0100
+++ b/tutorial/wscript Tue Nov 20 18:27:43 2007 +0000
@@ -1,36 +1,36 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
def build(bld):
- obj = bld.create_ns3_program('hello-simulator', ['core'])
+ obj = bld.create_ns3_program('hello-simulator', ['simulator'])
obj.source = 'hello-simulator.cc'
- obj = bld.create_ns3_program('tutorial-csma-echo', ['core'])
+ obj = bld.create_ns3_program('tutorial-csma-echo', ['internet-node', 'csma'])
obj.source = 'tutorial-csma-echo.cc'
- obj = bld.create_ns3_program('tutorial-csma-echo-ascii-trace', ['core'])
+ obj = bld.create_ns3_program('tutorial-csma-echo-ascii-trace', ['internet-node', 'csma'])
obj.source = 'tutorial-csma-echo-ascii-trace.cc'
- obj = bld.create_ns3_program('tutorial-csma-echo-pcap-trace', ['core'])
+ obj = bld.create_ns3_program('tutorial-csma-echo-pcap-trace', ['internet-node', 'csma'])
obj.source = 'tutorial-csma-echo-pcap-trace.cc'
- obj = bld.create_ns3_program('tutorial-point-to-point', ['core'])
+ obj = bld.create_ns3_program('tutorial-point-to-point', ['internet-node', 'point-to-point'])
obj.source = 'tutorial-point-to-point.cc'
- obj = bld.create_ns3_program('tutorial-star', ['core'])
+ obj = bld.create_ns3_program('tutorial-star', ['internet-node', 'point-to-point'])
obj.source = ['tutorial-star.cc',
'point-to-point-ipv4-topology.cc']
- obj = bld.create_ns3_program('tutorial-star-routing', ['core'])
+ obj = bld.create_ns3_program('tutorial-star-routing', ['internet-node', 'point-to-point'])
obj.source = ['tutorial-star-routing.cc',
'point-to-point-ipv4-topology.cc']
- obj = bld.create_ns3_program('tutorial-linear-dumbbell', ['core'])
+ obj = bld.create_ns3_program('tutorial-linear-dumbbell', ['internet-node', 'point-to-point'])
obj.source = 'tutorial-linear-dumbbell.cc'
- obj = bld.create_ns3_program('testipv4', ['core'])
+ obj = bld.create_ns3_program('testipv4', ['node'])
obj.source = ['testipv4.cc', 'ipv4-address-generator.cc']
- obj = bld.create_ns3_program('tutorial-bus-network', ['core'])
+ obj = bld.create_ns3_program('tutorial-bus-network', ['internet-node'])
obj.source = ['tutorial-bus-network.cc',
'ipv4-bus-network.cc',
'ipv4-address-generator.cc']
--- a/utils/wscript Fri Nov 16 08:47:17 2007 +0100
+++ b/utils/wscript Tue Nov 20 18:27:43 2007 +0000
@@ -12,7 +12,7 @@
def build(bld):
env = bld.env_of_name('default')
- unit_tests = bld.create_ns3_program('run-tests')
+ unit_tests = bld.create_ns3_program('run-tests', ['common'])
unit_tests.install_var = 0 # do not install
unit_tests.unit_test = 1 # runs on 'waf check'
unit_tests.source = 'run-tests.cc'
--- a/wscript Fri Nov 16 08:47:17 2007 +0100
+++ b/wscript Tue Nov 20 18:27:43 2007 +0000
@@ -150,6 +150,7 @@
program.name = name
program.target = program.name
program.uselib_local = 'ns3'
+ program.ns3_module_dependencies = ['ns3-'+dep for dep in dependencies]
return program
@@ -178,14 +179,10 @@
raise SystemExit(0)
# process subfolders from here
+ bld.add_subdirs('lib') # first subdirs are processed last by WAF
bld.add_subdirs('src')
bld.add_subdirs('samples utils examples tutorial')
- ## Create a single ns3 library containing all modules
- lib = bld.create_obj('cpp', 'shlib')
- lib.name = 'ns3'
- lib.target = 'ns3'
- lib.add_objects = list(bld.env_of_name('default')['NS3_MODULES'])
def shutdown():
@@ -214,11 +211,17 @@
## generate the trace sources list docs
env = Params.g_build.env_of_name('default')
proc_env = _get_proc_env()
- prog = _find_program('print-introspected-doxygen', env).m_linktask.m_outputs[0].abspath(env)
- out = open('doc/introspected-doxygen.h', 'w')
- if subprocess.Popen([prog], stdout=out, env=proc_env).wait():
- raise SystemExit(1)
- out.close()
+ try:
+ prog = _find_program('print-introspected-doxygen', env).m_linktask.m_outputs[0].abspath(env)
+ except ValueError: # could happen if print-introspected-doxygen is
+ # not built because of waf configure
+ # --enable-modules=xxx
+ pass
+ else:
+ out = open('doc/introspected-doxygen.h', 'w')
+ if subprocess.Popen([prog], stdout=out, env=proc_env).wait():
+ raise SystemExit(1)
+ out.close()
run_program('run-tests')