WAF: add new bld.create_ns3_module() and bld.create_ns3_program() methods to make declaration of modules and programs simpler, and allowing us to change how ns-3 is built in a centralized way, without needing to change every module wscript file.
--- a/examples/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/examples/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -1,19 +1,17 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
-import Params
def build(bld):
- def create_ns_prog(name, source, deps=['core', 'common', 'simulator']):
- obj = bld.create_obj('cpp', 'program')
- obj.target = name
- obj.uselib_local = ["ns3-%s" % dep for dep in deps]
- obj.source = source
- return obj
- obj = create_ns_prog('simple-global-routing', 'simple-global-routing.cc',
- deps=['point-to-point', 'internet-node', 'global-routing'])
- obj = create_ns_prog('simple-point-to-point', 'simple-point-to-point.cc',
- deps=['point-to-point', 'internet-node'])
- obj = create_ns_prog('csma-cd-one-subnet', 'csma-cd-one-subnet.cc',
- deps=['csma-cd', 'internet-node'])
- obj = create_ns_prog('csma-cd-packet-socket', 'csma-cd-packet-socket.cc', deps=['csma-cd', 'internet-node'])
+ obj = bld.create_ns3_program('simple-global-routing',
+ ['point-to-point', 'internet-node', 'global-routing'])
+ obj.source = 'simple-global-routing.cc'
+
+ obj = bld.create_ns3_program('simple-point-to-point', ['point-to-point', 'internet-node'])
+ obj.source = 'simple-point-to-point.cc'
+ obj = bld.create_ns3_program('csma-cd-one-subnet', ['csma-cd', 'internet-node'])
+ obj.source = 'csma-cd-one-subnet.cc'
+
+ obj = bld.create_ns3_program('csma-cd-packet-socket', ['csma-cd', 'internet-node'])
+ obj.source = 'csma-cd-packet-socket.cc'
+
--- a/samples/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/samples/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -1,28 +1,37 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
-import Params
def build(bld):
- def create_ns_prog(name, source, deps=['core', 'common', 'simulator']):
- obj = bld.create_obj('cpp', 'program')
- obj.target = name
- obj.uselib_local = ["ns3-%s" % dep for dep in deps]
- obj.source = source
- return obj
-
- obj = create_ns_prog('main-debug', ['main-debug.cc', 'main-debug-other.cc'])
- obj = create_ns_prog('main-callback', 'main-callback.cc')
- obj = create_ns_prog('main-ptr', 'main-ptr.cc')
- #obj = create_ns_prog('main-trace', 'main-trace.cc')
- obj = create_ns_prog('main-simulator', 'main-simulator.cc')
- obj = create_ns_prog('main-header', 'main-header.cc')
- obj = create_ns_prog('main-test', 'main-test.cc')
- obj = create_ns_prog('main-simple', 'main-simple.cc',
- deps=['node', 'internet-node', 'applications'])
- #obj = create_ns_prog('main-simple-p2p', 'main-simple-p2p.cc', deps=['node', 'point-to-point'])
- obj = create_ns_prog('main-default-value', 'main-default-value.cc',
- deps=['core', 'simulator', 'node', 'point-to-point'])
- obj = create_ns_prog('main-grid-topology', 'main-grid-topology.cc',
- deps=['core', 'simulator', 'mobility', 'internet-node'])
- obj = create_ns_prog('main-random-topology', 'main-random-topology.cc',
- deps=['core', 'simulator', 'mobility'])
+ obj = bld.create_ns3_program('main-debug')
+ obj.source = ['main-debug.cc', 'main-debug-other.cc']
+
+ obj = bld.create_ns3_program('main-callback')
+ obj.source = 'main-callback.cc'
+
+ obj = bld.create_ns3_program('main-ptr')
+ obj.source = 'main-ptr.cc'
+
+ obj = bld.create_ns3_program('main-simulator')
+ obj.source = 'main-simulator.cc'
+
+ obj = bld.create_ns3_program('main-header', ['common', 'simulator'])
+ obj.source = 'main-header.cc'
+ obj = bld.create_ns3_program('main-test')
+ obj.source = 'main-test.cc'
+
+ obj = bld.create_ns3_program('main-simple',
+ ['node', 'internet-node', 'applications'])
+ obj.source = 'main-simple.cc'
+
+ obj = bld.create_ns3_program('main-default-value',
+ ['core', 'simulator', 'node', 'point-to-point'])
+ obj.source = 'main-default-value.cc'
+
+ obj = bld.create_ns3_program('main-grid-topology',
+ ['core', 'simulator', 'mobility', 'internet-node'])
+ obj.source = 'main-grid-topology.cc'
+
+ obj = bld.create_ns3_program('main-random-topology',
+ ['core', 'simulator', 'mobility'])
+ obj.source = 'main-random-topology.cc'
+
--- a/src/applications/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/applications/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -1,10 +1,7 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
def build(bld):
- obj = bld.create_obj('cpp', 'shlib')
- obj.name = 'ns3-applications'
- obj.target = obj.name
- obj.uselib_local = ['ns3-node']
+ obj = bld.create_ns3_module('applications', ['node'])
obj.source = [
'onoff-application.cc',
]
--- a/src/common/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/common/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -1,10 +1,7 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
def build(bld):
- common = bld.create_obj('cpp', 'shlib')
- common.name = 'ns3-common'
- common.target = common.name
- common.uselib_local = ['ns3-core', 'ns3-simulator']
+ common = bld.create_ns3_module('common', ['core', 'simulator'])
common.source = [
'buffer.cc',
'chunk.cc',
--- a/src/core/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/core/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -26,9 +26,7 @@
def build(bld):
- core = bld.create_obj('cpp', 'shlib')
- core.name = 'ns3-core'
- core.target = core.name
+ core = bld.create_ns3_module('core')
core.source = [
'callback-test.cc',
'debug.cc',
--- a/src/devices/csma-cd/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/devices/csma-cd/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -2,10 +2,7 @@
def build(bld):
- obj = bld.create_obj('cpp', 'shlib')
- obj.name = 'ns3-csma-cd'
- obj.target = obj.name
- obj.uselib_local = ['ns3-node']
+ obj = bld.create_ns3_module('csma-cd', ['node'])
obj.source = [
'backoff.cc',
'csma-cd-net-device.cc',
--- a/src/devices/point-to-point/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/devices/point-to-point/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -2,10 +2,7 @@
def build(bld):
- module = bld.create_obj('cpp', 'shlib')
- module.name = 'ns3-point-to-point'
- module.target = module.name
- module.uselib_local = ['ns3-node']
+ module = bld.create_ns3_module('point-to-point', ['node'])
module.source = [
'point-to-point-net-device.cc',
'point-to-point-channel.cc',
--- a/src/internet-node/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/internet-node/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -2,10 +2,7 @@
def build(bld):
- obj = bld.create_obj('cpp', 'shlib')
- obj.name = 'ns3-internet-node'
- obj.target = obj.name
- obj.uselib_local = ['ns3-node', 'ns3-applications']
+ obj = bld.create_ns3_module('internet-node', ['node', 'applications'])
obj.source = [
'internet-node.cc',
'ipv4-l4-demux.cc',
--- a/src/mobility/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/mobility/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -1,10 +1,7 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
def build(bld):
- mobility = bld.create_obj('cpp', 'shlib')
- mobility.name = 'ns3-mobility'
- mobility.target = mobility.name
- mobility.uselib_local = ['ns3-core', 'ns3-simulator']
+ mobility = bld.create_ns3_module('mobility', ['core', 'simulator'])
mobility.source = [
'grid-topology.cc',
'hierarchical-mobility-model.cc',
--- a/src/node/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/node/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -1,10 +1,7 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
def build(bld):
- node = bld.create_obj('cpp', 'shlib')
- node.name = 'ns3-node'
- node.target = node.name
- node.uselib_local = ['ns3-core', 'ns3-common', 'ns3-simulator']
+ node = bld.create_ns3_module('node', ['core', 'common', 'simulator'])
node.source = [
'address.cc',
'eui48-address.cc',
--- a/src/routing/global-routing/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/routing/global-routing/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -1,10 +1,7 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
def build(bld):
- module = bld.create_obj('cpp', 'shlib')
- module.name = 'ns3-global-routing'
- module.target = module.name
- module.uselib_local = ['ns3-node']
+ module = bld.create_ns3_module('global-routing', ['node'])
module.source = [
'global-router-interface.cc',
'global-route-manager.cc',
--- a/src/simulator/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/simulator/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -47,11 +47,7 @@
def build(bld):
- sim = bld.create_obj('cpp', 'shlib')
- sim.name = 'ns3-simulator'
- sim.target = sim.name
- sim.uselib_local = ['ns3-core']
-
+ sim = bld.create_ns3_module('simulator', ['core'])
sim.source = [
'high-precision.cc',
'time.cc',
--- a/src/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/src/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -2,6 +2,7 @@
import os, os.path
import shutil
+import types
import Action
import Common
@@ -47,10 +48,18 @@
## 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]
+def create_ns3_module(bld, name, dependencies=()):
+ module = bld.create_obj('cpp', 'shlib')
+ module.name = 'ns3-' + name
+ module.target = module.name
+ module.uselib_local = ['ns3-' + dep for dep in dependencies]
+ return module
+
def build(bld):
Object.register('ns3header', Ns3Header)
Action.Action('ns3header', func=_ns3_headers_inst, color='BLUE')
+ bld.create_ns3_module = types.MethodType(create_ns3_module, bld)
bld.add_subdirs(list(all_modules))
--- a/utils/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/utils/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -4,20 +4,15 @@
def build(bld):
env = bld.env_of_name('default')
- def create_ns_prog(name, source):
- obj = bld.create_obj('cpp', 'program')
- obj.target = name
- obj.source = source
- return obj
-
- unit_tests = create_ns_prog('run-tests', 'run-tests.cc')
+ unit_tests = bld.create_ns3_program('run-tests')
unit_tests.install_var = 0 # do not install
unit_tests.unit_test = 1 # runs on 'waf check'
+ unit_tests.source = 'run-tests.cc'
## link unit test program with all ns3 modules
unit_tests.uselib_local = env['NS3_MODULES']
- obj = create_ns_prog('bench-simulator', 'bench-simulator.cc')
- obj.uselib_local = "ns3-core ns3-common ns3-simulator"
+ obj = bld.create_ns3_program('bench-simulator', ['simulator'])
+ obj.source = 'bench-simulator.cc'
- obj = create_ns_prog('replay-simulation', 'replay-simulation.cc')
- obj.uselib_local = "ns3-core ns3-common ns3-simulator"
+ obj = bld.create_ns3_program('replay-simulation', ['simulator'])
+ obj.source = 'replay-simulation.cc'
--- a/wscript Wed Aug 08 14:11:29 2007 +0100
+++ b/wscript Wed Aug 08 15:10:36 2007 +0100
@@ -2,12 +2,13 @@
import sys
import shlex
import shutil
+import types
+import optparse
+import os.path
import Params
import Object
import pproc as subprocess
-import optparse
-import os.path
Params.g_autoconfig = 1
@@ -135,7 +136,17 @@
conf.sub_config('src')
+def create_ns3_program(bld, name, dependencies=('simulator',)):
+ program = bld.create_obj('cpp', 'program')
+ program.name = name
+ program.target = program.name
+ program.uselib_local = ['ns3-' + dep for dep in dependencies]
+ return program
+
+
def build(bld):
+ bld.create_ns3_program = types.MethodType(create_ns3_program, bld)
+
variant_name = bld.env_of_name('default')['NS3_ACTIVE_VARIANT']
variant_env = bld.env_of_name(variant_name)
bld.m_allenvs['default'] = variant_env # switch to the active variant