diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2020-11-26 10:29:19 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-11-26 17:28:35 +0000 |
commit | 710aa34bd1bb9ff1c13a41737c86e636e57f0a88 (patch) | |
tree | d7e6b8c286968946f8a2c4974d4da3c822a78ca2 /src/third_party/SConscript | |
parent | 37f35e3c80096b5d55b482b83bfb3cf7af16852f (diff) | |
download | mongo-710aa34bd1bb9ff1c13a41737c86e636e57f0a88.tar.gz |
Revert "SERVER-48291 Ensure runtime is dynamically linked in dynamic builds"
This reverts commit 2a0e76082be0f2aca82830bcaf91f6d737b842ac.
Diffstat (limited to 'src/third_party/SConscript')
-rw-r--r-- | src/third_party/SConscript | 91 |
1 files changed, 67 insertions, 24 deletions
diff --git a/src/third_party/SConscript b/src/third_party/SConscript index b24ebb1f505..0c2674ff356 100644 --- a/src/third_party/SConscript +++ b/src/third_party/SConscript @@ -1,8 +1,12 @@ # -*- mode: python -*- +import SCons + +from site_scons.mongo import insort_wrapper import json Import("env use_system_version_of_library usemozjs get_option") +Import("get_option") Import("use_libunwind") Import("use_system_libunwind") Import("use_vendored_libunwind") @@ -81,6 +85,59 @@ def injectMozJS(thisEnv): env.AddMethod(injectMozJS, 'InjectMozJS'); +def add_shim_allocator_hack(target, source, env): + + # If we allowed conftests to become dependent, any TryLink + # that happened after we made the below modifications would + # cause the configure steps to try to compile tcmalloc and any + # of its dependencies. Oops! + if any('conftest' in str(t) for t in target): + return target, source + + # It is possible that 'env' isn't a unique + # OverrideEnvironment, since if you didn't pass any kw args + # into your builder call, you just reuse the env you were + # called with. That could mean that we see the same + # environment here multiple times. But that is really OK, + # since the operation we are performing would be performed on + # all of them anyway. The flag serves as a way to disable the + # auto-injection for the handful of libraries where we must do + # so to avoid forming a cycle. + if not env.get('DISABLE_ALLOCATOR_SHIM_INJECTION', False): + lds = env.get('LIBDEPS', []) + shim_allocator = '$BUILD_DIR/third_party/shim_allocator' + if shim_allocator not in lds: + insort_wrapper(lds, shim_allocator) + env['LIBDEPS'] = lds + + return target, source + + +if get_option("build-tools") == "stable": + for builder_name in ('Program', 'SharedLibrary', 'LoadableModule', 'StaticLibrary'): + builder = env['BUILDERS'][builder_name] + base_emitter = builder.emitter + builder.emitter = SCons.Builder.ListEmitter([add_shim_allocator_hack, base_emitter]) + + +def shim_library(env, name, needs_link=False, *args, **kwargs): + nodes = env.Library( + target=f"shim_{name}" if name else name, + source=[ + f"shim_{name}.cpp" if name else name, + ], + *args, + **kwargs + ) + + for n in nodes: + setattr(n.attributes, "needs_link", needs_link) + + return nodes + +env.AddMethod(shim_library, 'ShimLibrary') + + if not use_system_version_of_library('tcmalloc'): # GPerftools does this slightly differently than the others. thirdPartyEnvironmentModifications['gperftools'] = {} @@ -233,8 +290,8 @@ if use_libunwind: LIBDEPS_GLOBAL=[ dep for dep in env.get('LIBDEPS_GLOBAL', []) - if dep and not dep.endswith('shim_allocator') - ], + if not dep.endswith('shim_allocator') + ] ) if use_system_libunwind: unwindEnv = unwindEnv.Clone( @@ -390,9 +447,7 @@ else: 'zlib' + zlibSuffix + '/zlib', ]) -zlibEnv.ShimLibrary( - name="zlib", -) +zlibEnv.ShimLibrary(name="zlib") zstdEnv = env.Clone() if use_system_version_of_library("zstd"): @@ -409,9 +464,7 @@ else: 'zstandard' + zstdSuffix + '/zstd', ]) -zstdEnv.ShimLibrary( - name="zstd", -) +zstdEnv.ShimLibrary(name="zstd") benchmarkEnv = env.Clone() if use_system_version_of_library("google-benchmark"): @@ -451,16 +504,14 @@ if "tom" in env["MONGO_CRYPTO"]: 'tomcrypt' + tomcryptSuffix + '/tomcrypt', ]) - tomcryptEnv.ShimLibrary( - name="tomcrypt", - ) + tomcryptEnv.ShimLibrary(name="tomcrypt") gperftoolsEnv = env.Clone( LIBDEPS_GLOBAL=[ dep for dep in env.get('LIBDEPS_GLOBAL', []) - if dep and not dep.endswith('shim_allocator') + if not dep.endswith('shim_allocator') ], ) if gperftoolsEnv['MONGO_ALLOCATOR'] in ["tcmalloc", "tcmalloc-experimental"]: @@ -547,9 +598,7 @@ timelibEnv = timelibEnv.Clone( 'timelib' + timelibSuffix + '/timelib', ]) -timelibEnv.ShimLibrary( - name='timelib', -) +timelibEnv.ShimLibrary(name='timelib') wiredtigerEnv = env.Clone() if wiredtiger: @@ -601,9 +650,7 @@ else: 'IntelRDFPMathLib20U1/intel_decimal128', ]) -intelDecimal128Env.ShimLibrary( - name="intel_decimal128", -) +intelDecimal128Env.ShimLibrary(name="intel_decimal128") icuEnv = env.Clone() if use_system_version_of_library("icu"): @@ -622,9 +669,7 @@ else: 'icu4c' + icuSuffix + '/source/icu_i18n', ]) -icuEnv.ShimLibrary( - name="icu", -) +icuEnv.ShimLibrary(name="icu") kmsEnv = env.Clone() if get_option('ssl') == 'on': @@ -642,7 +687,5 @@ if get_option('ssl') == 'on': 'kms-message/kms-message', ]) - kmsEnv.ShimLibrary( - name="kms_message", - ) + kmsEnv.ShimLibrary(name="kms_message") |