diff options
-rwxr-xr-x | emcc | 8 | ||||
-rwxr-xr-x | tests/runner.py | 31 |
2 files changed, 36 insertions, 3 deletions
@@ -548,9 +548,11 @@ try: settings_changes = [] for i in range(len(newargs)): if newargs[i] == '-s': - assert '=' in newargs[i+1], 'Incorrect syntax for -s (use -s OPT=VAL): ' + newargs[i+1] - settings_changes.append(newargs[i+1]) - newargs[i] = newargs[i+1] = '' + if i+1 < len(newargs) and '=' in newargs[i+1]: # -s OPT=VALUE is for us, -s by itself is a linker option + settings_changes.append(newargs[i+1]) + newargs[i] = newargs[i+1] = '' + else: + print >> sys.stderr, 'emcc: warning: treating -s as linker option and not as -s OPT=VALUE for js compilation' elif newargs[i].startswith('--typed-arrays'): assert '=' not in newargs[i], 'Invalid typed arrays parameter (do not use "=")' settings_changes.append('USE_TYPED_ARRAYS=' + newargs[i+1]) diff --git a/tests/runner.py b/tests/runner.py index 9c29dc96..ce19aadb 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -7032,6 +7032,37 @@ fscanfed: 10 - hello output = Popen(['python', EMCONFIG, 'sys.argv[1]'], stdout=PIPE, stderr=PIPE).communicate()[0] assert output == invalid + def test_link_s(self): + # -s OPT=VALUE can conflict with -s as a linker option. We warn and ignore + open(os.path.join(self.get_dir(), 'main.cpp'), 'w').write(r''' + extern "C" { + void something(); + } + + int main() { + something(); + return 0; + } + ''') + open(os.path.join(self.get_dir(), 'supp.cpp'), 'w').write(r''' + #include <stdio.h> + + extern "C" { + void something() { + printf("yello\n"); + } + } + ''') + Popen(['python', EMCC, os.path.join(self.get_dir(), 'main.cpp'), '-o', 'main.o']).communicate() + Popen(['python', EMCC, os.path.join(self.get_dir(), 'supp.cpp'), '-o', 'supp.o']).communicate() + + output = Popen(['python', EMCC, os.path.join(self.get_dir(), 'main.o'), '-s', os.path.join(self.get_dir(), 'supp.o'), '-s', 'SAFE_HEAP=1'], stderr=PIPE).communicate() + self.assertContained('emcc: warning: treating -s as linker option', output[1]) + output = run_js('a.out.js') + assert 'yello' in output, 'code works' + code = open('a.out.js').read() + assert 'SAFE_HEAP' in code, 'valid -s option had an effect' + elif 'browser' in str(sys.argv): # Browser tests. |