@@ -289,7 +289,6 @@ def build_llvm_tool_path(tool):
289
289
BINDINGS_GENERATOR = path_from_root ('tools' , 'bindings_generator.py' )
290
290
EXEC_LLVM = path_from_root ('tools' , 'exec_llvm.py' )
291
291
FILE_PACKAGER = path_from_root ('tools' , 'file_packager.py' )
292
- RELOOPER = path_from_root ('src' , 'relooper.js' )
293
292
294
293
# Temp dir. Create a random one, unless EMCC_DEBUG is set, in which case use TEMP_DIR/emscripten_temp
295
294
@@ -994,6 +993,7 @@ def emscripten(filename, append_ext=True, extra_args=[]):
994
993
os .environ ['EMSCRIPTEN_SUPPRESS_USAGE_WARNING' ] = '1'
995
994
996
995
# Run Emscripten
996
+ Settings .RELOOPER = Cache .get_path ('relooper.js' )
997
997
settings = Settings .serialize ()
998
998
compiler_output = timeout_run (Popen ([PYTHON , EMSCRIPTEN , filename + ('.o.ll' if append_ext else '' ), '-o' , filename + '.o.js' ] + settings + extra_args , stdout = PIPE ), None , 'Compiling' )
999
999
#print compiler_output
@@ -1187,25 +1187,26 @@ def is_bitcode(filename):
1187
1187
1188
1188
# Make sure the relooper exists. If it does not, check out the relooper code and bootstrap it
1189
1189
@staticmethod
1190
- def ensure_relooper ():
1191
- if os .path .exists (RELOOPER ): return
1190
+ def ensure_relooper (relooper ):
1191
+ if os .path .exists (relooper ): return
1192
+ Cache .ensure ()
1192
1193
curr = os .getcwd ()
1193
1194
try :
1194
1195
ok = False
1195
1196
print >> sys .stderr , '======================================='
1196
1197
print >> sys .stderr , 'bootstrapping relooper...'
1197
- Cache .ensure ()
1198
1198
os .chdir (path_from_root ('src' ))
1199
1199
1200
1200
def make (opt_level ):
1201
- raw = RELOOPER + '.raw.js'
1201
+ raw = relooper + '.raw.js'
1202
1202
Building .emcc (os .path .join ('relooper' , 'Relooper.cpp' ), ['-I' + os .path .join ('relooper' ), '--post-js' ,
1203
1203
os .path .join ('relooper' , 'emscripten' , 'glue.js' ),
1204
1204
'-s' , 'TOTAL_MEMORY=52428800' ,
1205
1205
'-s' , 'EXPORTED_FUNCTIONS=["_rl_set_output_buffer","_rl_make_output_buffer","_rl_new_block","_rl_delete_block","_rl_block_add_branch_to","_rl_new_relooper","_rl_delete_relooper","_rl_relooper_add_block","_rl_relooper_calculate","_rl_relooper_render", "_rl_set_asm_js_mode"]' ,
1206
1206
'-s' , 'DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=["memcpy", "memset", "malloc", "free", "puts"]' ,
1207
+ '-s' , 'RELOOPER="' + relooper + '"' ,
1207
1208
'-O' + str (opt_level ), '--closure' , '0' ], raw )
1208
- f = open (RELOOPER , 'w' )
1209
+ f = open (relooper , 'w' )
1209
1210
f .write ("// Relooper, (C) 2012 Alon Zakai, MIT license, https://github.com/kripken/Relooper\n " )
1210
1211
f .write ("var Relooper = (function() {\n " );
1211
1212
f .write (open (raw ).read ())
@@ -1225,7 +1226,7 @@ def make(opt_level):
1225
1226
finally :
1226
1227
os .chdir (curr )
1227
1228
if not ok :
1228
- print >> sys .stderr , 'bootstrapping relooper failed. You may need to manually create src/ relooper.js by compiling it, see src/relooper/emscripten'
1229
+ print >> sys .stderr , 'bootstrapping relooper failed. You may need to manually create relooper.js by compiling it, see src/relooper/emscripten'
1229
1230
1 / 0
1230
1231
1231
1232
@staticmethod
@@ -1260,15 +1261,15 @@ class Cache:
1260
1261
if not dirname :
1261
1262
dirname = os .path .expanduser (os .path .join ('~' , '.emscripten_cache' ))
1262
1263
1263
- @staticmethod
1264
- def ensure ():
1265
- if not os .path .exists (Cache .dirname ):
1266
- os .makedirs (Cache .dirname )
1264
+ @classmethod
1265
+ def ensure (self ):
1266
+ if not os .path .exists (self .dirname ):
1267
+ os .makedirs (self .dirname )
1267
1268
1268
- @staticmethod
1269
- def erase ():
1269
+ @classmethod
1270
+ def erase (self ):
1270
1271
try :
1271
- shutil .rmtree (Cache .dirname )
1272
+ shutil .rmtree (self .dirname )
1272
1273
except :
1273
1274
pass
1274
1275
try_delete (RELOOPER )
@@ -1277,12 +1278,16 @@ def erase():
1277
1278
except :
1278
1279
print >> sys .stderr , 'failed to save last clear time'
1279
1280
1281
+ @classmethod
1282
+ def get_path (self , shortname ):
1283
+ return os .path .join (self .dirname , shortname )
1284
+
1280
1285
# Request a cached file. If it isn't in the cache, it will be created with
1281
1286
# the given creator function
1282
- @staticmethod
1283
- def get (shortname , creator ):
1284
- if not shortname .endswith ('.bc' ): shortname += '.bc'
1285
- cachename = os .path .join (Cache .dirname , shortname )
1287
+ @classmethod
1288
+ def get (self , shortname , creator , extension = '.bc' ):
1289
+ if not shortname .endswith (extension ): shortname += extension
1290
+ cachename = os .path .join (self .dirname , shortname )
1286
1291
if os .path .exists (cachename ):
1287
1292
return cachename
1288
1293
Cache .ensure ()
0 commit comments