diff options
| author | Rémi Verschelde | 2016-10-30 17:04:07 +0100 |
|---|---|---|
| committer | Rémi Verschelde | 2016-10-31 00:07:29 +0100 |
| commit | 62d1e39113efff596504b75ab669cf92e29ec0fb (patch) | |
| tree | ea79ae20c997239ee04a4226a952905dc3658547 | |
| parent | b492dd78bd510fc7336434c194920682d6c8bf89 (diff) | |
| download | godot-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-- | SConstruct | 1 | ||||
| -rw-r--r-- | drivers/SCsub | 9 | ||||
| -rwxr-xr-x | methods.py | 44 |
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: |
