aboutsummaryrefslogtreecommitdiff
path: root/emcc
diff options
context:
space:
mode:
Diffstat (limited to 'emcc')
-rwxr-xr-xemcc24
1 files changed, 18 insertions, 6 deletions
diff --git a/emcc b/emcc
index 984e4014..b0ed1862 100755
--- a/emcc
+++ b/emcc
@@ -807,16 +807,13 @@ try:
# Embed and preload files
if len(embed_files) + len(preload_files) > 0:
if DEBUG: print >> sys.stderr, 'emcc: setting up files'
-
- assert not Compression.on
-
code = ''
# Sanity checks
for filename in embed_files:
assert filename not in preload_files, 'Cannot both embed and preload file %s' % filename
- # Expand directories
+ # Expand directories into individual files
def add(filename, dirname, names):
for name in names:
combined = os.path.join(dirname, name)
@@ -831,6 +828,13 @@ try:
if filename in source:
source.remove(filename)
+ if Compression.on:
+ # Compress each file
+ for filename in embed_files + preload_files:
+ Compression.compress(filename)
+ embed_files = map(lambda filename: Compression.compressed_name(filename), embed_files)
+ preload_files = map(lambda filename: Compression.compressed_name(filename), preload_files)
+
# Set up folders
partial_dirs = []
for filename in embed_files + preload_files:
@@ -864,12 +868,19 @@ try:
var arrayBuffer = %(varname)s.response; // Note: not X.responseText
assert(arrayBuffer, 'Loading file %(filename)s failed.');
var byteArray = new Uint8Array(arrayBuffer);
+ %(decompress)s;
FS.createDataFile('/%(dirname)s', '%(basename)s', byteArray, true, true);
removeRunDependency();
};
addRunDependency();
%(varname)s.send(null);
- ''' % { 'varname': varname, 'filename': filename, 'dirname': os.path.dirname(filename), 'basename': os.path.basename(filename) }
+ ''' % {
+ 'varname': varname,
+ 'filename': filename,
+ 'dirname': os.path.dirname(filename),
+ 'basename': os.path.basename(filename) if not Compression.on else os.path.basename(filename)[:-len(Compression.compressed_name(''))],
+ 'decompress': '' if not Compression.on else 'byteArray = Module["decompress"](byteArray)'
+ }
else:
print >> sys.stderr, 'emcc: warning: preloading file %s as image because of suffix. it will not be available to load as a normal file' % filename
code += '''
@@ -983,6 +994,7 @@ try:
shutil.move(final, js_target)
Compression.compress(js_target)
decoding = open(Compression.decoder).read()
+ decoding += 'Module["decompress"] = function(data) { return %s(data) };\n' % Compression.js_name
decoding += '''
var compiledCodeXHR = new XMLHttpRequest();
compiledCodeXHR.open('GET', '%s', true);
@@ -992,7 +1004,7 @@ try:
if (!arrayBuffer) throw('Loading compressed code failed.');
var byteArray = new Uint8Array(arrayBuffer);
var decompressed = %s(byteArray);
- var source = Array.prototype.slice.apply(decompressed).map(function(x) { return String.fromCharCode(x) }).join('');
+ var source = Array.prototype.slice.apply(decompressed).map(function(x) { return String.fromCharCode(x) }).join(''); // createObjectURL instead?
var scriptTag = document.createElement('script');
scriptTag.setAttribute('type', 'text/javascript');
scriptTag.innerHTML = source;