The new 'split_libmodules=yes' option is useful to work around linker
command line size limitations when linking a huge number of objects.
We're currently over 64k chars when linking libmodules.a on Windows
with MinGW, which triggers issues as seen in #30892.
Even on Linux, we can also reach linker command line size limitations
by adding more custom modules.
We force this option to True for MinGW on Windows, which fixes #30892.
Additional changes to lib splitting:
- Fix linking of the split module libs with interdependent symbols,
hacking our way into LINKCOM and SHLINKCOM to set the `--start-group`
and `--end-group` flags.
- Fix Python 3 compatibility in `methods.split_lib()`.
- Drop seemingly obsolete condition for 'msys' on 'posix'.
- Drop the unnecessary 'split_drivers' as the drivers lib is no longer
too big since we moved all thirdparty builds to modules.
Co-authored-by: Hein-Pieter van Braam-Stewart <hp@tmm.cx>
(cherry picked from commit c320a82213
)
25 lines
514 B
Python
25 lines
514 B
Python
#!/usr/bin/env python
|
|
|
|
Import('env')
|
|
|
|
env_modules = env.Clone()
|
|
|
|
Export('env_modules')
|
|
|
|
env.modules_sources = [
|
|
"register_module_types.gen.cpp",
|
|
]
|
|
|
|
for x in env.module_list:
|
|
if (x in env.disabled_modules):
|
|
continue
|
|
env_modules.Append(CPPFLAGS=["-DMODULE_" + x.upper() + "_ENABLED"])
|
|
SConscript(x + "/SCsub")
|
|
|
|
if env['split_libmodules']:
|
|
env.split_lib("modules", env_lib = env_modules)
|
|
else:
|
|
lib = env_modules.add_library("modules", env.modules_sources)
|
|
|
|
env.Prepend(LIBS=[lib])
|