diff options
-rwxr-xr-x | emcc | 8 | ||||
-rw-r--r-- | src/library_browser.js | 1 | ||||
-rw-r--r-- | src/library_gl.js | 2 | ||||
-rw-r--r-- | src/library_sdl.js | 44 | ||||
-rwxr-xr-x | tests/runner.py | 31 | ||||
-rw-r--r-- | tools/shared.py | 5 |
6 files changed, 86 insertions, 5 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/src/library_browser.js b/src/library_browser.js index d49c4103..e9860742 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -77,6 +77,7 @@ mergeInto(LibraryManager.library, { } if (setInModule) { Module.ctx = ctx; + Module.useWebGL = useWebGL; Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() }); } return ctx; diff --git a/src/library_gl.js b/src/library_gl.js index 3eba76d0..2be48ba1 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -1517,6 +1517,8 @@ var LibraryGL = { Module.printErr('WARNING: using emscripten GL immediate mode emulation. This is very limited in what it supports'); GL.immediate.initted = true; + if (!Module.useWebGL) return; // a 2D canvas may be currently used TODO: make sure we are actually called in that case + this.matrixStack['m'] = []; this.matrixStack['p'] = []; for (var i = 0; i < GL.immediate.MAX_TEXTURES; i++) { diff --git a/src/library_sdl.js b/src/library_sdl.js index 85a04d27..442057c8 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -475,6 +475,37 @@ var LibrarySDL = { return -1; // -1 == all modes are ok. TODO }, + SDL_VideoModeOK: function(width, height, depth, flags) { + // SDL_VideoModeOK returns 0 if the requested mode is not supported under any bit depth, or returns the + // bits-per-pixel of the closest available mode with the given width, height and requested surface flags + return depth; // all modes are ok. + }, + + SDL_VideoDriverName: function(buf, max_size) { + if (SDL.startTime === null) { + return 0; //return NULL + } + //driverName - emscripten_sdl_driver + var driverName = [101, 109, 115, 99, 114, 105, 112, 116, 101, + 110, 95, 115, 100, 108, 95, 100, 114, 105, 118, 101, 114]; + + var index = 0; + var size = driverName.length; + + if (max_size <= size) { + size = max_size - 1; //-1 cause null-terminator + } + + while (index < size) { + var value = driverName[index]; + {{{ makeSetValue('buf', 'index', 'value', 'i8') }}}; + index++; + } + + {{{ makeSetValue('buf', 'index', '0', 'i8') }}}; + return buf; + }, + SDL_SetVideoMode: function(width, height, depth, flags) { ['mousedown', 'mouseup', 'mousemove', 'DOMMouseScroll'].forEach(function(event) { Module['canvas'].addEventListener(event, SDL.receiveEvent, true); @@ -484,6 +515,10 @@ var LibrarySDL = { return SDL.screen = SDL.makeSurface(width, height, flags, true, 'screen'); }, + SDL_QuitSubSystem: function(flags) { + Module.print('SDL_QuitSubSystem called (and ignored)'); + }, + SDL_Quit: function() { for (var i = 0; i < SDL.audios; i++) { SDL.audios[i].pause(); @@ -597,6 +632,10 @@ var LibrarySDL = { // We actually do the whole screen in Unlock... }, + SDL_UpdateRects: function(surf, numrects, rects) { + // We actually do the whole screen in Unlock... + }, + SDL_Delay: function(delay) { throw 'SDL_Delay called! Potential infinite loop, quitting. ' + new Error().stack; }, @@ -614,6 +653,11 @@ var LibrarySDL = { return SDL.keyboardState; }, + SDL_GetKeyState__deps: ['SDL_GetKeyboardState'], + SDL_GetKeyState: function() { + return _SDL_GetKeyboardState(); + }, + SDL_GetModState: function() { // TODO: numlock, capslock, etc. return (SDL.shiftKey ? 0x0001 & 0x0002 : 0) | // KMOD_LSHIFT & KMOD_RSHIFT diff --git a/tests/runner.py b/tests/runner.py index 0021dfa4..dcb3632f 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -7057,6 +7057,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. diff --git a/tools/shared.py b/tools/shared.py index c8998b5a..f71bec72 100644 --- a/tools/shared.py +++ b/tools/shared.py @@ -37,9 +37,10 @@ This command will now exit. When you are done editing those paths, re-run it. ''' % (EM_CONFIG, CONFIG_FILE) sys.exit(0) try: - exec(open(CONFIG_FILE, 'r').read() if CONFIG_FILE else EM_CONFIG) + config_text = open(CONFIG_FILE, 'r').read() if CONFIG_FILE else EM_CONFIG + exec(config_text) except Exception, e: - print >> sys.stderr, 'Error in evaluating %s (at %s): %s' % (EM_CONFIG, CONFIG_FILE, str(e)) + print >> sys.stderr, 'Error in evaluating %s (at %s): %s, text: %s' % (EM_CONFIG, CONFIG_FILE, str(e), config_text) sys.exit(1) # Check that basic stuff we need (a JS engine to compile, Node.js, and Clang and LLVM) |