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.

This commit is contained in:
Gustavo J. A. M. Carneiro
2007-08-08 15:10:36 +01:00
parent a34d15da01
commit 0eca73234a
15 changed files with 83 additions and 91 deletions

View File

@@ -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'

View File

@@ -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'

View File

@@ -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',
]

View File

@@ -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',

View File

@@ -26,9 +26,7 @@ def configure(conf):
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',

View File

@@ -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',

View File

@@ -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',

View File

@@ -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',

View File

@@ -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',

View File

@@ -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',

View File

@@ -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',

View File

@@ -47,11 +47,7 @@ def configure(conf):
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',

View File

@@ -2,6 +2,7 @@
import os, os.path
import shutil
import types
import Action
import Common
@@ -47,10 +48,18 @@ def configure(conf):
## 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))

View File

@@ -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'

15
wscript
View File

@@ -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 @@ def configure(conf):
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