mirror of
https://github.com/google/pebble.git
synced 2025-03-15 08:41:21 +00:00
137 lines
4.6 KiB
Python
137 lines
4.6 KiB
Python
from waflib import Logs
|
|
|
|
|
|
def em_resource(task):
|
|
packager = task.env.EMSCRIPTEN_ROOT + '/tools/file_packager.py'
|
|
task.exec_command(['python',
|
|
packager,
|
|
task.outputs[0].abspath(),
|
|
'--embed',
|
|
task.inputs[0].abspath(),
|
|
'--js-output=' + task.outputs[0].abspath()])
|
|
|
|
|
|
def configure(conf):
|
|
conf.find_program('node', var='NODE', errmsg='node is not installed')
|
|
|
|
# Make sure we're about to modify the 'local' conf:
|
|
prev_env = conf.env
|
|
conf.set_env(conf.all_envs['local'])
|
|
|
|
conf.load('emscripten')
|
|
|
|
# The standard lib emscripten bundles uses a different format
|
|
# for its stack guard!!
|
|
conf.env.CFLAGS.append('-D_TIME_H')
|
|
|
|
# For unit tests: DUMA depends on pthread,
|
|
# which I didn't get to work with emscripten.
|
|
conf.env.DEFINES.append('DUMA_DISABLED')
|
|
|
|
# Flags that emcc doesn't support, just remove them:
|
|
unwanted_cflags = ['-gdwarf-4']
|
|
|
|
if 'RELEASE' not in conf.env.DEFINES:
|
|
conf.env.EMCC_DEBUG = 2
|
|
conf.env['CFLAGS'].extend(['-g4'])
|
|
unwanted_cflags.extend(['-g3', '-g'])
|
|
|
|
conf.env['CFLAGS'] = filter(
|
|
lambda flag: flag not in unwanted_cflags,
|
|
conf.env['CFLAGS']
|
|
)
|
|
|
|
conf.env.EMX_OTHER_SETTINGS = [
|
|
'SAFE_HEAP=1',
|
|
# absurdly large value so we don't worry:
|
|
'RESERVED_FUNCTION_POINTERS=1000',
|
|
'ERROR_ON_UNDEFINED_SYMBOLS=1'
|
|
]
|
|
|
|
conf.add_platform_defines(conf.env)
|
|
|
|
conf.recurse('integration_tests')
|
|
|
|
conf.setenv('emscripten', conf.env)
|
|
|
|
conf.set_env(prev_env)
|
|
|
|
|
|
def apply_config_for_applib_and_test_rocky_emx_builds(bld):
|
|
bld.env.DEFINES.append("APPLIB_EMSCRIPTEN=1")
|
|
|
|
# __builtin_return_address() doesn't seem to be supported by Emscripten,
|
|
# it fail at runtime due to a missing `llvm_return_address` function.
|
|
bld.env.CFLAGS.extend(['-D__builtin_return_address(level)=(0)'])
|
|
|
|
jerry_api_js = bld.path.make_node('jerry_api.js')
|
|
timeshift_js = bld.path.find_node('timeshift-js/timeshift.js')
|
|
html_binding_js = bld.path.make_node('html-binding.js')
|
|
bld.env.EMX_PRE_JS_FILES = [jerry_api_js, timeshift_js]
|
|
bld.env.EMX_POST_JS_FILES = [html_binding_js]
|
|
# use external transformation script instead of --pre-js and --post-js so
|
|
# we can replace functions and wrap entire file without interfering with
|
|
# --embed-file
|
|
transform_js_node_and_args = [bld.path.make_node('transform_js.py')]
|
|
if bld.variant == 'test_rocky_emx':
|
|
transform_js_node_and_args.append(' --unittest')
|
|
bld.env.EMX_TRANSFORM_JS_NODE_AND_ARGS = transform_js_node_and_args
|
|
|
|
|
|
def build(bld):
|
|
if bld.variant == 'test':
|
|
bld.recurse('tests')
|
|
return
|
|
|
|
# Extend waf's 'cprogram' feature with Emscripten-specific things:
|
|
bld.load('emscripten')
|
|
|
|
apply_config_for_applib_and_test_rocky_emx_builds(bld)
|
|
|
|
# Fine to use 'stlib' here vs emscripten_program, because we're only
|
|
# invoking emcc to generate an archive file, so only 'standard' compiler
|
|
# flags need to be passed.
|
|
bld.objects(source=['emscripten_jerry_api.c'],
|
|
target='emscripten_jerry_api',
|
|
use=['jerry_port_includes'])
|
|
|
|
if bld.variant == 'test_rocky_emx':
|
|
return
|
|
|
|
# Copy stuff from html folder:
|
|
html_node = bld.path.find_dir('html')
|
|
html_bld_node = bld.path.get_bld().make_node('html')
|
|
for file in html_node.ant_glob('**/*'):
|
|
bld(rule="cp ${SRC} ${TGT}",
|
|
source=file,
|
|
target=html_bld_node.make_node(file.path_from(html_node)))
|
|
|
|
pbpack = bld.path.parent.parent.get_bld().make_node('system_resources.pbpack')
|
|
exported_functions = bld.path.make_node('exported_functions.json')
|
|
sources = bld.path.ant_glob('*.c', excl='emscripten_jerry_api.c')
|
|
rockyjs_node = html_bld_node.make_node('rocky.js')
|
|
bld.program(source=sources,
|
|
target=rockyjs_node,
|
|
emx_pre_js_files=[],
|
|
emx_post_js_files=[],
|
|
emx_exported_functions=exported_functions,
|
|
emx_other_settings=[],
|
|
emx_embed_files=[pbpack],
|
|
use=['emscripten_jerry_api',
|
|
'applib',
|
|
'applib_includes',
|
|
'nanopb',
|
|
'fw_includes',
|
|
'libutil',
|
|
'upng'])
|
|
|
|
bld.recurse('integration_tests')
|
|
|
|
def print_index_html_path(bld):
|
|
index_html_path = html_bld_node.find_node('index.html').abspath()
|
|
Logs.pprint('PINK',
|
|
'Built Rocky Simulator: file://{}'.format(index_html_path))
|
|
bld.add_post_fun(print_index_html_path)
|
|
|
|
|
|
# vim:filetype=python
|