160 lines
4.2 KiB
Python
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,
|
|
)
|