mirror of
https://github.com/godotengine/godot.git
synced 2024-11-22 04:06:14 +00:00
Merge pull request #96407 from alvinhochun/mingw-ar-long-command-tempfile
Remove `ARFLAGS` hack for Windows, replace with `TEMPFILE`
This commit is contained in:
commit
804d9775b5
22
methods.py
22
methods.py
@ -467,16 +467,6 @@ def use_windows_spawn_fix(self, platform=None):
|
||||
if os.name != "nt":
|
||||
return # not needed, only for windows
|
||||
|
||||
# On Windows, due to the limited command line length, when creating a static library
|
||||
# from a very high number of objects SCons will invoke "ar" once per object file;
|
||||
# that makes object files with same names to be overwritten so the last wins and
|
||||
# the library loses symbols defined by overwritten objects.
|
||||
# By enabling quick append instead of the default mode (replacing), libraries will
|
||||
# got built correctly regardless the invocation strategy.
|
||||
# Furthermore, since SCons will rebuild the library from scratch when an object file
|
||||
# changes, no multiple versions of the same object file will be present.
|
||||
self.Replace(ARFLAGS="q")
|
||||
|
||||
def mySubProcess(cmdline, env):
|
||||
startupinfo = subprocess.STARTUPINFO()
|
||||
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||
@ -500,18 +490,16 @@ def use_windows_spawn_fix(self, platform=None):
|
||||
return rv
|
||||
|
||||
def mySpawn(sh, escape, cmd, args, env):
|
||||
# Used by TEMPFILE.
|
||||
if cmd == "del":
|
||||
os.remove(args[1])
|
||||
return 0
|
||||
|
||||
newargs = " ".join(args[1:])
|
||||
cmdline = cmd + " " + newargs
|
||||
|
||||
rv = 0
|
||||
env = {str(key): str(value) for key, value in iter(env.items())}
|
||||
if len(cmdline) > 32000 and cmd.endswith("ar"):
|
||||
cmdline = cmd + " " + args[1] + " " + args[2] + " "
|
||||
for i in range(3, len(args)):
|
||||
rv = mySubProcess(cmdline + args[i], env)
|
||||
if rv:
|
||||
break
|
||||
else:
|
||||
rv = mySubProcess(cmdline, env)
|
||||
|
||||
return rv
|
||||
|
@ -709,6 +709,11 @@ def configure_mingw(env: "SConsEnvironment"):
|
||||
# https://www.scons.org/wiki/LongCmdLinesOnWin32
|
||||
env.use_windows_spawn_fix()
|
||||
|
||||
# In case the command line to AR is too long, use a response file.
|
||||
env["ARCOM_ORIG"] = env["ARCOM"]
|
||||
env["ARCOM"] = "${TEMPFILE('$ARCOM_ORIG', '$ARCOMSTR')}"
|
||||
env["TEMPFILESUFFIX"] = ".rsp"
|
||||
|
||||
## Build type
|
||||
|
||||
if not env["use_llvm"] and not try_cmd("gcc --version", env["mingw_prefix"], env["arch"]):
|
||||
|
Loading…
Reference in New Issue
Block a user