125 lines
3.2 KiB
Python
125 lines
3.2 KiB
Python
# -*- python -*-
|
|
import os.path
|
|
|
|
Import('env testruns')
|
|
|
|
dist_headers = [
|
|
'hammer.h',
|
|
'allocator.h',
|
|
'compiler_specifics.h',
|
|
'glue.h',
|
|
'internal.h',
|
|
'platform.h'
|
|
]
|
|
|
|
parsers_headers = [
|
|
'parsers/parser_internal.h'
|
|
]
|
|
|
|
backends_headers = [
|
|
'backends/regex.h',
|
|
'backends/contextfree.h'
|
|
]
|
|
|
|
parsers = ['parsers/%s.c'%s for s in
|
|
['action',
|
|
'and',
|
|
'attr_bool',
|
|
'bind',
|
|
'bits',
|
|
'butnot',
|
|
'ch',
|
|
'charset',
|
|
'choice',
|
|
'difference',
|
|
'end',
|
|
'endianness',
|
|
'epsilon',
|
|
'ignore',
|
|
'ignoreseq',
|
|
'indirect',
|
|
'int_range',
|
|
'many',
|
|
'not',
|
|
'nothing',
|
|
'optional',
|
|
'permutation',
|
|
'sequence',
|
|
'token',
|
|
'unimplemented',
|
|
'whitespace',
|
|
'xor',
|
|
'value']]
|
|
|
|
backends = ['backends/%s.c' % s for s in
|
|
['packrat', 'llk', 'regex', 'glr', 'lalr', 'lr', 'lr0']]
|
|
|
|
misc_hammer_parts = [
|
|
'allocator.c',
|
|
'benchmark.c',
|
|
'bitreader.c',
|
|
'bitwriter.c',
|
|
'cfgrammar.c',
|
|
'datastructures.c',
|
|
'desugar.c',
|
|
'glue.c',
|
|
'hammer.c',
|
|
'pprint.c',
|
|
'registry.c',
|
|
'system_allocator.c',
|
|
'sloballoc.c']
|
|
|
|
if env['PLATFORM'] == 'win32':
|
|
misc_hammer_parts += [
|
|
'platform_win32.c',
|
|
'tsearch.c',
|
|
]
|
|
else:
|
|
misc_hammer_parts += ['platform_bsdlike.c']
|
|
|
|
ctests = ['t_benchmark.c',
|
|
't_bitreader.c',
|
|
't_bitwriter.c',
|
|
't_parser.c',
|
|
't_grammar.c',
|
|
't_misc.c',
|
|
't_mm.c',
|
|
't_regression.c']
|
|
|
|
|
|
static_library_name = 'hammer'
|
|
build_shared_library=True
|
|
if env['PLATFORM'] == 'win32':
|
|
# FIXME(windows): symbols in hammer are not exported yet, a shared lib would be useless
|
|
build_shared_library=False
|
|
# prevent collision between .lib from dll and .lib for static lib
|
|
static_library_name = 'hammer_s'
|
|
|
|
libhammer_shared = env.SharedLibrary('hammer', parsers + backends + misc_hammer_parts)
|
|
libhammer_static = env.StaticLibrary(static_library_name, parsers + backends + misc_hammer_parts)
|
|
if build_shared_library:
|
|
Default(libhammer_shared, libhammer_static)
|
|
env.Install('$libpath', [libhammer_static, libhammer_shared])
|
|
else:
|
|
Default(libhammer_static)
|
|
env.Install('$libpath', [libhammer_static])
|
|
|
|
env.Install('$incpath', dist_headers)
|
|
env.Install('$parsersincpath', parsers_headers)
|
|
env.Install('$backendsincpath', backends_headers)
|
|
env.Install('$pkgconfigpath', '../../../libhammer.pc')
|
|
|
|
if GetOption('with_tests'):
|
|
testenv = env.Clone()
|
|
testenv.ParseConfig('pkg-config --cflags --libs glib-2.0')
|
|
testenv.Append(LIBS=['hammer'])
|
|
testenv.Prepend(LIBPATH=['.'])
|
|
ctestexec = testenv.Program('test_suite', ctests + ['test_suite.c'], LINKFLAGS='--coverage' if testenv.GetOption('coverage') else None)
|
|
ctest = Alias('testc', [ctestexec], ''.join(['env LD_LIBRARY_PATH=', os.path.dirname(ctestexec[0].path), ' ', ctestexec[0].path]))
|
|
AlwaysBuild(ctest)
|
|
testruns.append(ctest)
|
|
|
|
Export('libhammer_static libhammer_shared')
|
|
|
|
for b in env['bindings']:
|
|
env.SConscript(['bindings/%s/SConscript' % b])
|