diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/eliminator/eliminator.coffee | 15 | ||||
-rw-r--r-- | tools/shared.py | 28 | ||||
-rw-r--r-- | tools/test-js-optimizer-output.js | 5 | ||||
-rw-r--r-- | tools/test-js-optimizer.js | 6 |
4 files changed, 33 insertions, 21 deletions
diff --git a/tools/eliminator/eliminator.coffee b/tools/eliminator/eliminator.coffee index b941ccc0..a4c98930 100644 --- a/tools/eliminator/eliminator.coffee +++ b/tools/eliminator/eliminator.coffee @@ -19,6 +19,7 @@ # Imports. uglify = require 'uglify-js' fs = require 'fs' +os = require 'os' # Functions which have been generated by Emscripten. We optimize only those. generatedFunctions = [] @@ -369,12 +370,14 @@ class ExpressionOptimizer # function, then writes the optimized result to stdout. main = -> # Get the parse tree. - src = fs.readFileSync('/dev/stdin').toString() - # The following seems to work on windows, but fails on linux.. - #src = '' - #size = fs.fstatSync(process.stdin.fd).size - #if size > 0 - # src = fs.readSync(process.stdin.fd, size)[0] + if os.platform().substr(0, 3) != 'win' + src = fs.readFileSync('/dev/stdin').toString() + else + # The following seems to work on windows, but fails on linux.. + src = '' + size = fs.fstatSync(process.stdin.fd).size + if size > 0 + src = fs.readSync(process.stdin.fd, size)[0] throw 'Cannot identify generated functions' if GENERATED_FUNCTIONS_MARKER in src generatedFunctionsLine = src.split('\n').filter (line) -> diff --git a/tools/shared.py b/tools/shared.py index 61ec912e..4e5f3d6a 100644 --- a/tools/shared.py +++ b/tools/shared.py @@ -1,4 +1,4 @@ -import shutil, time, os, sys, json, tempfile, copy +import shutil, time, os, sys, json, tempfile, copy, shlex from subprocess import Popen, PIPE, STDOUT from tempfile import mkstemp @@ -184,6 +184,8 @@ else: if 'gcparam' not in str(SPIDERMONKEY_ENGINE): SPIDERMONKEY_ENGINE += ['-e', "gcparam('maxBytes', 1024*1024*1024);"] # Our very large files need lots of gc heap +WINDOWS = 'win' in sys.platform + # Temp file utilities def try_delete(filename): @@ -360,11 +362,11 @@ class Building: @staticmethod def get_building_env(): env = os.environ.copy() - env['CC'] = '%s' % EMCC - env['CXX'] = '%s' % EMXX - env['AR'] = '%s' % EMAR - env['RANLIB'] = '%s' % EMRANLIB - env['LIBTOOL'] = '%s' % EMLIBTOOL + env['CC'] = EMCC if not WINDOWS else 'python %r' % EMCC + env['CXX'] = EMXX if not WINDOWS else 'python %r' % EMXX + env['AR'] = EMAR if not WINDOWS else 'python %r' % EMAR + env['RANLIB'] = EMRANLIB if not WINDOWS else 'python %r' % EMRANLIB + env['LIBTOOL'] = EMLIBTOOL if not WINDOWS else 'python %r' % EMLIBTOOL env['EMMAKEN_COMPILER'] = Building.COMPILER env['EMSCRIPTEN_TOOLS'] = path_from_root('tools') env['CFLAGS'] = env['EMMAKEN_CFLAGS'] = ' '.join(Building.COMPILER_TEST_OPTS) @@ -376,14 +378,14 @@ class Building: @staticmethod def handle_CMake_toolchain(args, env): - CMakeToolchain = '''# the name of the target operating system + CMakeToolchain = ('''# the name of the target operating system SET(CMAKE_SYSTEM_NAME Linux) # which C and C++ compiler to use -SET(CMAKE_C_COMPILER $EMSCRIPTEN_ROOT/emcc) -SET(CMAKE_CXX_COMPILER $EMSCRIPTEN_ROOT/em++) -SET(CMAKE_AR $EMSCRIPTEN_ROOT/emar) -SET(CMAKE_RANLIB $EMSCRIPTEN_ROOT/emranlib) +SET(CMAKE_C_COMPILER %(winfix)s$EMSCRIPTEN_ROOT/emcc) +SET(CMAKE_CXX_COMPILER %(winfix)s$EMSCRIPTEN_ROOT/em++) +SET(CMAKE_AR %(winfix)s$EMSCRIPTEN_ROOT/emar) +SET(CMAKE_RANLIB %(winfix)s$EMSCRIPTEN_ROOT/emranlib) SET(CMAKE_C_FLAGS $CFLAGS) SET(CMAKE_CXX_FLAGS $CXXFLAGS) @@ -396,7 +398,7 @@ SET(CMAKE_FIND_ROOT_PATH $EMSCRIPTEN_ROOT/system/include ) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) -set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)''' \ +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)''' % { 'winfix': '' if not WINDOWS else 'python ' }) \ .replace('$EMSCRIPTEN_ROOT', path_from_root('').replace('\\', '/')) \ .replace('$CFLAGS', env['CFLAGS']) \ .replace('$CXXFLAGS', env['CFLAGS']) @@ -743,7 +745,7 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)''' \ #'--variable_map_output_file', filename + '.vars', '--js', filename, '--js_output_file', filename + '.cc.js'] if os.environ.get('EMCC_CLOSURE_ARGS'): - args += os.environ.get('EMCC_CLOSURE_ARGS').split(' ') + args += shlex.split(os.environ.get('EMCC_CLOSURE_ARGS')) process = Popen(args, stdout=PIPE, stderr=STDOUT) cc_output = process.communicate()[0] if process.returncode != 0 or not os.path.exists(filename + '.cc.js'): diff --git a/tools/test-js-optimizer-output.js b/tools/test-js-optimizer-output.js index ca76cae1..273efdb7 100644 --- a/tools/test-js-optimizer-output.js +++ b/tools/test-js-optimizer-output.js @@ -311,4 +311,7 @@ function notComps() { shoo(); } } -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["abc", "xyz", "xyz2", "expr", "loopy", "bits", "maths", "hoisting", "demangle", "lua", "moreLabels", "notComps"] +function tricky() { + var $conv642 = $conv6374 - (($132 << 16 >> 16) / 2 & -1) & 65535; +} +// EMSCRIPTEN_GENERATED_FUNCTIONS: ["abc", "xyz", "xyz2", "expr", "loopy", "bits", "maths", "hoisting", "demangle", "lua", "moreLabels", "notComps", "tricky"] diff --git a/tools/test-js-optimizer.js b/tools/test-js-optimizer.js index 18c9ac75..e9d973dd 100644 --- a/tools/test-js-optimizer.js +++ b/tools/test-js-optimizer.js @@ -422,4 +422,8 @@ function notComps() { shoo(); } } -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["abc", "xyz", "xyz2", "expr", "loopy", "bits", "maths", "hoisting", "demangle", "lua", "moreLabels", "notComps"] +function tricky() { + // The &-1 is a rounding correction, and must not be removed + var $conv642 = ($conv6374 - (($132 << 16 >> 16 | 0) / 2 & -1) | 0) & 65535; +} +// EMSCRIPTEN_GENERATED_FUNCTIONS: ["abc", "xyz", "xyz2", "expr", "loopy", "bits", "maths", "hoisting", "demangle", "lua", "moreLabels", "notComps", "tricky"] |