aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde2016-10-30 17:04:07 +0100
committerRémi Verschelde2016-10-31 00:07:29 +0100
commit62d1e39113efff596504b75ab669cf92e29ec0fb (patch)
treeea79ae20c997239ee04a4226a952905dc3658547
parentb492dd78bd510fc7336434c194920682d6c8bf89 (diff)
downloadgodot-62d1e39113efff596504b75ab669cf92e29ec0fb.tar.gz
godot-62d1e39113efff596504b75ab669cf92e29ec0fb.tar.zst
godot-62d1e39113efff596504b75ab669cf92e29ec0fb.zip
scons: Move lib splitting method to methods.py
Apparently it might still be necessary for some console ports. (cherry picked from commit e34a5324c884960735b3f743956b3a052574d6ee)
-rw-r--r--SConstruct1
-rw-r--r--drivers/SCsub9
-rwxr-xr-xmethods.py44
3 files changed, 51 insertions, 3 deletions
diff --git a/SConstruct b/SConstruct
index 4d895b38c..e26af3be7 100644
--- a/SConstruct
+++ b/SConstruct
@@ -101,6 +101,7 @@ env_base.__class__.disable_module = methods.disable_module
env_base.__class__.add_source_files = methods.add_source_files
env_base.__class__.use_windows_spawn_fix = methods.use_windows_spawn_fix
+env_base.__class__.split_lib = methods.split_lib
env_base["x86_libtheora_opt_gcc"]=False
env_base["x86_libtheora_opt_vc"]=False
diff --git a/drivers/SCsub b/drivers/SCsub
index e6312d25c..faf2547e8 100644
--- a/drivers/SCsub
+++ b/drivers/SCsub
@@ -33,6 +33,9 @@ if (env["tools"]=="yes"):
if env['vsproj']=="yes":
env.AddToVSProject(env.drivers_sources)
-env.add_source_files(env.drivers_sources,"*.cpp")
-lib = env.Library("drivers",env.drivers_sources)
-env.Prepend(LIBS=[lib])
+if env.split_drivers:
+ env.split_lib("drivers")
+else:
+ 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 2fa4cecca..cfcfe9543 100755
--- a/methods.py
+++ b/methods.py
@@ -1400,6 +1400,50 @@ def use_windows_spawn_fix(self, platform=None):
self['SPAWN'] = mySpawn
+def split_lib(self, libname):
+ import string
+ env = self
+
+ num = 0
+ cur_base = ""
+ max_src = 64
+ list = []
+ lib_list = []
+
+ for f in getattr(env, libname + "_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(libname + str(num), list)
+ lib_list.append(lib)
+ list = []
+ num = num + 1
+ cur_base = base
+ list.append(f)
+
+ lib = env.Library(libname + 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(libname + "_collated", lib_list)
+ lib_list = [lib]
+
+ lib_base = []
+ env.add_source_files(lib_base, "*.cpp")
+ lib_list.insert(0, env.Library(libname, lib_base))
+
+ env.Prepend(LIBS = lib_list)
+
+
def save_active_platforms(apnames,ap):
for x in ap: