mirror of
https://github.com/google/pebble.git
synced 2025-05-23 03:34:55 +00:00
Import of the watch repository from Pebble
This commit is contained in:
commit
3b92768480
10334 changed files with 2564465 additions and 0 deletions
335
third_party/jerryscript/wscript
vendored
Normal file
335
third_party/jerryscript/wscript
vendored
Normal file
|
@ -0,0 +1,335 @@
|
|||
from waflib.ConfigSet import ConfigSet
|
||||
from waflib import Context, Errors, Task, TaskGen
|
||||
|
||||
class js_tooling(Task.Task):
|
||||
run_str = '${CC} ${CFLAGS} ${DEFINES_ST:DEFINES} ${CPPPATH_ST:INCPATHS} ${SRC} -o ${TGT[0].abspath()}'
|
||||
|
||||
|
||||
@TaskGen.feature('js_tooling')
|
||||
@TaskGen.before_method('process_source', 'process_rule')
|
||||
def process_js_tooling(self):
|
||||
task = self.create_task('js_tooling',
|
||||
self.jerry_sources,
|
||||
self.js_tooling_target)
|
||||
task.dep_nodes = self.js_deps
|
||||
|
||||
|
||||
JERRY_RUNTIME_HEAP_SIZE_KB = 32 # KB
|
||||
JERRY_COMPILER_HEAP_SIZE_KB = 512 # KB
|
||||
JERRY_CORE_DIRS = ['jerry-core',
|
||||
'jerry-core/jcontext',
|
||||
'jerry-core/jmem',
|
||||
'jerry-core/jrt',
|
||||
'jerry-core/lit',
|
||||
'jerry-core/vm',
|
||||
'jerry-core/ecma/builtin-objects',
|
||||
'jerry-core/ecma/base',
|
||||
'jerry-core/ecma/operations',
|
||||
'jerry-core/parser/js',
|
||||
'jerry-core/parser/regexp',
|
||||
]
|
||||
|
||||
def _get_jerry_include_dirs(bld):
|
||||
include_dirs = JERRY_CORE_DIRS
|
||||
if bld.variant == 'test':
|
||||
include_dirs.append('third-party/valgrind')
|
||||
return include_dirs
|
||||
|
||||
def jerry_build_js_compiler(bld):
|
||||
# Set the output node for JS tooling in the primary build ConfigSet
|
||||
bld.env.JS_TOOLING_SCRIPT = bld.path.get_bld().make_node('js_tooling/generate_snapshot.js')
|
||||
|
||||
env = bld.all_envs['emscripten']
|
||||
|
||||
# A few values to experiment with, while 'speed' is nice for experimentation,
|
||||
# and None seems to be ok, we should probably stick to 'size' at the cost of
|
||||
# a longer build time once this whole task got cleaned up
|
||||
optimize = 'size'
|
||||
# optimize = 'size'
|
||||
# optimize = 'speed'
|
||||
if optimize == 'size':
|
||||
env.append_value('CFLAGS', ['-Oz'])
|
||||
env.append_value('CFLAGS', ['--llvm-lto', '3'])
|
||||
env.append_value('CFLAGS', ['--closure', '1'])
|
||||
elif optimize == 'speed':
|
||||
env.append_value('CFLAGS', ['-O3'])
|
||||
else:
|
||||
env.append_value('CFLAGS', ['-O0'])
|
||||
env.append_value('CFLAGS', ['-g3'])
|
||||
|
||||
fw_path = bld.path.parent.parent
|
||||
|
||||
|
||||
env['CPPPATH_ST'] = '-I%s'
|
||||
|
||||
include_dirs = _get_jerry_include_dirs(bld)
|
||||
env.append_value('INCPATHS', [bld.path.find_node(d).abspath() for d in include_dirs])
|
||||
env.append_value('INCPATHS', fw_path.abspath())
|
||||
|
||||
env['DEFINES_ST'] = '-D%s'
|
||||
|
||||
env.append_value('DEFINES', [
|
||||
'JERRY_ENABLE_LOG',
|
||||
'CONFIG_MEM_HEAP_AREA_SIZE={}'.format(JERRY_COMPILER_HEAP_SIZE_KB * 1024),
|
||||
])
|
||||
|
||||
bytecode_version = bld.capability('JAVASCRIPT_BYTECODE_VERSION')
|
||||
env.append_value('DEFINES',
|
||||
'CAPABILITY_JAVASCRIPT_BYTECODE_VERSION={}'.format(bytecode_version))
|
||||
env.append_value('DEFINES', 'JERRY_RETURN_ADDRESS=0') # provide proper error handling w fake
|
||||
|
||||
# Emscripten specific arguments
|
||||
post_file = bld.path.make_node('js_tooling/_js_tooling.js').abspath()
|
||||
env.append_value('CFLAGS', ['--post-js', post_file])
|
||||
|
||||
transform_js_file = bld.path.make_node('js_tooling/transform_js.py').abspath()
|
||||
env.append_value('CFLAGS', ['--js-transform', transform_js_file])
|
||||
|
||||
# tell Emscripten to create a single file
|
||||
env.append_value('CFLAGS', ['--memory-init-file', '0'])
|
||||
|
||||
# Uncomment this line to get verbose output for emscripten
|
||||
# env.append_value('CFLAGS', ['-v'])
|
||||
|
||||
# keep these functions so that they are not optimized out
|
||||
exported_functions = ("_jerry_init",
|
||||
"_jerry_cleanup",
|
||||
"_jerry_parse_and_save_snapshot_from_zt_utf8_string",
|
||||
"_legacy_defective_checksum_memory",
|
||||
"_rocky_fill_header",
|
||||
"_jerry_port_set_errormsg_handler")
|
||||
env.append_value('CFLAGS', ['-s', 'EXPORTED_FUNCTIONS=[{}]'.format(
|
||||
', '.join(('"' + f + '"' for f in exported_functions)))])
|
||||
|
||||
# so we can call jerry_port_set_errormsg_handler() with a JS function pointer
|
||||
env.append_value('CFLAGS', ['-s', 'RESERVED_FUNCTION_POINTERS=1'])
|
||||
|
||||
env.append_value('CFLAGS', ['-s', 'ERROR_ON_UNDEFINED_SYMBOLS=0'])
|
||||
|
||||
sources = bld.path.ant_glob('jerry-core/**/*.c')
|
||||
sources += bld.path.ant_glob('js_tooling/*.c')
|
||||
sources += fw_path.ant_glob('util/legacy_checksum.c')
|
||||
|
||||
js_deps = [bld.path.find_node(x) for x in ('js_tooling/_js_tooling.js', 'js_tooling/transform_js.py')]
|
||||
|
||||
output_node = bld.path.get_bld().make_node('js_tooling/js_tooling.js')
|
||||
output_node.parent.mkdir()
|
||||
bld(features=['js_tooling', 'use'],
|
||||
jerry_sources=sources,
|
||||
js_tooling_target=output_node,
|
||||
js_deps=js_deps,
|
||||
use=['jerry_common_config'],
|
||||
env=env)
|
||||
|
||||
bld.path.find_node('js_tooling').get_bld().mkdir()
|
||||
for resource in ('index.js', 'generate_snapshot.js', 'package.json', 'test.html'):
|
||||
src_node = bld.path.find_node('js_tooling/{}'.format(resource))
|
||||
bld(rule='cp ${SRC} ${TGT}', source=src_node, target=src_node.get_bld(), env=env)
|
||||
|
||||
bld(rule='${NPM} install .',
|
||||
source=[output_node, bld.path.get_bld().make_node('js_tooling/package.json')],
|
||||
target=bld.path.get_bld().make_node('js_tooling/node_modules/'),
|
||||
cwd=bld.path.get_bld().find_node('js_tooling/').abspath(),
|
||||
env=env)
|
||||
|
||||
|
||||
def configure(conf):
|
||||
conf.load('c_inject_include_files')
|
||||
|
||||
# Create a new environment for emscipten and configure it with the location of our emcc binary
|
||||
prev_env = conf.variant
|
||||
conf.setenv('emscripten')
|
||||
|
||||
missing_emcscripten = """
|
||||
'emcc' cannot be found on the system.
|
||||
|
||||
Please install Emscripten using the instructions on the wiki: https://pebbletechnology.atlassian.net/wiki/display/DEV/Emscripten
|
||||
"""
|
||||
|
||||
conf.find_program('emcc', errmsg=missing_emcscripten, var='CC')
|
||||
conf.find_program('em-config')
|
||||
conf.find_program('npm', var='NPM')
|
||||
|
||||
conf.setenv(prev_env)
|
||||
|
||||
|
||||
def build(bld):
|
||||
def run_cmd(cmd):
|
||||
try:
|
||||
return bld.cmd_and_log(cmd, quiet=Context.BOTH).strip()
|
||||
except Errors.WafError as e:
|
||||
print e
|
||||
return "unknown"
|
||||
|
||||
# Build jerry_common_config.
|
||||
# These are shared defines for jerry-core, jerry-libm, js_tooling and
|
||||
# jerry-port (part of applib).
|
||||
#############################################
|
||||
wrap_quotes = lambda s: '"{}"'.format(s)
|
||||
jerry_common_defines_dict = {
|
||||
'JERRY_BRANCH_NAME': wrap_quotes(run_cmd('git symbolic-ref -q HEAD')),
|
||||
'JERRY_COMMIT_HASH': wrap_quotes(run_cmd('git rev-parse HEAD')),
|
||||
'JERRY_BUILD_DATE': wrap_quotes(run_cmd('date +%d/%m/%Y')),
|
||||
'CONFIG_ECMA_NUMBER_TYPE': 'CONFIG_ECMA_NUMBER_FLOAT64',
|
||||
'CONFIG_DISABLE_PRINT_BUILTIN': '',
|
||||
'JERRY_DISABLE_HEAVY_DEBUG': '',
|
||||
'JERRY_ENABLE_SNAPSHOT_SAVE': '',
|
||||
'JERRY_ENABLE_ERROR_MESSAGES': '1',
|
||||
}
|
||||
jerry_common_defines = [
|
||||
'{}={}'.format(k, v) for k, v in jerry_common_defines_dict.iteritems()]
|
||||
bld(export_defines=jerry_common_defines, name='jerry_common_config')
|
||||
|
||||
# Build jerry_runtime_config.
|
||||
# These are not used by js_tooling
|
||||
#############################################
|
||||
jerry_common_runtime_defines_dict = {
|
||||
'CONFIG_MEM_HEAP_AREA_SIZE': JERRY_RUNTIME_HEAP_SIZE_KB * 1024,
|
||||
'JMEM_STATS': '1',
|
||||
}
|
||||
jerry_common_runtime_defines = [
|
||||
'{}={}'.format(k, v) for k, v in jerry_common_runtime_defines_dict.iteritems()]
|
||||
bld(export_defines=jerry_common_runtime_defines, name='jerry_runtime_config')
|
||||
|
||||
|
||||
# Build jerry_port_includes
|
||||
#############################################
|
||||
bld(export_includes=_get_jerry_include_dirs(bld), name='jerry_port_includes')
|
||||
|
||||
# If the current build doesn't want javascript, just build a header-only library so the
|
||||
# headers will continue to be available
|
||||
if not bld.capability('HAS_JAVASCRIPT') or bld.variant in ('prf', 'applib', 'test_rocky_emx'):
|
||||
bld(export_includes=['jerry-core'], name='jerry_core')
|
||||
return
|
||||
|
||||
|
||||
# Define flags common to both jerry-core and jerry-libm
|
||||
#############################################
|
||||
|
||||
# cflags from Makefile.pebble, used in both jerry-libm and jerry-core
|
||||
pebble_cflags = ['-Wno-error=format',
|
||||
'-Wno-error=unused-parameter',
|
||||
'-Wno-error=unused-variable',
|
||||
'-Wno-error=unused-function',
|
||||
'-Wno-pedantic']
|
||||
|
||||
if bld.variant == 'test':
|
||||
pebble_cflags += ['-Wno-conversion',
|
||||
'-Wno-unknown-warning-option']
|
||||
|
||||
# cflags from COMPILE_FLAGS_JERRY CMakeLists.txt, passed to both compile and link stages
|
||||
# in the original build script for the jerry-core sources
|
||||
compile_flags_jerry = ['-fno-builtin',
|
||||
'-fno-stack-protector',
|
||||
'-g',
|
||||
'-gdwarf-4',
|
||||
'-Wall',
|
||||
'-Werror=all',
|
||||
'-Wextra',
|
||||
'-Werror=extra',
|
||||
'-Wformat-nonliteral',
|
||||
'-Werror=format-nonliteral',
|
||||
'-Winit-self',
|
||||
'-Werror=init-self',
|
||||
'-Wconversion',
|
||||
'-Werror=conversion',
|
||||
'-Wsign-conversion',
|
||||
'-Werror=sign-conversion',
|
||||
'-Wformat-security',
|
||||
'-Werror=format-security',
|
||||
'-Wmissing-declarations',
|
||||
'-Werror=missing-declarations',
|
||||
'-Wno-stack-protector',
|
||||
'-Wno-attributes',
|
||||
'-Wlogical-op',
|
||||
'-Werror=logical-op',
|
||||
'-Wno-strict-aliasing'
|
||||
]
|
||||
|
||||
# cflags from C_FLAGS_JERRY CMakeLists.txt, passed to only the compile stage
|
||||
# in the original build script to both jerry-core and fblibm
|
||||
c_flags_jerry = ['-std=c99']
|
||||
|
||||
|
||||
# Build the jerry-core static library
|
||||
#############################################
|
||||
jerry_core_env = bld.env.derive()
|
||||
|
||||
all_jerry_flags = compile_flags_jerry + c_flags_jerry + pebble_cflags
|
||||
if bld.variant == 'test':
|
||||
all_jerry_flags.append('-DJERRY_VALGRIND')
|
||||
jerry_core_env.append_value('CFLAGS', all_jerry_flags)
|
||||
|
||||
jerry_core_env.append_value('DEFINES', [
|
||||
'CONFIG_ECMA_LCACHE_DISABLE', # PBL-40394: Hash table didn't fit.
|
||||
'JERRY_ENABLE_SNAPSHOT_EXEC',
|
||||
'JERRY_NDEBUG'
|
||||
])
|
||||
|
||||
jerry_core_include_dirs = _get_jerry_include_dirs(bld)
|
||||
|
||||
jerry_core_env.append_value('INCLUDES', [bld.path.find_node(d).abspath()
|
||||
for d in jerry_core_include_dirs])
|
||||
jerry_core_source_excl = [
|
||||
'jcontext/jcontext.c', # implementation provided by our own jerry_port.c
|
||||
]
|
||||
jerry_core_sources = sum(
|
||||
[bld.path.ant_glob(d + '/*.c', excl=' '.join(jerry_core_source_excl))
|
||||
for d in JERRY_CORE_DIRS], [])
|
||||
|
||||
pbl_jcontext_inc_h_node = bld.srcnode.find_node(
|
||||
'src/fw/applib/rockyjs/pbl_jcontext.inc.h')
|
||||
pbl_jcontext_inc_h_rel_path = pbl_jcontext_inc_h_node.path_from(bld.path)
|
||||
|
||||
bld.stlib(source=jerry_core_sources,
|
||||
target='jerry_core',
|
||||
export_includes=['jerry-core'],
|
||||
use=['jerry_common_config', 'jerry_runtime_config'],
|
||||
inject_include_files=[pbl_jcontext_inc_h_rel_path],
|
||||
env=jerry_core_env)
|
||||
|
||||
|
||||
# Build the jerry-libm static library
|
||||
#############################################
|
||||
jerry_libm_env = bld.env.derive()
|
||||
|
||||
compile_flags_libm = ['-Wno-error=parentheses',
|
||||
'-Wno-error=sign-compare',
|
||||
'-Wno-error=sign-conversion',
|
||||
'-Wno-error=strict-aliasing',
|
||||
'-Wno-error=unknown-pragmas',
|
||||
'-Wno-error=missing-declarations',
|
||||
'-Wno-error=maybe-uninitialized',
|
||||
'-Wno-error=unused-but-set-variable',
|
||||
'-Wno-error=unused-variable',
|
||||
'-Wno-error=conversion',
|
||||
'-Wno-sign-conversion',
|
||||
'-Wno-sign-compare',
|
||||
'-Wno-parentheses',
|
||||
'-Wno-maybe-uninitialized',
|
||||
'-Wno-unknown-pragmas',
|
||||
'-Wno-unused-but-set-variable',
|
||||
'-Wno-unused-variable',
|
||||
'-fno-lto']
|
||||
|
||||
all_libm_flags = compile_flags_libm + c_flags_jerry + pebble_cflags
|
||||
jerry_libm_env.append_value('CFLAGS', all_libm_flags)
|
||||
|
||||
jerry_libm_dir = 'jerry-libm'
|
||||
|
||||
jerry_libm_env.append_value('INCLUDES', [jerry_libm_dir + '/include'])
|
||||
|
||||
jerry_libm_sources = bld.path.ant_glob(jerry_libm_dir + '/*.c')
|
||||
|
||||
bld.stlib(source=jerry_libm_sources,
|
||||
target='libm',
|
||||
name='jerry_libm',
|
||||
use=['jerry_common_config', 'jerry_runtime_config'],
|
||||
env=jerry_libm_env)
|
||||
|
||||
if bld.variant == 'test':
|
||||
return
|
||||
|
||||
jerry_build_js_compiler(bld)
|
||||
|
||||
# vim:filetype=python
|
Loading…
Add table
Add a link
Reference in a new issue