diff options
author | Andrew Morrow <acm@mongodb.com> | 2021-02-21 12:18:45 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-02-24 23:10:12 +0000 |
commit | 6286ed49154196a02febfe584927bcdd2042f8da (patch) | |
tree | 4b939a982b9f7b6416a0eb6a3df9d941d94a9751 /SConstruct | |
parent | e9ecd4d9dbe54ff430664fff545f0d76a8b92c70 (diff) | |
download | mongo-6286ed49154196a02febfe584927bcdd2042f8da.tar.gz |
SERVER-54407 Set explicit default microarchitecture minima
Diffstat (limited to 'SConstruct')
-rw-r--r-- | SConstruct | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/SConstruct b/SConstruct index 72a50856a7d..533d10f310a 100644 --- a/SConstruct +++ b/SConstruct @@ -2461,20 +2461,38 @@ if get_option('ocsp-stapling') == 'on': # disable OCSP Stapling on Ubuntu 18.04 machines. See SERVER-51364 for more details. env.SetConfigHeaderDefine("MONGO_CONFIG_OCSP_STAPLING_ENABLED") -if env['TARGET_ARCH'] == 'i386': - # If we are using GCC or clang to target 32 bit, set the ISA minimum to 'nocona', - # and the tuning to 'generic'. The choice of 'nocona' is selected because it - # -- includes MMX extenions which we need for tcmalloc on 32-bit - # -- can target 32 bit - # -- is at the time of this writing a widely-deployed 10 year old microarchitecture - # -- is available as a target architecture from GCC 4.0+ - # However, we only want to select an ISA, not the nocona specific scheduling, so we - # select the generic tuning. For installations where hardware and system compiler rev are - # contemporaries, the generic scheduling should be appropriate for a wide range of - # deployed hardware. - - if env.ToolchainIs('GCC', 'clang'): - env.Append( CCFLAGS=['-march=nocona', '-mtune=generic'] ) + +if not env.TargetOSIs('windows') and (env.ToolchainIs('GCC', 'clang')): + + # By default, apply our current microarchitecture minima. If the + # user has customized a flag of the same name in any of CCFLAGS, + # CFLAGS, or CXXFLAGS, we disable applying our default to + # CCFLAGS. We are assuming the user knows what they are doing, + # e.g. we don't try to be smart and notice that they applied it to + # CXXFLAGS and therefore still apply it to CFLAGS since they + # didn't customize that. Basically, don't send those flags in + # unless you a) mean it, and b) know what you are doing, and c) + # cover all your bases by either setting it via CCFLAGS, or + # setting it for both C and C++ by setting both of CFLAGS and + # CXXFLAGS. + + arm_march_flag = "armv8-a" + if get_option('use-hardware-crc32') == "on": + arm_march_flag += "+crc" + + default_targeting_flags_for_architecture = { + "aarch64" : { "-march=" : arm_march_flag, "-mtune=" : "generic" }, + "i386" : { "-march=" : "nocona", "-mtune=" : "generic" }, + "ppc64le" : { "-mcpu=" : "power8", "-mtune=" : "power8", "-mcmodel=" : "medium" }, + "s390x" : { "-march=" : "z196", "-mtune=" : "zEC12" }, + } + + default_targeting_flags = default_targeting_flags_for_architecture.get(env['TARGET_ARCH']) + if default_targeting_flags: + search_variables = ['CCFLAGS', 'CFLAGS', 'CXXFLAGS'] + for targeting_flag, targeting_flag_value in default_targeting_flags.items(): + if not any(flag_value.startswith(targeting_flag) for search_variable in search_variables for flag_value in env[search_variable]): + env.Append(CCFLAGS=[f'{targeting_flag}{targeting_flag_value}']) # Needed for auth tests since key files are stored in git with mode 644. if not env.TargetOSIs('windows'): |