SConstruct
changeset 1376 ad7e61edfb9d
parent 1375 4f45bec005b8
parent 1299 394c16278532
child 1377 2fcc78ee9558
equal deleted inserted replaced
1375:4f45bec005b8 1376:ad7e61edfb9d
     1 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
       
     2 
       
     3 import os.path
       
     4 import build
       
     5 
       
     6 version_file = open ('VERSION', 'r')
       
     7 version = version_file.readline ()
       
     8 version_file.close ()
       
     9 version = version.strip ()
       
    10 
       
    11 ns3 = build.Ns3()
       
    12 ns3.build_dir = 'build-dir'
       
    13 ns3.version = version
       
    14 ns3.name = 'ns3'
       
    15 ns3.distname = 'ns'
       
    16 ns3.doxygen_config = os.path.join('doc', 'doxygen.conf')
       
    17 ns3.add_extra_dist(os.path.join('doc', 'main.txt'))
       
    18 ns3.add_extra_dist ('doc/architecture.pdf')
       
    19 ns3.add_extra_dist ('doc/contributing.txt')
       
    20 ns3.add_extra_dist ('doc/build.txt')
       
    21 ns3.add_extra_dist ('doc/codingstd.txt')
       
    22 ns3.add_extra_dist ('doc/mercurial.txt')
       
    23 ns3.add_extra_dist ('README')
       
    24 ns3.add_extra_dist ('RELEASE_NOTES')
       
    25 ns3.add_extra_dist ('AUTHORS')
       
    26 ns3.add_extra_dist ('VERSION')
       
    27 
       
    28 ns3.add_extra_dist('doc/build-waf.txt')
       
    29 ns3.add_extra_dist('ns3/_placeholder_')
       
    30 for wscript in [
       
    31     "src/core/wscript",
       
    32     "src/node/wscript",
       
    33     "src/devices/p2p/wscript",
       
    34     "src/common/wscript",
       
    35     "src/applications/wscript",
       
    36     "src/simulator/wscript",
       
    37     "src/internet-node/wscript",
       
    38     "src/wscript",
       
    39     "utils/wscript",
       
    40     "samples/wscript",
       
    41     "examples/wscript",
       
    42     "wscript",
       
    43     ]:
       
    44     ns3.add_extra_dist(wscript)
       
    45 ns3.add_extra_dist('waf')
       
    46 ns3.add_extra_dist('waf.bat')
       
    47 
       
    48 #
       
    49 # The Core module
       
    50 #
       
    51 core = build.Ns3Module('core', 'src/core')
       
    52 ns3.add(core)
       
    53 core.add_sources([
       
    54     'callback-test.cc',
       
    55     'debug.cc',
       
    56     'assert.cc',
       
    57     'ptr.cc',
       
    58     'object.cc',
       
    59     'test.cc',
       
    60     'random-variable.cc',
       
    61     'rng-stream.cc',
       
    62     'uid-manager.cc',
       
    63     'default-value.cc',
       
    64     'command-line.cc',
       
    65     'type-name.cc',
       
    66     'component-manager.cc',
       
    67     ])
       
    68 env = Environment()
       
    69 if env['PLATFORM'] == 'posix' or env['PLATFORM'] == 'darwin' or env['PLATFORM'] == 'cygwin':
       
    70     core.add_external_dep('pthread')
       
    71     core.add_sources([
       
    72         'unix-system-wall-clock-ms.cc',
       
    73         ])
       
    74 elif env['PLATFORM'] == 'win32':
       
    75     core.add_sources([
       
    76         'win32-system-wall-clock-ms.cc',
       
    77         ])
       
    78 core.add_headers ([
       
    79     'uid-manager.h',
       
    80     'singleton.h',
       
    81 ])
       
    82 core.add_inst_headers([
       
    83     'system-wall-clock-ms.h',
       
    84     'empty.h',
       
    85     'callback.h',
       
    86     'ptr.h',
       
    87     'object.h',
       
    88     'debug.h',
       
    89     'assert.h',
       
    90     'fatal-error.h',
       
    91     'test.h',
       
    92     'random-variable.h',
       
    93     'rng-stream.h',
       
    94     'default-value.h',
       
    95     'command-line.h',
       
    96     'type-name.h',
       
    97     'component-manager.h',
       
    98     ])
       
    99 
       
   100 def config_core (env, config):
       
   101     retval = []
       
   102     # XXX This check is primitive but it should be
       
   103     # good enough for now.
       
   104     if config.CheckCHeader ('stdlib.h') == 1:
       
   105         retval.append ('#define HAVE_STDLIB_H 1')
       
   106         retval.append ('#define HAVE_GETENV 1')
       
   107     else:
       
   108         retval.append ('#undef HAVE_STDLIB_H')
       
   109         retval.append ('#undef HAVE_GETENV')
       
   110     return retval
       
   111 core.add_config (config_core)
       
   112 
       
   113 #
       
   114 # The Simulator module
       
   115 #
       
   116 simu = build.Ns3Module('simulator', 'src/simulator')
       
   117 ns3.add(simu)
       
   118 simu.add_dep('core')
       
   119 simu.add_external_dep('m')
       
   120 simu.add_sources([
       
   121     'high-precision.cc',
       
   122     'time.cc',
       
   123     'event-id.cc',
       
   124     'scheduler.cc',
       
   125     'scheduler-factory.cc',
       
   126     'scheduler-list.cc',
       
   127     'scheduler-heap.cc',
       
   128     'scheduler-map.cc',
       
   129     'event-impl.cc',
       
   130     'simulator.cc',
       
   131     ])
       
   132 simu.add_headers([
       
   133     'scheduler-heap.h',
       
   134     'scheduler-map.h',
       
   135     'scheduler-list.h'
       
   136     ])
       
   137 simu.add_inst_headers([
       
   138     'high-precision.h',
       
   139     'nstime.h',
       
   140     'event-id.h',
       
   141     'event-impl.h',
       
   142     'simulator.h',
       
   143     'scheduler.h',
       
   144     'scheduler-factory.h',
       
   145     'simulation-singleton.h',
       
   146     ])
       
   147 high_precision_as_double = ARGUMENTS.get('high-precision-as-double', 'n')
       
   148 if high_precision_as_double == 'y':
       
   149     simu.add_inst_header ('high-precision-double.h')
       
   150     simu.add_source ('high-precision-double.cc')
       
   151 else:
       
   152     simu.add_inst_headers ([
       
   153         'high-precision-128.h',
       
   154         'cairo-wideint-private.h'
       
   155         ])
       
   156     simu.add_sources ([
       
   157         'high-precision-128.cc',
       
   158         'cairo-wideint.c',
       
   159         ])
       
   160 
       
   161 def config_simulator (env, config):
       
   162     retval = []
       
   163     high_precision_as_double = ARGUMENTS.get('high-precision-as-double', 'n')
       
   164     if high_precision_as_double == 'y':
       
   165         retval.append ('#define USE_HIGH_PRECISION_DOUBLE 1')
       
   166     else:
       
   167         retval.append ('#undef USE_HIGH_PRECISION_DOUBLE')
       
   168     if config.CheckCHeader ('stdint.h') == 1:
       
   169         retval.append ('#define HAVE_STDINT_H 1')
       
   170     elif config.CheckCHeader ('inttypes.h') == 1:
       
   171         retval.append ('#define HAVE_INTTYPES_H 1')
       
   172     elif config.CheckCHeader ('sys/inttypes.h') == 1:
       
   173         retval.append ('#define HAVE_SYS_INT_TYPES_H 1')
       
   174     return retval
       
   175 simu.add_config (config_simulator)
       
   176     
       
   177 #
       
   178 # The Common module
       
   179 #
       
   180 common = build.Ns3Module('common', 'src/common')
       
   181 common.add_deps(['core', 'simulator'])
       
   182 ns3.add(common)
       
   183 common.add_sources([
       
   184     'buffer.cc',
       
   185     'chunk.cc',
       
   186     'header.cc',
       
   187     'trailer.cc',
       
   188     'packet-printer.cc',
       
   189     'packet-metadata.cc',
       
   190     'packet.cc',
       
   191     'tags.cc',
       
   192     'pcap-writer.cc',
       
   193     'variable-tracer-test.cc',
       
   194     'trace-context.cc',
       
   195     'trace-resolver.cc',
       
   196     'callback-trace-source.cc',
       
   197     'empty-trace-resolver.cc',
       
   198     'composite-trace-resolver.cc',
       
   199     'trace-root.cc',
       
   200     'data-rate.cc',
       
   201     ])
       
   202 common.add_headers ([
       
   203     ])
       
   204 common.add_inst_headers([
       
   205     'buffer.h',
       
   206     'chunk.h',
       
   207     'header.h',
       
   208     'trailer.h',
       
   209     'tags.h',
       
   210     'packet.h',
       
   211     'packet-printer.h',
       
   212     'packet-metadata.h',
       
   213     'uv-trace-source.h',
       
   214     'sv-trace-source.h',
       
   215     'fv-trace-source.h',
       
   216     'pcap-writer.h',
       
   217     'callback-trace-source.h',
       
   218     'trace-context.h',
       
   219     'trace-resolver.h',
       
   220     'empty-trace-resolver.h',
       
   221     'composite-trace-resolver.h',
       
   222     'array-trace-resolver.h',
       
   223     'trace-root.h',
       
   224     'terminal-trace-resolver.h',
       
   225     'data-rate.h',
       
   226     ])
       
   227 
       
   228 #
       
   229 # The Node module
       
   230 #
       
   231 node = build.Ns3Module ('node', 'src/node')
       
   232 ns3.add (node)
       
   233 node.add_deps (['core', 'common', 'simulator'])
       
   234 node.add_sources ([
       
   235     'node.cc',
       
   236     'ipv4-address.cc',
       
   237     'net-device.cc',
       
   238     'mac-address.cc',
       
   239     'llc-snap-header.cc',
       
   240     'ipv4-route.cc',
       
   241     'queue.cc',
       
   242     'drop-tail-queue.cc',
       
   243     'channel.cc',
       
   244     'node-list.cc',
       
   245     'socket.cc',
       
   246     'socket-factory.cc',
       
   247     'udp.cc',
       
   248     'ipv4.cc',
       
   249     'application.cc',
       
   250     ])
       
   251 node.add_inst_headers ([
       
   252     'node.h',
       
   253     'ipv4-address.h',
       
   254     'net-device.h',
       
   255     'mac-address.h',
       
   256     'ipv4-route.h',
       
   257     'queue.h',
       
   258     'drop-tail-queue.h',
       
   259     'llc-snap-header.h',
       
   260     'channel.h',
       
   261     'node-list.h',
       
   262     'socket.h',
       
   263     'socket-factory.h',
       
   264     'udp.h',
       
   265     'ipv4.h',
       
   266     'application.h',
       
   267     ])
       
   268 
       
   269 #
       
   270 # The Applications module
       
   271 #
       
   272 applications = build.Ns3Module ('applications', 'src/applications')
       
   273 ns3.add (applications)
       
   274 applications.add_deps (['node'])
       
   275 applications.add_sources ([
       
   276     'onoff-application.cc',
       
   277 ])
       
   278 applications.add_inst_headers ([
       
   279     'onoff-application.h',
       
   280 ])
       
   281 
       
   282 #
       
   283 # The Internet Node module
       
   284 #
       
   285 inode = build.Ns3Module ('internet-node', 'src/internet-node')
       
   286 ns3.add (inode)
       
   287 inode.add_deps (['node', 'routing'])
       
   288 inode.add_sources ([
       
   289     'internet-node.cc',
       
   290     'l3-demux.cc',
       
   291     'l3-protocol.cc',
       
   292     'ipv4-l4-demux.cc',
       
   293     'ipv4-l4-protocol.cc',
       
   294     'ipv4-header.cc',
       
   295     'udp-header.cc',
       
   296     'ipv4-checksum.cc',
       
   297     'ipv4-interface.cc',
       
   298     'ipv4-l3-protocol.cc',
       
   299     'ipv4-end-point.cc',
       
   300     'udp-l4-protocol.cc',
       
   301     'arp-header.cc',
       
   302     'arp-cache.cc',
       
   303     'arp-ipv4-interface.cc',
       
   304     'arp-l3-protocol.cc',
       
   305     'ipv4-loopback-interface.cc',
       
   306     'header-utils.cc',
       
   307     'udp-socket.cc',
       
   308     'ipv4-end-point-demux.cc',
       
   309     'arp-private.cc',
       
   310     'ipv4-impl.cc',
       
   311     'ipv4-private.cc',
       
   312     'ascii-trace.cc',
       
   313     'pcap-trace.cc',
       
   314     'udp-impl.cc',
       
   315 ])
       
   316 inode.add_headers ([
       
   317     'ipv4-checksum.h',
       
   318     'arp-header.h',
       
   319     'arp-cache.h',
       
   320     'arp-l3-protocol.h',
       
   321     'ipv4-loopback-interface.h',
       
   322     'l3-demux.h',
       
   323     'header-utils.h',
       
   324     'arp-ipv4-interface.h',
       
   325     'udp-socket.h',
       
   326     'udp-l4-protocol.h',
       
   327     'arp-private.h',
       
   328     'ipv4-impl.h',
       
   329     'ipv4-private.h',
       
   330     'ipv4-l3-protocol.h',
       
   331     'l3-protocol.h',
       
   332     'ipv4-l4-protocol.h',
       
   333     'ipv4-l4-demux.h',
       
   334     'ipv4-end-point-demux.h',
       
   335     'ipv4-end-point.h',
       
   336     'ipv4-header.h',
       
   337     'ipv4-interface.h',
       
   338     'udp-header.h',
       
   339     'sgi-hashmap.h',
       
   340     'udp-impl.h',
       
   341 ])
       
   342 inode.add_inst_headers ([
       
   343     'internet-node.h',
       
   344     'ascii-trace.h',
       
   345     'pcap-trace.h',
       
   346     'ipv4-header.h',
       
   347     'udp-header.h',
       
   348 ])
       
   349 
       
   350 #
       
   351 # The Point-to-point module
       
   352 #
       
   353 p2p = build.Ns3Module ('p2p', 'src/devices/p2p')
       
   354 ns3.add (p2p)
       
   355 p2p.add_deps (['node'])
       
   356 p2p.add_sources ([
       
   357     'p2p-net-device.cc',
       
   358     'p2p-channel.cc',
       
   359     'p2p-topology.cc',
       
   360     ])
       
   361 p2p.add_inst_headers ([
       
   362     'p2p-net-device.h',
       
   363     'p2p-channel.h',
       
   364     'p2p-topology.h',
       
   365     ])
       
   366 
       
   367 #
       
   368 # The Routing module
       
   369 #
       
   370 routing = build.Ns3Module('routing', 'src/routing')
       
   371 routing.add_deps(['core', 'node'])
       
   372 ns3.add(routing)
       
   373 routing.add_sources([
       
   374     'routing-environment.cc',
       
   375     'static-router.cc',
       
   376     'static-route-manager.cc',
       
   377     'static-route-manager-impl.cc',
       
   378     'candidate-queue.cc',
       
   379     ])
       
   380 routing.add_headers ([
       
   381     'candidate-queue.h',
       
   382     'static-route-manager-impl.h',
       
   383     ])
       
   384 routing.add_inst_headers([
       
   385     'routing-environment.h',
       
   386     'static-router.h',
       
   387     'static-route-manager.h',
       
   388     ])
       
   389 
       
   390 # utils
       
   391 run_tests = build.Ns3Module('run-tests', 'utils')
       
   392 ns3.add(run_tests)
       
   393 run_tests.set_executable()
       
   394 run_tests.add_deps(['core', 'simulator', 'common', 'routing'])
       
   395 run_tests.add_source('run-tests.cc')
       
   396 
       
   397 bench_object = build.Ns3Module('bench-object', 'utils')
       
   398 ns3.add(bench_object)
       
   399 bench_object.set_executable()
       
   400 bench_object.add_deps(['core'])
       
   401 bench_object.add_source('bench-object.cc')
       
   402 
       
   403 bench_packets = build.Ns3Module('bench-packets', 'utils')
       
   404 ns3.add(bench_packets)
       
   405 bench_packets.set_executable()
       
   406 bench_packets.add_deps (['core', 'common'])
       
   407 bench_packets.add_source('bench-packets.cc')
       
   408 
       
   409 bench_simu = build.Ns3Module('bench-simulator', 'utils')
       
   410 ns3.add(bench_simu)
       
   411 bench_simu.set_executable()
       
   412 bench_simu.add_dep('simulator')
       
   413 bench_simu.add_source('bench-simulator.cc')
       
   414 
       
   415 replay_simu = build.Ns3Module('replay-simulation', 'utils')
       
   416 ns3.add(replay_simu)
       
   417 replay_simu.set_executable()
       
   418 replay_simu.add_dep('simulator')
       
   419 replay_simu.add_source('replay-simulation.cc')
       
   420 
       
   421 
       
   422 # samples
       
   423 sample_debug = build.Ns3Module('sample-debug', 'samples')
       
   424 sample_debug.set_executable()
       
   425 ns3.add(sample_debug)
       
   426 sample_debug.add_dep('core')
       
   427 sample_debug.add_source('main-debug.cc')
       
   428 sample_debug.add_source('main-debug-other.cc')
       
   429 
       
   430 sample_packet_printer = build.Ns3Module('sample-packet-printer', 'samples')
       
   431 sample_packet_printer.set_executable()
       
   432 ns3.add(sample_packet_printer)
       
   433 sample_packet_printer.add_deps (['common', 'internet-node'])
       
   434 sample_packet_printer.add_source('main-packet-printer.cc')
       
   435 
       
   436 sample_callback = build.Ns3Module('sample-callback', 'samples')
       
   437 sample_callback.set_executable()
       
   438 ns3.add(sample_callback)
       
   439 sample_callback.add_dep('core')
       
   440 sample_callback.add_source('main-callback.cc')
       
   441 
       
   442 sample_ptr = build.Ns3Module('sample-ptr', 'samples')
       
   443 sample_ptr.set_executable()
       
   444 ns3.add(sample_ptr)
       
   445 sample_ptr.add_dep('core')
       
   446 sample_ptr.add_source('main-ptr.cc')
       
   447 
       
   448 sample_trace = build.Ns3Module('sample-trace', 'samples')
       
   449 #ns3.add(sample_trace)
       
   450 sample_trace.add_dep('common')
       
   451 sample_trace.set_executable()
       
   452 sample_trace.add_source('main-trace.cc')
       
   453 
       
   454 sample_query_interface = build.Ns3Module('sample-query-interface', 'samples')
       
   455 ns3.add(sample_query_interface)
       
   456 sample_query_interface.add_dep('common')
       
   457 sample_query_interface.set_executable()
       
   458 sample_query_interface.add_source('main-query-interface.cc')
       
   459 
       
   460 sample_simu = build.Ns3Module('sample-simulator', 'samples')
       
   461 ns3.add(sample_simu)
       
   462 sample_simu.set_executable()
       
   463 sample_simu.add_dep('simulator')
       
   464 sample_simu.add_source('main-simulator.cc')
       
   465 
       
   466 sample_packet = build.Ns3Module('sample-packet', 'samples')
       
   467 ns3.add(sample_packet)
       
   468 sample_packet.set_executable()
       
   469 sample_packet.add_dep('common')
       
   470 sample_packet.add_source('main-packet.cc')
       
   471 
       
   472 sample_test = build.Ns3Module('sample-test', 'samples')
       
   473 sample_test.set_executable()
       
   474 ns3.add(sample_test)
       
   475 sample_test.add_dep('core')
       
   476 sample_test.add_source('main-test.cc')
       
   477 
       
   478 sample_simple = build.Ns3Module('sample-simple', 'samples')
       
   479 sample_simple.set_executable()
       
   480 ns3.add(sample_simple)
       
   481 sample_simple.add_deps(['core', 'simulator', 'node', 'internet-node', 'routing'])
       
   482 sample_simple.add_source('main-simple.cc')
       
   483 
       
   484 sample_sp2p = build.Ns3Module('sample-simple-p2p', 'samples')
       
   485 sample_sp2p.set_executable()
       
   486 #n3.add(sample_sp2p)
       
   487 sample_sp2p.add_deps(['core', 'simulator', 'node', 'internet-node', 'p2p'])
       
   488 sample_sp2p.add_source('main-simple-p2p.cc')
       
   489 
       
   490 sample_default_value = build.Ns3Module('sample-default-value', 'samples')
       
   491 sample_default_value.set_executable()
       
   492 ns3.add(sample_default_value)
       
   493 sample_default_value.add_deps(['core', 'simulator', 'node', 'p2p'])
       
   494 sample_default_value.add_source('main-default-value.cc')
       
   495 
       
   496 sample_object = build.Ns3Module('sample-object', 'samples')
       
   497 sample_object.set_executable()
       
   498 ns3.add(sample_object)
       
   499 sample_object.add_deps(['core'])
       
   500 sample_object.add_source('main-object.cc')
       
   501 
       
   502 sample_component_manager = build.Ns3Module('sample-component-manager', 'samples')
       
   503 sample_component_manager.set_executable()
       
   504 ns3.add(sample_component_manager)
       
   505 sample_component_manager.add_deps(['core'])
       
   506 sample_component_manager.add_source('main-component-manager.cc')
       
   507 
       
   508 # examples
       
   509 example_simple_p2p = build.Ns3Module('simple-p2p', 'examples')
       
   510 example_simple_p2p.set_executable()
       
   511 ns3.add(example_simple_p2p)
       
   512 example_simple_p2p.add_deps(['core', 'simulator', 'node', 'p2p', 'internet-node', 'applications', 'routing'])
       
   513 example_simple_p2p.add_source('simple-p2p.cc')
       
   514 
       
   515 example_static_routing = build.Ns3Module('simple-static-routing', 'examples')
       
   516 example_static_routing.set_executable()
       
   517 ns3.add(example_static_routing)
       
   518 example_static_routing.add_deps(['core', 'simulator', 'node', 'p2p', 'internet-node', 'applications', 'routing'])
       
   519 example_static_routing.add_source('simple-static-routing.cc')
       
   520 
       
   521 ns3.generate_dependencies()