NORM-mirror/wscript

160 lines
4.2 KiB
Python

#!/usr/bin/env
'''
wscript - Waf build script for NORM
See http://waf.googlecode.com/ for more information.
In order to use different build directories (for example, a release and a debug
build), use the -o (--out) flag when configuring. For example:
./waf configure -o build-debug --debug
./waf
./waf configure -o build-release
./waf
'''
import platform
import waflib
# So you don't need to do ./waf configure if you are just using the defaults
waflib.Configure.autoconfig = True
# Top-level project directory
top = '.'
# Directory where build files are placed
out = 'build'
# System waf is running on: linux, darwin (Mac OSX), freebsd, windows, etc.
system = platform.system().lower()
def options(ctx):
ctx.recurse('protolib')
def configure(ctx):
ctx.recurse('protolib')
# Use this USE variable to add flags to NORM's compilation
ctx.env.USE_BUILD_NORM += ['BUILD_NORM', 'protolib']
if system in ('linux', 'darwin', 'freebsd'):
ctx.env.DEFINES_BUILD_NORM += ['ECN_SUPPORT']
if system == 'windows':
ctx.env.DEFINES_BUILD_NORM += ['NORM_USE_DLL']
def build(ctx):
ctx.recurse('protolib')
ctx.shlib(
target = 'norm',
includes = ['include'],
export_includes = ['include'],
vnum = '1.0.0',
use = ctx.env.USE_BUILD_NORM,
source = ['src/common/{0}.cpp'.format(x) for x in [
'galois',
'normApi',
'normEncoder',
'normEncoderMDP',
'normEncoderRS16',
'normEncoderRS8',
'normFile',
'normMessage',
'normNode',
'normObject',
'normSegment',
'normSession',
]],
)
if ctx.env.BUILD_PYTHON:
ctx(
features='py',
source=ctx.path.ant_glob('src/pynorm/**/*.py'),
install_from='src',
)
if ctx.env.BUILD_JAVA:
ctx.shlib(
target = 'mil_navy_nrl_norm',
use = ['norm', 'JAVA'],
source = ['src/java/jni/{0}.cpp'.format(x) for x in [
'normJni',
'normInstanceJni',
'normSessionJni',
'normObjectJni',
'normDataJni',
'normFileJni',
'normStreamJni',
'normEventJni',
'normNodeJni',
]],
)
ctx(
features = ['javac', 'jar'],
srcdir = 'src/java/src',
outdir = 'src/java/src',
basedir = 'src/java/src',
destfile = 'norm.jar',
)
normapp = ctx.program(
target = 'norm',
# Need to explicitly set a different name, because the library is also
# named "norm"
name = 'normapp',
use = ['protolib', 'norm'],
source = ['src/common/{0}'.format(x) for x in [
'normPostProcess.cpp',
'normApp.cpp',
]],
# Disabled by default
posted = True,
)
if system in ('linux', 'darwin', 'freebsd'):
normapp.source.append('src/unix/unixPostProcess.cpp')
if system == 'windows':
normapp.source.append('src/win32/win32PostProcess.cpp')
for example in (
'normDataExample',
'normDataRecv',
'normDataSend',
'normFileRecv',
'normFileSend',
'normStreamRecv',
'normStreamSend',
):
_make_simple_example(ctx, example)
for prog in (
'fecTest',
'normPrecode',
'normTest',
'normThreadTest',
'raft',
):
_make_simple_example(ctx, prog, 'src/common')
# Enable example targets specified on the command line
ctx._parse_targets()
def _make_simple_example(ctx, name, path='examples'):
'''Makes a task from a single source file in the examples directory.
These tasks are not built by default. Use the --targets flag.
'''
ctx.program(
target = name,
use = ['protolib', 'norm'],
source = ['{0}/{1}.cpp'.format(path, name)],
# Don't build examples by default
posted = True,
# Don't install examples
install_path = False,
)