make EMCC_OPTIMIZE_NORMALLY the default
This commit is contained in:
Родитель
dc341c89d3
Коммит
7e179d8c63
31
emcc
31
emcc
|
@ -127,11 +127,6 @@ Options that are modified or new in %s include:
|
|||
(For details on the affects of different
|
||||
opt levels, see apply_opt_level() in
|
||||
tools/shared.py and also src/settings.js.)
|
||||
Note: Optimizations are only done when
|
||||
compiling to JavaScript, not to intermediate
|
||||
bitcode, *unless* you build with
|
||||
EMCC_OPTIMIZE_NORMALLY=1 (not recommended
|
||||
unless you know what you are doing!)
|
||||
-O2 As -O1, plus the relooper (loop recreation),
|
||||
LLVM -O2 optimizations, and
|
||||
|
||||
|
@ -1103,18 +1098,15 @@ try:
|
|||
|
||||
if not LEAVE_INPUTS_RAW: assert len(temp_files) == len(input_files)
|
||||
|
||||
# Optimize source files
|
||||
if llvm_opts > 0:
|
||||
for input_file in input_files:
|
||||
if input_file.endswith(SOURCE_SUFFIXES):
|
||||
logging.debug('optimizing %s with -O%d' % (input_file, llvm_opts))
|
||||
shared.Building.llvm_opt(in_temp(unsuffixed(uniquename(input_file)) + '.o'), llvm_opts)
|
||||
|
||||
# If we were just asked to generate bitcode, stop there
|
||||
if final_suffix not in JS_CONTAINING_SUFFIXES:
|
||||
if llvm_opts > 0:
|
||||
if not os.environ.get('EMCC_OPTIMIZE_NORMALLY'):
|
||||
logging.warning('-Ox flags ignored, since not generating JavaScript')
|
||||
else:
|
||||
for input_file in input_files:
|
||||
if input_file.endswith(SOURCE_SUFFIXES):
|
||||
logging.debug('optimizing %s with -O%d since EMCC_OPTIMIZE_NORMALLY defined' % (input_file, llvm_opts))
|
||||
shared.Building.llvm_opt(in_temp(unsuffixed(uniquename(input_file)) + '.o'), llvm_opts)
|
||||
else:
|
||||
logging.debug('not optimizing %s despite EMCC_OPTIMIZE_NORMALLY since not source code' % (input_file))
|
||||
if not specified_target:
|
||||
for input_file in input_files:
|
||||
shutil.move(in_temp(unsuffixed(uniquename(input_file)) + '.o'), unsuffixed_basename(input_file) + '.' + final_suffix)
|
||||
|
@ -1154,7 +1146,7 @@ try:
|
|||
libcxx_symbols = read_symbols(shared.path_from_root('system', 'lib', 'libcxx', 'symbols'), exclude=libc_symbols)
|
||||
libcxxabi_symbols = read_symbols(shared.path_from_root('system', 'lib', 'libcxxabi', 'symbols'), exclude=libc_symbols)
|
||||
|
||||
# XXX we should disable EMCC_DEBUG (and EMCC_OPTIMIZE_NORMALLY?) when building libs, just like in the relooper
|
||||
# XXX we should disable EMCC_DEBUG when building libs, just like in the relooper
|
||||
|
||||
def build_libc(lib_filename, files):
|
||||
o_s = []
|
||||
|
@ -1422,13 +1414,6 @@ try:
|
|||
if not LEAVE_INPUTS_RAW:
|
||||
link_opts = [] if debug_level >= 4 else ['-strip-debug'] # remove LLVM debug if we are not asked for it
|
||||
|
||||
if llvm_opts > 0:
|
||||
if not os.environ.get('EMCC_OPTIMIZE_NORMALLY'):
|
||||
shared.Building.llvm_opt(in_temp(target_basename + '.bc'), llvm_opts)
|
||||
if DEBUG: save_intermediate('opt', 'bc')
|
||||
# Do LTO in a separate pass to work around LLVM bug XXX (see failure e.g. in cubescript)
|
||||
else:
|
||||
logging.debug('not running opt because EMCC_OPTIMIZE_NORMALLY was specified, opt should have been run before')
|
||||
if shared.Building.can_build_standalone():
|
||||
# If we can LTO, do it before dce, since it opens up dce opportunities
|
||||
if llvm_lto and shared.Building.can_use_unsafe_opts():
|
||||
|
|
|
@ -11494,64 +11494,6 @@ seeked= file.
|
|||
code = open('a.out.js').read()
|
||||
assert 'SAFE_HEAP' in code, 'valid -s option had an effect'
|
||||
|
||||
def test_optimize_normally(self):
|
||||
assert not os.environ.get('EMCC_OPTIMIZE_NORMALLY')
|
||||
assert not os.environ.get('EMCC_DEBUG')
|
||||
|
||||
for optimize_normally in [0, 1]:
|
||||
print optimize_normally
|
||||
try:
|
||||
if optimize_normally: os.environ['EMCC_OPTIMIZE_NORMALLY'] = '1'
|
||||
os.environ['EMCC_DEBUG'] = '1'
|
||||
|
||||
open(self.in_dir('main.cpp'), 'w').write(r'''
|
||||
extern "C" {
|
||||
void something();
|
||||
}
|
||||
|
||||
int main() {
|
||||
something();
|
||||
return 0;
|
||||
}
|
||||
''')
|
||||
open(self.in_dir('supp.cpp'), 'w').write(r'''
|
||||
#include <stdio.h>
|
||||
|
||||
extern "C" {
|
||||
void something() {
|
||||
printf("yello\n");
|
||||
}
|
||||
}
|
||||
''')
|
||||
out, err = Popen([PYTHON, EMCC, self.in_dir('main.cpp'), '-O2', '-o', 'main.o'], stdout=PIPE, stderr=PIPE).communicate()
|
||||
assert ("emcc: LLVM opts: ['-O3']" in err) == optimize_normally
|
||||
assert (' with -O3 since EMCC_OPTIMIZE_NORMALLY defined' in err) == optimize_normally
|
||||
|
||||
out, err = Popen([PYTHON, EMCC, self.in_dir('supp.cpp'), '-O2', '-o', 'supp.o'], stdout=PIPE, stderr=PIPE).communicate()
|
||||
assert ("emcc: LLVM opts: ['-O3']" in err) == optimize_normally
|
||||
assert (' with -O3 since EMCC_OPTIMIZE_NORMALLY defined' in err) == optimize_normally
|
||||
|
||||
out, err = Popen([PYTHON, EMCC, self.in_dir('main.o'), self.in_dir('supp.o'), '-O2', '-o', 'both.o'], stdout=PIPE, stderr=PIPE).communicate()
|
||||
assert "emcc: LLVM opts: ['-O3']" not in err
|
||||
assert ' with -O3 since EMCC_OPTIMIZE_NORMALLY defined' not in err
|
||||
assert ('despite EMCC_OPTIMIZE_NORMALLY since not source code' in err) == optimize_normally
|
||||
|
||||
out, err = Popen([PYTHON, EMCC, self.in_dir('main.cpp'), self.in_dir('supp.cpp'), '-O2', '-o', 'both2.o'], stdout=PIPE, stderr=PIPE).communicate()
|
||||
assert ("emcc: LLVM opts: ['-O3']" in err) == optimize_normally
|
||||
assert (' with -O3 since EMCC_OPTIMIZE_NORMALLY defined' in err) == optimize_normally
|
||||
|
||||
for last in ['both.o', 'both2.o']:
|
||||
out, err = Popen([PYTHON, EMCC, self.in_dir('both.o'), '-O2', '-o', last + '.js', '--memory-init-file', '0'], stdout=PIPE, stderr=PIPE).communicate()
|
||||
assert ("emcc: LLVM opts: ['-O3']" not in err) == optimize_normally
|
||||
assert ' with -O3 since EMCC_OPTIMIZE_NORMALLY defined' not in err
|
||||
output = run_js(last + '.js')
|
||||
assert 'yello' in output, 'code works ' + err
|
||||
assert open('both.o.js').read() == open('both2.o.js').read()
|
||||
|
||||
finally:
|
||||
if optimize_normally: del os.environ['EMCC_OPTIMIZE_NORMALLY']
|
||||
del os.environ['EMCC_DEBUG']
|
||||
|
||||
def test_jcache_printf(self):
|
||||
open(self.in_dir('src.cpp'), 'w').write(r'''
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -1293,9 +1293,6 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)''' % { 'winfix': '' if not WINDOWS e
|
|||
emcc_debug = os.environ.get('EMCC_DEBUG')
|
||||
if emcc_debug: del os.environ['EMCC_DEBUG']
|
||||
|
||||
emcc_optimize_normally = os.environ.get('EMCC_OPTIMIZE_NORMALLY')
|
||||
if emcc_optimize_normally: del os.environ['EMCC_OPTIMIZE_NORMALLY']
|
||||
|
||||
def make(opt_level):
|
||||
raw = relooper + '.raw.js'
|
||||
Building.emcc(os.path.join('relooper', 'Relooper.cpp'), ['-I' + os.path.join('relooper'), '--post-js',
|
||||
|
@ -1326,7 +1323,6 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)''' % { 'winfix': '' if not WINDOWS e
|
|||
finally:
|
||||
os.chdir(curr)
|
||||
if emcc_debug: os.environ['EMCC_DEBUG'] = emcc_debug
|
||||
if emcc_optimize_normally: os.environ['EMCC_OPTIMIZE_NORMALLY'] = emcc_optimize_normally
|
||||
if not ok:
|
||||
logging.error('bootstrapping relooper failed. You may need to manually create relooper.js by compiling it, see src/relooper/emscripten')
|
||||
1/0
|
||||
|
|
Загрузка…
Ссылка в новой задаче