webruby 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/webruby/environment.rb +4 -0
- data/lib/webruby/rake/files.rake +2 -1
- data/lib/webruby/rake/mruby.rake +4 -2
- data/modules/emscripten/AUTHORS +1 -0
- data/modules/emscripten/cmake/Platform/Emscripten.cmake +2 -0
- data/modules/emscripten/emcc +96 -40
- data/modules/emscripten/emrun +301 -136
- data/modules/emscripten/emscripten.py +5 -45
- data/modules/emscripten/src/analyzer.js +11 -1
- data/modules/emscripten/src/compiler.js +1 -1
- data/modules/emscripten/src/emrun_postjs.js +2 -2
- data/modules/emscripten/src/emrun_prejs.js +5 -0
- data/modules/emscripten/src/emscripten-source-map.min.js +31 -0
- data/modules/emscripten/src/library.js +187 -0
- data/modules/emscripten/src/library_egl.js +20 -0
- data/modules/emscripten/src/library_sdl.js +1 -0
- data/modules/emscripten/src/preamble.js +4 -0
- data/modules/emscripten/src/relooper/Relooper.cpp +33 -15
- data/modules/emscripten/src/relooper/Relooper.h +20 -14
- data/modules/emscripten/src/relooper/fuzzer.py +6 -0
- data/modules/emscripten/src/relooper/test.cpp +28 -0
- data/modules/emscripten/src/relooper/test.txt +211 -166
- data/modules/emscripten/src/relooper/test2.txt +20 -20
- data/modules/emscripten/src/relooper/test3.txt +41 -41
- data/modules/emscripten/src/relooper/test4.txt +26 -26
- data/modules/emscripten/src/relooper/test5.txt +52 -52
- data/modules/emscripten/src/relooper/test6.txt +19 -19
- data/modules/emscripten/src/relooper/test_dead.txt +1 -1
- data/modules/emscripten/src/relooper/test_debug.txt +31 -31
- data/modules/emscripten/src/relooper/test_fuzz1.txt +50 -50
- data/modules/emscripten/src/relooper/test_fuzz2.txt +21 -21
- data/modules/emscripten/src/relooper/test_fuzz3.txt +18 -18
- data/modules/emscripten/src/relooper/test_fuzz4.txt +28 -28
- data/modules/emscripten/src/relooper/test_fuzz5.txt +61 -61
- data/modules/emscripten/src/relooper/test_fuzz6.txt +179 -179
- data/modules/emscripten/src/relooper/test_inf.txt +846 -846
- data/modules/emscripten/src/relooper/testit.sh +15 -15
- data/modules/emscripten/system/include/emscripten/emscripten.h +64 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +8 -2
- data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
- data/modules/emscripten/tools/eliminator/eliminator-test-output.js +11 -0
- data/modules/emscripten/tools/eliminator/eliminator-test.js +16 -1
- data/modules/emscripten/tools/file_packager.py +59 -49
- data/modules/emscripten/tools/js-optimizer.js +47 -8
- data/modules/emscripten/tools/shared.py +3 -3
- data/modules/emscripten/tools/test-js-optimizer-asm-pre-output.js +5 -3
- data/modules/emscripten/tools/test-js-optimizer-asm-pre.js +4 -0
- data/modules/mruby/INSTALL +11 -6
- data/modules/mruby/include/mrbconf.h +0 -3
- data/modules/mruby/include/mruby/khash.h +34 -36
- data/modules/mruby/include/mruby/string.h +3 -0
- data/modules/mruby/include/mruby.h +3 -3
- data/modules/mruby/mrblib/string.rb +3 -0
- data/modules/mruby/src/class.c +12 -12
- data/modules/mruby/src/codegen.c +18 -11
- data/modules/mruby/src/hash.c +12 -12
- data/modules/mruby/src/kernel.c +3 -3
- data/modules/mruby/src/load.c +29 -14
- data/modules/mruby/src/numeric.c +1 -1
- data/modules/mruby/src/object.c +14 -2
- data/modules/mruby/src/state.c +13 -10
- data/modules/mruby/src/string.c +1 -3
- data/modules/mruby/src/symbol.c +44 -18
- data/modules/mruby/src/variable.c +6 -6
- data/modules/mruby/test/t/class.rb +34 -0
- data/modules/mruby/test/t/module.rb +1 -1
- data/modules/mruby/test/t/syntax.rb +28 -0
- metadata +5 -13
- data/modules/emscripten/src/relooper.js +0 -11516
- data/modules/emscripten/src/relooper.js.raw.js +0 -11511
- data/modules/emscripten/tools/__init__.pyc +0 -0
- data/modules/emscripten/tools/cache.pyc +0 -0
- data/modules/emscripten/tools/gen_struct_info.pyc +0 -0
- data/modules/emscripten/tools/js_optimizer.pyc +0 -0
- data/modules/emscripten/tools/jsrun.pyc +0 -0
- data/modules/emscripten/tools/response_file.pyc +0 -0
- data/modules/emscripten/tools/shared.pyc +0 -0
- data/modules/emscripten/tools/tempfiles.pyc +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8aa9f4f3e59012a040e4f07a5bc66d2d6cb095ec
|
4
|
+
data.tar.gz: c0b1bc4d899990bf072b9c73732dc53b0bd0279f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 963102b0355a11a2412d344525217fdc4cbf34d0e8495b714d7c4922dc96e18ccdeca1748cd6a84a123d17b45ccaf0c2a1ffcafcf0d7652094d5319986785d7d
|
7
|
+
data.tar.gz: 9699973d8194cc3ccfadc5ba513ce10cccec9565193236f16dc7558a8ef1c24d9ee6816f957c9d5d8f3ee621b1f719e29d01424963714d1d2d1c4c5a47805e2b
|
data/lib/webruby/environment.rb
CHANGED
data/lib/webruby/rake/files.rake
CHANGED
@@ -13,7 +13,8 @@ file "#{Webruby.build_dir}/rbcode.c" => [Webruby.entrypoint_file,
|
|
13
13
|
Webruby.build_dir] +
|
14
14
|
Webruby.rb_files do |t|
|
15
15
|
if Webruby::App.config.source_processor == :gen_require
|
16
|
-
|
16
|
+
ENV["MRBC"] = "#{Webruby.full_build_dir}/#{MRBC}"
|
17
|
+
sh "ruby #{SCRIPT_GEN_REQUIRE} #{File.expand_path(Webruby.entrypoint_file)} #{Webruby.full_build_dir}/rbcode.c"
|
17
18
|
else
|
18
19
|
sh "ruby #{MRUBYMIX} #{Webruby.entrypoint_file} #{Webruby.build_dir}/rbcode.rb"
|
19
20
|
sh "#{Webruby.build_dir}/#{MRBC} -Bapp_irep -o#{Webruby.build_dir}/rbcode.c #{Webruby.build_dir}/rbcode.rb"
|
data/lib/webruby/rake/mruby.rake
CHANGED
@@ -36,10 +36,12 @@ end
|
|
36
36
|
|
37
37
|
desc "build mruby library"
|
38
38
|
task :libmruby => Webruby.build_config do |t|
|
39
|
-
|
39
|
+
ENV["MRUBY_CONFIG"] = Webruby.full_build_config
|
40
|
+
sh "cd #{MRUBY_DIR} && ruby ./minirake #{Webruby.full_build_dir}/#{LIBMRUBY}"
|
40
41
|
end
|
41
42
|
|
42
43
|
desc "mruby test library"
|
43
44
|
task :libmruby_test => Webruby.build_config do |t|
|
44
|
-
|
45
|
+
ENV["MRUBY_CONFIG"] = Webruby.full_build_config
|
46
|
+
sh "cd #{MRUBY_DIR} && ruby ./minirake #{Webruby.full_build_dir}/#{MRBTEST}"
|
45
47
|
end
|
data/modules/emscripten/AUTHORS
CHANGED
@@ -109,6 +109,8 @@ set(CMAKE_CXX_RESPONSE_FILE_LINK_FLAG "@")
|
|
109
109
|
# Specify the program to use when building static libraries. Force Emscripten-related command line options to clang.
|
110
110
|
set(CMAKE_CXX_ARCHIVE_CREATE "${CMAKE_AR} rc <TARGET> ${CMAKE_START_TEMP_FILE} <LINK_FLAGS> <OBJECTS>${CMAKE_END_TEMP_FILE}")
|
111
111
|
set(CMAKE_C_ARCHIVE_CREATE "${CMAKE_AR} rc <TARGET> ${CMAKE_START_TEMP_FILE} <LINK_FLAGS> <OBJECTS>${CMAKE_END_TEMP_FILE}")
|
112
|
+
set(CMAKE_CXX_ARCHIVE_APPEND "${CMAKE_AR} r <TARGET> ${CMAKE_START_TEMP_FILE} <LINK_FLAGS> <OBJECTS>${CMAKE_END_TEMP_FILE}")
|
113
|
+
set(CMAKE_C_ARCHIVE_APPEND "${CMAKE_AR} r <TARGET> ${CMAKE_START_TEMP_FILE} <LINK_FLAGS> <OBJECTS>${CMAKE_END_TEMP_FILE}")
|
112
114
|
|
113
115
|
# Set a global EMSCRIPTEN variable that can be used in client CMakeLists.txt to detect when building using Emscripten.
|
114
116
|
# There seems to be some kind of bug with CMake, so you might need to define this manually on the command line with "-DEMSCRIPTEN=1".
|
data/modules/emscripten/emcc
CHANGED
@@ -53,14 +53,17 @@ from tools import shared, jsrun
|
|
53
53
|
from tools.shared import Compression, execute, suffix, unsuffixed, unsuffixed_basename, WINDOWS
|
54
54
|
from tools.response_file import read_response_file
|
55
55
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
56
|
+
# endings = dot + a suffix, safe to test by filename.endswith(endings)
|
57
|
+
C_ENDINGS = ('.c', '.C')
|
58
|
+
CXX_ENDINGS = ('.cpp', '.cxx', '.cc', '.CPP', '.CXX', '.CC')
|
59
|
+
SOURCE_ENDINGS = C_ENDINGS + CXX_ENDINGS + ('.m', '.mm')
|
60
|
+
BITCODE_ENDINGS = ('.bc', '.o', '.obj')
|
61
|
+
DYNAMICLIB_ENDINGS = ('.dylib', '.so', '.dll')
|
62
|
+
STATICLIB_ENDINGS = ('.a',)
|
63
|
+
ASSEMBLY_ENDINGS = ('.ll',)
|
64
|
+
|
63
65
|
LIB_PREFIXES = ('', 'lib')
|
66
|
+
|
64
67
|
JS_CONTAINING_SUFFIXES = ('js', 'html')
|
65
68
|
|
66
69
|
# Mapping of emcc opt levels to llvm opt levels. We use llvm opt level 3 in emcc opt
|
@@ -341,6 +344,10 @@ Options that are modified or new in %s include:
|
|
341
344
|
For more docs on the options --preload-file
|
342
345
|
accepts, see https://github.com/kripken/emscripten/wiki/Filesystem-Guide
|
343
346
|
|
347
|
+
--exclude-file <name> Files and directories to be excluded from
|
348
|
+
--embed-file and --preload-file
|
349
|
+
wildcard is supported
|
350
|
+
|
344
351
|
--compression <codec> Compress both the compiled code and embedded/
|
345
352
|
preloaded files. <codec> should be a triple,
|
346
353
|
|
@@ -758,9 +765,13 @@ def in_temp(name):
|
|
758
765
|
def filename_type_suffix(filename):
|
759
766
|
for i in reversed(filename.split('.')[1:]):
|
760
767
|
if not i.isdigit():
|
761
|
-
return
|
768
|
+
return i
|
762
769
|
return ''
|
763
770
|
|
771
|
+
def filename_type_ending(filename):
|
772
|
+
suffix = filename_type_suffix(filename)
|
773
|
+
return '' if not suffix else ('.' + suffix)
|
774
|
+
|
764
775
|
try:
|
765
776
|
call = CXX if use_cxx else CC
|
766
777
|
|
@@ -780,6 +791,7 @@ try:
|
|
780
791
|
split_js_file = None
|
781
792
|
preload_files = []
|
782
793
|
embed_files = []
|
794
|
+
exclude_files = []
|
783
795
|
compression = None
|
784
796
|
ignore_dynamic_linking = False
|
785
797
|
shell_path = shared.path_from_root('src', 'shell.html')
|
@@ -896,6 +908,11 @@ try:
|
|
896
908
|
preload_files.append(newargs[i+1])
|
897
909
|
newargs[i] = ''
|
898
910
|
newargs[i+1] = ''
|
911
|
+
elif newargs[i].startswith('--exclude-file'):
|
912
|
+
check_bad_eq(newargs[i])
|
913
|
+
exclude_files.append(newargs[i+1])
|
914
|
+
newargs[i] = ''
|
915
|
+
newargs[i+1] = ''
|
899
916
|
elif newargs[i].startswith('--compression'):
|
900
917
|
check_bad_eq(newargs[i])
|
901
918
|
parts = newargs[i+1].split(',')
|
@@ -990,6 +1007,7 @@ try:
|
|
990
1007
|
newargs = newargs + [default_cxx_std]
|
991
1008
|
|
992
1009
|
if emrun:
|
1010
|
+
pre_js += open(shared.path_from_root('src', 'emrun_prejs.js')).read() + '\n'
|
993
1011
|
post_js += open(shared.path_from_root('src', 'emrun_postjs.js')).read() + '\n'
|
994
1012
|
|
995
1013
|
if js_opts is None: js_opts = opt_level >= 2
|
@@ -1042,23 +1060,23 @@ try:
|
|
1042
1060
|
prev = newargs[i-1]
|
1043
1061
|
if prev in ['-MT', '-MF', '-MQ', '-D', '-U', '-o', '-x', '-Xpreprocessor', '-include', '-imacros', '-idirafter', '-iprefix', '-iwithprefix', '-iwithprefixbefore', '-isysroot', '-imultilib', '-A', '-isystem', '-iquote', '-install_name', '-compatibility_version', '-current_version', '-I', '-L']: continue # ignore this gcc-style argument
|
1044
1062
|
|
1045
|
-
if (os.path.islink(arg) and os.path.realpath(arg).endswith(
|
1063
|
+
if (os.path.islink(arg) and os.path.realpath(arg).endswith(SOURCE_ENDINGS + BITCODE_ENDINGS + DYNAMICLIB_ENDINGS + ASSEMBLY_ENDINGS)):
|
1046
1064
|
arg = os.path.realpath(arg)
|
1047
1065
|
|
1048
1066
|
if not arg.startswith('-'):
|
1049
1067
|
if not os.path.exists(arg):
|
1050
|
-
logging.error(
|
1068
|
+
logging.error('%s: No such file or directory ("%s" was expected to be an input file, based on the commandline arguments provided)' % (arg, arg))
|
1051
1069
|
exit(1)
|
1052
1070
|
|
1053
|
-
|
1054
|
-
if
|
1071
|
+
arg_ending = filename_type_ending(arg)
|
1072
|
+
if arg_ending.endswith(SOURCE_ENDINGS + BITCODE_ENDINGS + DYNAMICLIB_ENDINGS + ASSEMBLY_ENDINGS) or shared.Building.is_ar(arg): # we already removed -o <target>, so all these should be inputs
|
1055
1073
|
newargs[i] = ''
|
1056
|
-
if
|
1074
|
+
if arg_ending.endswith(SOURCE_ENDINGS):
|
1057
1075
|
input_files.append(arg)
|
1058
1076
|
has_source_inputs = True
|
1059
|
-
elif
|
1077
|
+
elif arg_ending.endswith(ASSEMBLY_ENDINGS) or shared.Building.is_bitcode(arg): # this should be bitcode, make sure it is valid
|
1060
1078
|
input_files.append(arg)
|
1061
|
-
elif
|
1079
|
+
elif arg_ending.endswith(STATICLIB_ENDINGS + DYNAMICLIB_ENDINGS):
|
1062
1080
|
# if it's not, and it's a library, just add it to libs to find later
|
1063
1081
|
l = unsuffixed_basename(arg)
|
1064
1082
|
for prefix in LIB_PREFIXES:
|
@@ -1070,10 +1088,10 @@ try:
|
|
1070
1088
|
newargs[i] = ''
|
1071
1089
|
else:
|
1072
1090
|
logging.warning(arg + ' is not valid LLVM bitcode')
|
1073
|
-
elif
|
1091
|
+
elif arg_ending.endswith(STATICLIB_ENDINGS):
|
1074
1092
|
if not shared.Building.is_ar(arg):
|
1075
1093
|
if shared.Building.is_bitcode(arg):
|
1076
|
-
logging.error(arg + ': File has a suffix of a static library ' + str(
|
1094
|
+
logging.error(arg + ': File has a suffix of a static library ' + str(STATICLIB_ENDINGS) + ', but instead is an LLVM bitcode file! When linking LLVM bitcode files, use one of the suffixes ' + str(BITCODE_ENDINGS))
|
1077
1095
|
else:
|
1078
1096
|
logging.error(arg + ': Unknown format, not a static library!')
|
1079
1097
|
exit(1)
|
@@ -1098,17 +1116,12 @@ try:
|
|
1098
1116
|
target = target_basename + '.o'
|
1099
1117
|
final_suffix = 'o'
|
1100
1118
|
|
1101
|
-
# do not link in libs when just generating object code (not an 'executable', i.e. JS, or a library)
|
1102
|
-
if ('.' + final_suffix) in BITCODE_SUFFIXES and len(libs) > 0:
|
1103
|
-
logging.warning('not linking against libraries since only compiling to bitcode')
|
1104
|
-
libs = []
|
1105
|
-
|
1106
1119
|
# Find library files
|
1107
1120
|
for lib in libs:
|
1108
1121
|
logging.debug('looking for library "%s"' % lib)
|
1109
1122
|
found = False
|
1110
1123
|
for prefix in LIB_PREFIXES:
|
1111
|
-
for suff in
|
1124
|
+
for suff in STATICLIB_ENDINGS + DYNAMICLIB_ENDINGS:
|
1112
1125
|
name = prefix + lib + suff
|
1113
1126
|
for lib_dir in lib_dirs:
|
1114
1127
|
path = os.path.join(lib_dir, name)
|
@@ -1119,12 +1132,21 @@ try:
|
|
1119
1132
|
break
|
1120
1133
|
if found: break
|
1121
1134
|
if found: break
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1135
|
+
if not found: logging.warning('emcc: cannot find library "%s"' % lib)
|
1136
|
+
|
1137
|
+
# If not compiling to JS, then we are compiling to an intermediate bitcode objects or library, so
|
1138
|
+
# ignore dynamic linking, since multiple dynamic linkings can interfere with each other
|
1139
|
+
if not filename_type_suffix(target) in JS_CONTAINING_SUFFIXES or ignore_dynamic_linking:
|
1140
|
+
def check(input_file):
|
1141
|
+
if filename_type_ending(input_file) in DYNAMICLIB_ENDINGS:
|
1142
|
+
if not ignore_dynamic_linking: logging.warning('ignoring dynamic library %s because not compiling to JS or HTML, remember to link it when compiling to JS or HTML at the end' % os.path.basename(input_file))
|
1143
|
+
return False
|
1144
|
+
else:
|
1145
|
+
return True
|
1146
|
+
input_files = filter(lambda input_file: check(input_file), input_files)
|
1125
1147
|
|
1126
1148
|
if len(input_files) == 0:
|
1127
|
-
logging.error('no input files\nnote that input files without a known suffix are ignored, make sure your input files end with one of: ' + str(
|
1149
|
+
logging.error('no input files\nnote that input files without a known suffix are ignored, make sure your input files end with one of: ' + str(SOURCE_ENDINGS + BITCODE_ENDINGS + DYNAMICLIB_ENDINGS + STATICLIB_ENDINGS + ASSEMBLY_ENDINGS))
|
1128
1150
|
exit(0)
|
1129
1151
|
|
1130
1152
|
newargs = CC_ADDITIONAL_ARGS + newargs
|
@@ -1151,8 +1173,28 @@ try:
|
|
1151
1173
|
logging.warning('disabling asm.js since embind is not ready for it yet')
|
1152
1174
|
shared.Settings.ASM_JS = 0
|
1153
1175
|
|
1176
|
+
if os.environ.get('EMCC_FAST_COMPILER'):
|
1177
|
+
shared.Settings.ASM_JS = 1
|
1178
|
+
if shared.Settings.DISABLE_EXCEPTION_CATCHING == 0:
|
1179
|
+
logging.warning('disabling exception catching since not supported in fastcomp yet')
|
1180
|
+
shared.Settings.DISABLE_EXCEPTION_CATCHING = 1
|
1181
|
+
assert shared.Settings.ALLOW_MEMORY_GROWTH == 0, 'memory growth not supported in fastcomp yet'
|
1182
|
+
assert shared.Settings.UNALIGNED_MEMORY == 0, 'forced unaligned memory not supported in fastcomp'
|
1183
|
+
assert shared.Settings.SAFE_HEAP == 0, 'safe heap not supported in fastcomp yet'
|
1184
|
+
assert shared.Settings.CHECK_HEAP_ALIGN == 0, 'check heap align not supported in fastcomp yet'
|
1185
|
+
assert shared.Settings.SAFE_DYNCALLS == 0, 'safe dyncalls not supported in fastcomp'
|
1186
|
+
assert shared.Settings.RESERVED_FUNCTION_POINTERS == 0, 'reserved function pointers not supported in fastcomp'
|
1187
|
+
assert shared.Settings.ASM_HEAP_LOG == 0, 'asm heap log not supported in fastcomp'
|
1188
|
+
assert shared.Settings.LABEL_DEBUG == 0, 'label debug not supported in fastcomp'
|
1189
|
+
assert shared.Settings.LEGACY_GL_EMULATION == 0, 'legacy gl emulation not supported in fastcomp'
|
1190
|
+
assert shared.Settings.EXECUTION_TIMEOUT == -1, 'execution timeout not supported in fastcomp'
|
1191
|
+
assert shared.Settings.NAMED_GLOBALS == 0, 'named globals not supported in fastcomp'
|
1192
|
+
assert shared.Settings.PGO == 0, 'pgo not supported in fastcomp'
|
1193
|
+
assert shared.Settings.TARGET_LE32 == 1, 'fastcomp requires le32'
|
1194
|
+
assert not bind, 'embind not supported in fastcomp yet'
|
1195
|
+
|
1154
1196
|
if shared.Settings.ASM_JS:
|
1155
|
-
assert opt_level >= 1, 'asm.js requires -O1 or above'
|
1197
|
+
assert opt_level >= 1 or os.environ.get('EMCC_FAST_COMPILER'), 'asm.js requires -O1 or above'
|
1156
1198
|
|
1157
1199
|
if bind:
|
1158
1200
|
shared.Settings.RESERVED_FUNCTION_POINTERS = max(shared.Settings.RESERVED_FUNCTION_POINTERS, 10)
|
@@ -1241,14 +1283,14 @@ try:
|
|
1241
1283
|
|
1242
1284
|
# First, generate LLVM bitcode. For each input file, we get base.o with bitcode
|
1243
1285
|
for input_file in input_files:
|
1244
|
-
|
1245
|
-
if
|
1286
|
+
file_ending = filename_type_ending(input_file)
|
1287
|
+
if file_ending.endswith(SOURCE_ENDINGS):
|
1246
1288
|
logging.debug('compiling source file: ' + input_file)
|
1247
1289
|
input_file = shared.Building.preprocess(input_file, in_temp(uniquename(input_file)))
|
1248
1290
|
output_file = in_temp(unsuffixed(uniquename(input_file)) + '.o')
|
1249
1291
|
temp_files.append(output_file)
|
1250
1292
|
args = newargs + ['-emit-llvm', '-c', input_file, '-o', output_file]
|
1251
|
-
if
|
1293
|
+
if file_ending.endswith(CXX_ENDINGS):
|
1252
1294
|
args += shared.EMSDK_CXX_OPTS
|
1253
1295
|
logging.debug("running: " + call + ' ' + ' '.join(args))
|
1254
1296
|
execute([call] + args) # let compiler frontend print directly, so colors are saved (PIPE kills that)
|
@@ -1256,17 +1298,17 @@ try:
|
|
1256
1298
|
logging.error('compiler frontend failed to generate LLVM bitcode, halting')
|
1257
1299
|
sys.exit(1)
|
1258
1300
|
else: # bitcode
|
1259
|
-
if
|
1301
|
+
if file_ending.endswith(BITCODE_ENDINGS):
|
1260
1302
|
logging.debug('copying bitcode file: ' + input_file)
|
1261
1303
|
temp_file = in_temp(unsuffixed(uniquename(input_file)) + '.o')
|
1262
1304
|
shutil.copyfile(input_file, temp_file)
|
1263
1305
|
temp_files.append(temp_file)
|
1264
|
-
elif
|
1306
|
+
elif file_ending.endswith(DYNAMICLIB_ENDINGS) or shared.Building.is_ar(input_file):
|
1265
1307
|
logging.debug('copying library file: ' + input_file)
|
1266
1308
|
temp_file = in_temp(uniquename(input_file))
|
1267
1309
|
shutil.copyfile(input_file, temp_file)
|
1268
1310
|
temp_files.append(temp_file)
|
1269
|
-
elif
|
1311
|
+
elif file_ending.endswith(ASSEMBLY_ENDINGS):
|
1270
1312
|
if not LEAVE_INPUTS_RAW:
|
1271
1313
|
# Note that by assembling the .ll file, then disassembling it later, we will
|
1272
1314
|
# remove annotations which is a good thing for compilation time
|
@@ -1284,8 +1326,8 @@ try:
|
|
1284
1326
|
# Optimize source files
|
1285
1327
|
if llvm_opts > 0:
|
1286
1328
|
for i, input_file in enumerate(input_files):
|
1287
|
-
|
1288
|
-
if
|
1329
|
+
file_ending = filename_type_ending(input_file)
|
1330
|
+
if file_ending.endswith(SOURCE_ENDINGS):
|
1289
1331
|
temp_file = temp_files[i]
|
1290
1332
|
logging.debug('optimizing %s with -O%s' % (input_file, llvm_opts))
|
1291
1333
|
shared.Building.llvm_opt(temp_file, llvm_opts)
|
@@ -1630,11 +1672,11 @@ try:
|
|
1630
1672
|
|
1631
1673
|
# First, combine the bitcode files if there are several. We must also link if we have a singleton .a
|
1632
1674
|
if len(input_files) + len(extra_files_to_link) > 1 or \
|
1633
|
-
(not LEAVE_INPUTS_RAW and not (suffix(temp_files[0]) in
|
1675
|
+
(not LEAVE_INPUTS_RAW and not (suffix(temp_files[0]) in BITCODE_ENDINGS or suffix(temp_files[0]) in DYNAMICLIB_ENDINGS) and shared.Building.is_ar(temp_files[0])):
|
1634
1676
|
linker_inputs = temp_files + extra_files_to_link
|
1635
1677
|
logging.debug('linking: ' + str(linker_inputs))
|
1636
1678
|
t0 = time.time()
|
1637
|
-
shared.Building.link(linker_inputs, in_temp(target_basename + '.bc'), force_archive_contents = len(filter(lambda temp: not temp.endswith(
|
1679
|
+
shared.Building.link(linker_inputs, in_temp(target_basename + '.bc'), force_archive_contents = len(filter(lambda temp: not temp.endswith(STATICLIB_ENDINGS), temp_files)) == 0)
|
1638
1680
|
t1 = time.time()
|
1639
1681
|
logging.debug(' linking took %.2f seconds' % (t1 - t0))
|
1640
1682
|
final = in_temp(target_basename + '.bc')
|
@@ -1679,7 +1721,12 @@ try:
|
|
1679
1721
|
else:
|
1680
1722
|
# At minimum remove dead functions etc., this potentially saves a lot in the size of the generated code (and the time to compile it)
|
1681
1723
|
link_opts += shared.Building.get_safe_internalize() + ['-globaldce']
|
1682
|
-
|
1724
|
+
|
1725
|
+
# Simplify LLVM bitcode for fastcomp
|
1726
|
+
if os.environ.get('EMCC_FAST_COMPILER') and not AUTODEBUG:
|
1727
|
+
link_opts += ['-pnacl-abi-simplify-preopt', '-pnacl-abi-simplify-postopt']
|
1728
|
+
|
1729
|
+
if (not save_bc and not os.environ.get('EMCC_FAST_COMPILER')) or AUTODEBUG:
|
1683
1730
|
# let llvm opt directly emit ll, to skip writing and reading all the bitcode
|
1684
1731
|
link_opts += ['-S']
|
1685
1732
|
shared.Building.llvm_opt(final, link_opts, final + '.link.ll')
|
@@ -1706,6 +1753,12 @@ try:
|
|
1706
1753
|
final += '.ad.ll'
|
1707
1754
|
if DEBUG: save_intermediate('autodebug', 'll')
|
1708
1755
|
|
1756
|
+
# Simplify bitcode after autodebug
|
1757
|
+
if os.environ.get('EMCC_FAST_COMPILER') and (AUTODEBUG or LEAVE_INPUTS_RAW):
|
1758
|
+
shared.Building.llvm_opt(final, ['-pnacl-abi-simplify-preopt', '-pnacl-abi-simplify-postopt'], final + '.adsimp.bc')
|
1759
|
+
final += '.adsimp.bc'
|
1760
|
+
if DEBUG: save_intermediate('adsimp', 'bc')
|
1761
|
+
|
1709
1762
|
# Emscripten
|
1710
1763
|
logging.debug('LLVM => JS')
|
1711
1764
|
extra_args = [] if not js_libraries else ['--libraries', ','.join(map(os.path.abspath, js_libraries))]
|
@@ -1716,13 +1769,16 @@ try:
|
|
1716
1769
|
# Embed and preload files
|
1717
1770
|
if len(preload_files) + len(embed_files) > 0:
|
1718
1771
|
logging.debug('setting up files')
|
1719
|
-
file_args = [
|
1772
|
+
file_args = []
|
1720
1773
|
if len(preload_files) > 0:
|
1721
1774
|
file_args.append('--preload')
|
1722
1775
|
file_args += preload_files
|
1723
1776
|
if len(embed_files) > 0:
|
1724
1777
|
file_args.append('--embed')
|
1725
1778
|
file_args += embed_files
|
1779
|
+
if len(exclude_files) > 0:
|
1780
|
+
file_args.append('--exclude')
|
1781
|
+
file_args += exclude_files
|
1726
1782
|
if Compression.on:
|
1727
1783
|
file_args += ['--compress', Compression.encoder, Compression.decoder, Compression.js_name]
|
1728
1784
|
if use_preload_cache:
|