src/brite/wscript
author Tom Henderson <tomh@tomh.org>
Sat, 03 May 2014 10:12:46 -0700
changeset 10778 2d60720f5850
parent 9277 0f87d1cb030c
child 11058 0553feb3113f
permissions -rw-r--r--
make waf smarter about finding BRITE automatically
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9164
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
     1
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Mileti? <rivanvx@gmail.com>
parents: 9197
diff changeset
     2
9164
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
     3
import os
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Mileti? <rivanvx@gmail.com>
parents: 9197
diff changeset
     4
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Mileti? <rivanvx@gmail.com>
parents: 9197
diff changeset
     5
from waflib import Options
9164
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
     6
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
     7
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
     8
def options(opt):
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
     9
    opt.add_option('--with-brite',
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    10
                   help=('Use BRITE integration support, given by the indicated path,'
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    11
                         ' to allow the use of the BRITE topology generator'),
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    12
                   default=False, dest='with_brite')
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    13
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    14
def configure(conf):
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    15
    conf.env['ENABLE_BRITE'] = False
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    16
10778
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    17
    lib_to_check = 'libbrite.so'
9164
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    18
    if Options.options.with_brite:
10778
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    19
        conf.msg("Checking BRITE location", ("%s (given)" % Options.options.with_brite))
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    20
        brite_dir = Options.options.with_brite
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    21
        if os.path.exists(os.path.join(brite_dir, lib_to_check)):
9164
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    22
            conf.env['WITH_BRITE'] = os.path.abspath(Options.options.with_brite)
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    23
        else:
10778
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    24
            conf.report_optional_feature("brite", "BRITE Integration", False,
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    25
                                 "BRITE not found at requested location")
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    26
            # Add this module to the list of modules that won't be built
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    27
            # if they are enabled.
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    28
            conf.env['MODULES_NOT_BUILT'].append('brite')
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    29
            return
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    30
    else:
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    31
        # No user specified '--with-brite' option, try to guess
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    32
        # bake.py uses ../../build, while ns-3-dev uses ../click
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    33
        brite_dir = os.path.join('..','BRITE')
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    34
        brite_bake_build_dir = os.path.join('..', '..', 'build') 
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    35
        brite_bake_lib_dir = os.path.join(brite_bake_build_dir, 'lib')
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    36
        if os.path.exists(os.path.join(brite_dir, lib_to_check)):
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    37
            conf.msg("Checking for BRITE location", ("%s (guessed)" % brite_dir))
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    38
            conf.env['WITH_BRITE'] = os.path.abspath(brite_dir)
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    39
# Below is not yet ready (bake does not install BRITE yet, just builds it)
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    40
#        elif os.path.exists(os.path.join(brite_bake_lib_dir, lib_to_check)):
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    41
#            conf.msg("Checking for BRITE location", ("%s (guessed)" % brite_bake_lib_dir))
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    42
#            conf.env['WITH_BRITE'] = os.path.abspath(brite_bake_lib_dir)
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    43
        else:
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    44
            conf.report_optional_feature("brite", "BRITE Integration", False, 'BRITE not enabled (see option --with-brite)')
9197
a37c63021f20 fix static build
Tom Henderson <tomh@tomh.org>
parents: 9164
diff changeset
    45
10778
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    46
            # Add this module to the list of modules that won't be built
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    47
            # if they are enabled.
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    48
            conf.env['MODULES_NOT_BUILT'].append('brite')
2d60720f5850 make waf smarter about finding BRITE automatically
Tom Henderson <tomh@tomh.org>
parents: 9277
diff changeset
    49
            return
9164
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    50
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    51
    test_code = '''
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    52
#include "Brite.h"
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    53
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    54
int main()
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    55
{
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    56
  return 0;
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    57
}
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    58
'''
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    59
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    60
    conf.env['DL'] = conf.check(mandatory=True, lib='dl', define_name='DL', uselib='DL')
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    61
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    62
    conf.env.append_value('NS3_MODULE_PATH',os.path.abspath(os.path.join(conf.env['WITH_BRITE'], '.')))
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    63
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    64
    conf.env['INCLUDES_BRITE'] = os.path.abspath(os.path.join(conf.env['WITH_BRITE'],'.'))
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    65
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    66
    conf.env['CPPPATH_BRITE'] = [
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    67
            os.path.abspath(os.path.join(conf.env['WITH_BRITE'],'.')),
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    68
            os.path.abspath(os.path.join(conf.env['WITH_BRITE'],'Models'))
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    69
            ]
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    70
    conf.env['LIBPATH_BRITE'] = [os.path.abspath(os.path.join(conf.env['WITH_BRITE'], '.'))]
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    71
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    72
    conf.env.append_value('CXXDEFINES', 'NS3_BRITE')
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    73
    conf.env.append_value('CPPPATH', conf.env['CPPPATH_BRITE'])
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    74
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    75
    conf.env['BRITE'] = conf.check(fragment=test_code, lib='brite', libpath=conf.env['LIBPATH_BRITE'], use='BRITE DL')
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    76
    conf.report_optional_feature("brite", "BRITE Integration",
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    77
                                          conf.env['BRITE'], "BRITE library not found")
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    78
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    79
    if conf.env['BRITE']:
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    80
        conf.env['ENABLE_BRITE'] = True
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    81
        conf.env.append_value('CXXDEFINES', 'NS3_BRITE')
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    82
        conf.env.append_value('CPPPATH', conf.env['CPPPATH_BRITE'])
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    83
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    84
def build(bld):
9197
a37c63021f20 fix static build
Tom Henderson <tomh@tomh.org>
parents: 9164
diff changeset
    85
    # Don't do anything for this module if brite's not enabled.
a37c63021f20 fix static build
Tom Henderson <tomh@tomh.org>
parents: 9164
diff changeset
    86
    if 'brite' in bld.env['MODULES_NOT_BUILT']:
a37c63021f20 fix static build
Tom Henderson <tomh@tomh.org>
parents: 9164
diff changeset
    87
        return
9164
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    88
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    89
    module = bld.create_ns3_module('brite', ['network', 'core', 'internet', 'point-to-point'])
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    90
    module.source = [
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    91
        ]
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    92
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    93
    module_test = bld.create_ns3_module_test_library('brite')
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    94
    module_test.source = [
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    95
        ]
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    96
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    97
    if bld.env['BRITE'] and bld.env['DL']:
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    98
        module.uselib = 'BRITE DL'
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
    99
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Mileti? <rivanvx@gmail.com>
parents: 9197
diff changeset
   100
    headers = bld(features='ns3header')
9164
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
   101
    headers.module = 'brite'
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
   102
    headers.source = [
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
   103
        ]
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
   104
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
   105
    if bld.env['ENABLE_BRITE']:
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
   106
        module.source.append ('helper/brite-topology-helper.cc')
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
   107
        headers.source.append ('helper/brite-topology-helper.h')
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
   108
        module_test.source.append('test/brite-test-topology.cc')
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
   109
347452534b2e Brite Integration
Brian Swenson <bswenson3@gatech.edu>
parents:
diff changeset
   110
    if bld.env['ENABLE_EXAMPLES'] and bld.env['ENABLE_BRITE']:
9277
0f87d1cb030c Upgrade waf to 1.7.10 and fix included wscripts
Vedran Mileti? <rivanvx@gmail.com>
parents: 9197
diff changeset
   111
      bld.recurse('examples')