Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: meson.build

Issue 29661608: Issue 6241 - Allow a native build. (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore/
Patch Set: addressed comments Created Jan. 11, 2018, 8:40 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: meson.build
===================================================================
--- a/meson.build
+++ b/meson.build
@@ -1,44 +1,59 @@
-project('adblockpluscore', license: ['GPL3'], meson_version: '>0.40.0')
+project('adblockpluscore', 'cpp', license: ['GPL3'], meson_version: '>0.40.0')
-# locate emscripten-config
-python = import('python3').find_python()
-emscripten_config = get_option('emscripten-config')
-command = run_command(python, '-c', 'import os.path, sys;print(os.path.expanduser(sys.argv[1]))', emscripten_config)
-if command.returncode() != 0
- error(command.stderr().strip())
+native = get_option('native')
+if native
+ target_type='native'
+else
+ target_type='js'
endif
-emscripten_config = command.stdout().strip()
-message('Emscripten config file: ' + emscripten_config)
-# locate emcc
-command = run_command(python, '-c', 'import sys;exec(open(sys.argv[1]).read());print(EMSCRIPTEN_ROOT)', emscripten_config)
-if command.returncode() != 0
- error(command.stderr().strip())
+if target_type == 'js'
+ # locate emscripten-config
+ python = import('python3').find_python()
+ emscripten_config = get_option('emscripten-config')
+ command = run_command(python, '-c', 'import os.path, sys;print(os.path.expanduser(sys.argv[1]))', emscripten_config)
+ if command.returncode() != 0
+ error(command.stderr().strip())
+ endif
+ emscripten_config = command.stdout().strip()
+ message('Emscripten config file: ' + emscripten_config)
+
+ # locate emcc
+ command = run_command(python, '-c', 'import sys;exec(open(sys.argv[1]).read());print(EMSCRIPTEN_ROOT)', emscripten_config)
+ if command.returncode() != 0
+ error(command.stderr().strip())
+ endif
+ emcc = join_paths(command.stdout().strip(), 'emcc')
+ emcc = find_program(emcc)
+
+ # locate node
+ command = run_command(python, '-c', 'import sys;exec(open(sys.argv[1]).read());print(NODE_JS)', emscripten_config)
+ if command.returncode() != 0
+ error(command.stderr().strip())
+ endif
+ nodejs = find_program(command.stdout().strip(), 'node', 'nodejs')
endif
-emcc = join_paths(command.stdout().strip(), 'emcc')
-emcc = find_program(emcc)
-
-# locate node
-command = run_command(python, '-c', 'import sys;exec(open(sys.argv[1]).read());print(NODE_JS)', emscripten_config)
-if command.returncode() != 0
- error(command.stderr().strip())
-endif
-nodejs = find_program(command.stdout().strip(), 'node', 'nodejs')
JS_LIBRARY = files(join_paths('compiled', 'library.js'))
BINDINGS_JS_LIBRARY = files(join_paths('compiled', 'bindings', 'library.js'))
BINDINGS_GENERATOR = 'bindings.cpp.js'
BINDINGS_OUTPUT = 'bindings.js'
COMPILER_OUTPUT = 'compiled.js'
# params for emcc compilation
-ADDITIONAL_PARAMS = [ '-O3', '-m32', '-std=c++1z', '--memory-init-file', '0',
- '--emit-symbol-map', '-Wall', '-Werror',
+ADDITIONAL_PARAMS = [ '-O3', '-std=c++1z', '-Wall', '-Werror',
'-fno-rtti' ]
+if target_type == 'js'
+# CXXFLAGS specific to emcc
+ ADDITIONAL_PARAMS += [ '-m32', '--memory-init-file', '0',
+ '--emit-symbol-map' ]
+else
+ ADDITIONAL_PARAMS += [ '-fsanitize=address' ]
+endif
# additional params just for core
CORE_PARAMS = [ '-fno-exceptions' ]
DEFINES = []
GENERATION_PARAMS = [
['SHELL_FILE', '"' +
join_paths(meson.source_root(), 'compiled', 'shell.js') +
'"'],
@@ -81,16 +96,21 @@
core_sources = [
'compiled/traceInit.cpp',
]
# sources for the bindings generator
bindings_sources = [
'compiled/bindings/generator.cpp',
'compiled/bindings/main.cpp',
]
+# native sources
+native_sources = [
+ 'compiled/library.cpp',
+ 'compiled/Utils.cpp',
+]
defines_args = []
foreach define : DEFINES
defines_args += '-D' + define
endforeach
generation_args = []
foreach param : GENERATION_PARAMS
@@ -98,74 +118,86 @@
generation_args += param[0] + '=' + '@0@'.format(param[1])
endforeach
optional_args = []
buildtype = get_option('buildtype')
if buildtype.startswith('debug')
optional_args += '-DDEBUG'
optional_args += '-g3'
+ if target_type == 'native'
+ ADDITIONAL_PARAMS += [ '-fsanitize=address' ]
+ LINK_PARAMS = [ '-fsanitize=address' ]
+ endif
endif
tracing = get_option('tracing')
if tracing
optional_args += '--tracing'
endif
compiler_args = defines_args + generation_args + ADDITIONAL_PARAMS
-# build objects.
-core_objects = []
-bindings_objects = []
-shared_objects = []
-foreach group : ['core', 'bindings', 'shared']
- objects = []
- foreach source_file : get_variable(group + '_sources')
- output_file = source_file.underscorify() + '.o'
- command = [ emcc, '-MD', '-MF', '@DEPFILE@', '-c', '-o', '@OUTPUT@',
- '@INPUT@' ] + compiler_args
- if group != 'bindings'
- command += CORE_PARAMS + optional_args
- endif
- objects += custom_target(output_file,
- input: files(source_file),
- output: output_file,
- depfile: output_file + '.deps',
- command: command)
+if target_type == 'js'
+ # build objects.
+ core_objects = []
+ bindings_objects = []
+ shared_objects = []
+ foreach group : ['core', 'bindings', 'shared']
+ objects = []
+ foreach source_file : get_variable(group + '_sources')
+ output_file = source_file.underscorify() + '.o'
+ command = [ emcc, '-MD', '-MF', '@DEPFILE@', '-c', '-o', '@OUTPUT@',
+ '@INPUT@' ] + compiler_args
+ if group != 'bindings'
+ command += CORE_PARAMS + optional_args
+ endif
+ objects += custom_target(output_file,
+ input: files(source_file),
+ output: output_file,
+ depfile: output_file + '.deps',
+ command: command)
+ endforeach
+ # Ideally, we would call set_variable() here but that doesn't work
+ # with arrays (see
+ # https://github.com/mesonbuild/meson/issues/1481). So we have to
+ # do this shifting dance instead.
+ core_objects = bindings_objects
+ bindings_objects = shared_objects
+ shared_objects = objects
endforeach
- # Ideally, we would call set_variable() here but that doesn't work with arrays
- # (see https://github.com/mesonbuild/meson/issues/1481). So we have to do this
- # shifting dance instead.
- core_objects = bindings_objects
- bindings_objects = shared_objects
- shared_objects = objects
-endforeach
-# link the binding generator
-bindings_generator = custom_target(BINDINGS_GENERATOR,
- input: bindings_objects + shared_objects,
- output: BINDINGS_GENERATOR,
- depend_files: [ JS_LIBRARY, BINDINGS_JS_LIBRARY ],
- command: [
- emcc, '-o', '@OUTPUT@',
- '--js-library', JS_LIBRARY,
- '--js-library', BINDINGS_JS_LIBRARY,
- '@INPUT@'
- ])
-# run the binding generator
-bindings_output = custom_target(BINDINGS_OUTPUT,
- input: bindings_generator,
- output: BINDINGS_OUTPUT,
- capture: true,
- command: [nodejs, '@INPUT@'])
+ # link the binding generator
+ bindings_generator = custom_target(BINDINGS_GENERATOR,
+ input: bindings_objects + shared_objects,
+ output: BINDINGS_GENERATOR,
+ depend_files: [ JS_LIBRARY, BINDINGS_JS_LIBRARY ],
+ command: [
+ emcc, '-o', '@OUTPUT@',
+ '--js-library', JS_LIBRARY,
+ '--js-library', BINDINGS_JS_LIBRARY,
+ '@INPUT@'
+ ])
+ # run the binding generator
+ bindings_output = custom_target(BINDINGS_OUTPUT,
+ input: bindings_generator,
+ output: BINDINGS_OUTPUT,
+ capture: true,
+ command: [nodejs, '@INPUT@'])
+ # link the core
+ output_file = join_paths(meson.source_root(), 'lib', COMPILER_OUTPUT)
+ compiler_output = custom_target(COMPILER_OUTPUT,
+ build_by_default: true,
+ input: core_objects + shared_objects,
+ output: COMPILER_OUTPUT,
+ depend_files: [ JS_LIBRARY ],
+ command: [
+ emcc, '-o', output_file,
+ '--post-js', bindings_output,
+ '--js-library', JS_LIBRARY,
+ '@INPUT@'
+ ] + compiler_args + optional_args)
+else
+ adblockpluscore = library('adblockpluscore', shared_sources,
+ native_sources,
+ cpp_args: ADDITIONAL_PARAMS + CORE_PARAMS,
+ link_args: LINK_PARAMS)
+endif
-# link the core
-output_file = join_paths(meson.source_root(), 'lib', COMPILER_OUTPUT)
-compiler_output = custom_target(COMPILER_OUTPUT,
- build_by_default: true,
- input: core_objects + shared_objects,
- output: COMPILER_OUTPUT,
- depend_files: [ JS_LIBRARY ],
- command: [
- emcc, '-o', output_file,
- '--post-js', bindings_output,
- '--js-library', JS_LIBRARY,
- '@INPUT@'
- ] + compiler_args + optional_args)
« compiled/library.cpp ('K') | « compiled/library.cpp ('k') | meson_options.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld