瀏覽代碼

Merge pull request #7863 from eska014/webbuild

Web builds: Zip automatically; Fix on Windows; Parallel wasm/asm.js builds
Juan Linietsky 8 年之前
父節點
當前提交
d0973e645c
共有 2 個文件被更改,包括 29 次插入13 次删除
  1. 1 1
      platform/javascript/SCsub
  2. 28 12
      platform/javascript/detect.py

+ 1 - 1
platform/javascript/SCsub

@@ -32,7 +32,7 @@ basename = "godot" + env["PROGSUFFIX"] # output file name without file extension
 # placeholder while leaving extension; also change `.html.mem` to just `.mem`
 fixup_html = env.Substfile(html_file, SUBST_DICT=[(basename, '$$GODOT_BASE'), ('.html.mem', '.mem')], SUBSTFILESUFFIX='.fixup.html')
 
-zip_dir = env.Dir('#bin/js_zip')
+zip_dir = env.Dir('#bin/.javascript_zip')
 zip_files = []
 js_file = env.SideEffect(html_file.File(basename+'.js'), html_file)
 zip_files.append(env.InstallAs(

+ 28 - 12
platform/javascript/detect.py

@@ -12,8 +12,6 @@ def get_name():
 
 
 def can_build():
-
-    import os
     return os.environ.has_key("EMSCRIPTEN_ROOT")
 
 
@@ -35,23 +33,41 @@ def get_flags():
     ]
 
 
+def create(env):
+    # remove Windows' .exe suffix
+    return env.Clone(PROGSUFFIX='')
+
+
+def escape_sources_backslashes(target, source, env, for_signature):
+    return [path.replace('\\','\\\\') for path in env.GetBuildPath(source)]
+
+def escape_target_backslashes(target, source, env, for_signature):
+    return env.GetBuildPath(target[0]).replace('\\','\\\\')
+
+
 def configure(env):
     env['ENV'] = os.environ
-    env.use_windows_spawn_fix('javascript')
 
     env.Append(CPPPATH=['#platform/javascript'])
 
-    em_path = os.environ["EMSCRIPTEN_ROOT"]
-
-    env['ENV']['PATH'] = em_path + ":" + env['ENV']['PATH']
-    env['CC']     = em_path + '/emcc'
-    env['CXX']    = em_path + '/em++'
-    env['LINK']   = em_path + '/emcc'
-    env['AR']     = em_path + '/emar'
-    env['RANLIB'] = em_path + '/emranlib'
+    env.PrependENVPath('PATH', os.environ['EMSCRIPTEN_ROOT'])
+    env['CC']      = 'emcc'
+    env['CXX']     = 'em++'
+    env['LINK']    = 'emcc'
+    env['RANLIB']  = 'emranlib'
+    # Emscripten's ar has issues with duplicate file names, so use cc
+    env['AR']      = 'emcc'
+    env['ARFLAGS'] = '-o'
+    if (os.name == 'nt'):
+        # use TempFileMunge on Windows since some commands get too long for
+        # cmd.exe even with spawn_fix
+        # need to escape backslashes for this
+        env['ESCAPED_SOURCES'] = escape_sources_backslashes
+        env['ESCAPED_TARGET'] = escape_target_backslashes
+        env['ARCOM'] = '${TEMPFILE("%s")}' % env['ARCOM'].replace('$SOURCES', '$ESCAPED_SOURCES').replace('$TARGET', '$ESCAPED_TARGET')
 
     env['OBJSUFFIX'] = '.bc'
-    env['LIBSUFFIX'] = '.a'
+    env['LIBSUFFIX'] = '.bc'
 
     if (env["target"] == "release"):
         env.Append(CCFLAGS=['-O2'])