summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro J. Estébanez <pedrojrulez@gmail.com>2016-10-29 03:34:53 +0200
committerPedro J. Estébanez <pedrojrulez@gmail.com>2016-10-29 03:34:53 +0200
commit51ad1c16683589aa1ebc73e29416e1b0fc50d30d (patch)
tree2be83e0301de6eab2bf4bb7de1faf6b0182cfca9
parent8321e48ab0ac0700e1aef8f829140052c1ba4c6d (diff)
Adopt simpler strategy for big libs on Windows
-rw-r--r--drivers/SCsub52
-rwxr-xr-xmethods.py10
2 files changed, 12 insertions, 50 deletions
diff --git a/drivers/SCsub b/drivers/SCsub
index 1f1509efa8..9c561b5c13 100644
--- a/drivers/SCsub
+++ b/drivers/SCsub
@@ -35,52 +35,6 @@ if (env["tools"]=="yes"):
if env['vsproj']=="yes":
env.AddToVSProject(env.drivers_sources)
-
-# Split drivers, this used to be needed for windows until separate builders for windows were created
-# FIXME: Check if still needed now that the drivers were made more lightweight
-if (env.split_drivers):
- import string
-
- num = 0
- cur_base = ""
- max_src = 64
- list = []
- lib_list = []
-
- for f in env.drivers_sources:
- fname = ""
- if type(f) == type(""):
- fname = env.File(f).path
- else:
- fname = env.File(f)[0].path
- fname = fname.replace("\\", "/")
- base = string.join(fname.split("/")[:2], "/")
- if base != cur_base and len(list) > max_src:
- if num > 0:
- lib = env.Library("drivers"+str(num), list)
- lib_list.append(lib)
- list = []
- num = num+1
- cur_base = base
- list.append(f)
-
- lib = env.Library("drivers"+str(num), list)
- lib_list.append(lib)
-
- if len(lib_list) > 0:
- import os, sys
- if os.name=='posix' and sys.platform=='msys':
- env.Replace(ARFLAGS=['rcsT'])
-
- lib = env.Library("drivers_collated", lib_list)
- lib_list = [lib]
-
- drivers_base=[]
- env.add_source_files(drivers_base,"*.cpp")
- lib_list.insert(0, env.Library("drivers", drivers_base))
-
- env.Prepend(LIBS=lib_list)
-else:
- env.add_source_files(env.drivers_sources,"*.cpp")
- lib = env.Library("drivers",env.drivers_sources)
- env.Prepend(LIBS=[lib])
+env.add_source_files(env.drivers_sources,"*.cpp")
+lib = env.Library("drivers",env.drivers_sources)
+env.Prepend(LIBS=[lib])
diff --git a/methods.py b/methods.py
index 477fe4f12f..26c1c6e68e 100755
--- a/methods.py
+++ b/methods.py
@@ -1352,7 +1352,15 @@ def use_windows_spawn_fix(self, platform=None):
if (os.name!="nt"):
return #not needed, only for windows
- self.split_drivers=True
+ # 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 looses symbols defined by overwritten objects.
+ # By enabling quick append instead of the default mode (replacing), libraries will
+ # got built correctly regardless the invokation 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')
import subprocess