add nativize_llvm tool
This commit is contained in:
Родитель
72133a5942
Коммит
19a0d39383
|
@ -26,11 +26,8 @@ it runs
|
|||
python $(EMSCRIPTEN_TOOLS)/exec_llvm.py THE_FILE PARAMS
|
||||
|
||||
An alternative solution to this problem is to compile
|
||||
the .ll into native code. This can be done as follows:
|
||||
|
||||
* Use llc to generate x86 asm
|
||||
* Use as to generate an object file
|
||||
* Use g++ to link it to an executable
|
||||
the .ll into native code, see nativize_llvm.py. That is
|
||||
useful when this fails.
|
||||
'''
|
||||
|
||||
import os, sys
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
'''
|
||||
Small utility to build some llvm bitcode into native code. Useful when lli (called
|
||||
from exec_llvm) fails for some reason.
|
||||
|
||||
* Use llc to generate x86 asm
|
||||
* Use as to generate an object file
|
||||
* Use g++ to link it to an executable
|
||||
'''
|
||||
|
||||
import os, sys
|
||||
from subprocess import Popen, PIPE, STDOUT
|
||||
|
||||
__rootpath__ = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
|
||||
def path_from_root(*pathelems):
|
||||
return os.path.join(__rootpath__, *pathelems)
|
||||
exec(open(path_from_root('tools', 'shared.py'), 'r').read())
|
||||
|
||||
filename = sys.argv[1]
|
||||
libs = sys.argv[2:] # e.g.: dl for dlopen/dlclose, util for openpty/forkpty
|
||||
|
||||
print 'bc => clean bc'
|
||||
Popen([LLVM_OPT, filename, '-strip-debug', '-o=' + filename + '.clean.bc']).communicate()[0]
|
||||
print 'bc => s'
|
||||
Popen([LLVM_COMPILER, filename + '.clean.bc', '-o=' + filename + '.s']).communicate()[0]
|
||||
print 's => o'
|
||||
Popen(['as', filename + '.s', '-o', filename + '.o']).communicate()[0]
|
||||
print 'o => runnable'
|
||||
Popen(['g++', filename + '.o', '-o', filename + '.run'] + ['-l' + lib for lib in libs]).communicate()[0]
|
||||
|
Загрузка…
Ссылка в новой задаче