diff options
author | Andrew Morrow <acm@mongodb.com> | 2017-04-05 18:10:19 -0400 |
---|---|---|
committer | Andrew Morrow <acm@mongodb.com> | 2017-04-06 14:31:32 -0400 |
commit | 7237623f2d067161b03d9489d052a33a5b2e059f (patch) | |
tree | 185ef009c29928ec937c6f1e881692ff74206301 /site_scons/mongo | |
parent | 865b400e4a74c3acb529d7bbba9d782e9db9fb11 (diff) | |
download | mongo-7237623f2d067161b03d9489d052a33a5b2e059f.tar.gz |
SERVER-28583 Split up mongo_scons_utils.py into site_scons/mongo
Diffstat (limited to 'site_scons/mongo')
-rw-r--r-- | site_scons/mongo/generators.py | 68 | ||||
-rw-r--r-- | site_scons/mongo/toolchain.py | 41 |
2 files changed, 109 insertions, 0 deletions
diff --git a/site_scons/mongo/generators.py b/site_scons/mongo/generators.py new file mode 100644 index 00000000000..c07e86a4d14 --- /dev/null +++ b/site_scons/mongo/generators.py @@ -0,0 +1,68 @@ +# -*- mode: python; -*- + +import md5 + +# Default and alternative generator definitions go here. + +# This is the tuple that will be returned by the buildInfo command and +# printed by the --version command-line option to mongod. +# Each tuple consists of: +# key (string) +# value (string) +# should be included in buildInfo output (bool) +# should be included in --version output (bool) +# The values will be passed through env.subst, so you can use any SCons variables you +# want to define them. +def default_buildinfo_environment_data(): + return ( + ('distmod', '$MONGO_DISTMOD', True, True,), + ('distarch', '$MONGO_DISTARCH', True, True,), + ('cc', '$CC_VERSION', True, False,), + ('ccflags', '$CCFLAGS', True, False,), + ('cxx', '$CXX_VERSION', True, False,), + ('cxxflags', '$CXXFLAGS', True, False,), + ('linkflags', '$LINKFLAGS', True, False,), + ('target_arch', '$TARGET_ARCH', True, True,), + ('target_os', '$TARGET_OS', True, False,), + ) + +# If you want buildInfo and --version to be relatively empty, set +# MONGO_BUILDINFO_ENVIRONMENT_DATA = empty_buildinfo_environment_data() +def empty_buildinfo_environment_data(): + return () + +def default_variant_dir_generator(target, source, env, for_signature): + + if env.GetOption('cache') != None: + return 'cached' + + # If an option should affect the variant directory, name it here. + variant_options = [ + 'opt', + 'dbg', + ] + + # Hash the named options and their values, and take the first 8 characters of the hash as + # the variant name + hasher = md5.md5() + for option in variant_options: + hasher.update(option) + hasher.update(str(env.GetOption(option))) + variant_dir = hasher.hexdigest()[0:8] + + # If our option hash yields a well known hash, replace it with its name. + known_variant_hashes = { + '343e6678' : 'debug', + '85fcf9b0' : 'opt', + '981ce870' : 'debug', + '9fface73' : 'optdebug', + 'c52b1cc3' : 'opt', + } + + return known_variant_hashes.get(variant_dir, variant_dir) + + +def os_specific_variant_dir_generator(target, source, env, for_signature): + return '-'.join([ + env['TARGET_OS'], + default_variant_dir_generator(target, source, env, for_signature)]) diff --git a/site_scons/mongo/toolchain.py b/site_scons/mongo/toolchain.py new file mode 100644 index 00000000000..ffa74f56f6f --- /dev/null +++ b/site_scons/mongo/toolchain.py @@ -0,0 +1,41 @@ +# -*- mode: python; -*- + +import subprocess + +import SCons + +# Helper functions for generic toolchain things go here + +def get_toolchain_ver(env, tool): + # By default we don't know the version of each tool, and only report what + # command gets executed (gcc vs /opt/mongodbtoolchain/bin/gcc). + verstr = "version unknown" + proc = None + if env.ToolchainIs('clang', 'gcc'): + proc = SCons.Action._subproc(env, + env.subst("${%s} --version" % tool), + stdout=subprocess.PIPE, + stderr='devnull', + stdin='devnull', + universal_newlines=True, + error='raise', + shell=True) + verstr = proc.stdout.readline() + + elif env.ToolchainIs('msvc') and env.TargetOSIs('windows'): + proc = SCons.Action._subproc(env, + env.subst("${%s}" % tool), + stdout='devnull', + stderr=subprocess.PIPE, + stdin='devnull', + universal_newlines=True, + error='raise', + shell=True) + verstr = proc.stderr.readline() + + # If we started a process, we should drain its stdout/stderr and wait for + # it to end. + if proc: + proc.communicate() + + return env.subst('${%s}: %s' % (tool, verstr)) |