Added option to pass CPU features (e.g. vector extensions) to the compiler (GCC/Clang only for now).

This commit is contained in:
Patrick 2025-07-12 12:51:14 +02:00
parent 202331ba60
commit 75c626c235

View File

@ -18,6 +18,20 @@ import uuid
from SCons.Node import Node
_GCC_CPU_FEATURES_MAP = {
'mmx': '-mmmx',
'sse': '-msse',
'sse2': '-msse2',
'sse3': '-msse3',
'ssse3': '-mssse3',
'sse4': '-msse4',
'sse4a': '-msse4a',
'sse4.1': '-msse4.1',
'sse4.2': '-msse4.2',
'avx': '-mavx',
'avx2': '-mavx2'
}
class TargetType(enum.Enum):
PROGRAM = 0
STATIC_LIBRARY = 1
@ -918,7 +932,6 @@ if not config.get('CXX_STANDARD'):
config['CXX_STANDARD'] = 'c++23'
if not config.get('CXX_NO_EXCEPTIONS'):
config['CXX_NO_EXCEPTIONS'] = False
if not config.get('PREPROCESSOR_PREFIX'):
config['PREPROCESSOR_PREFIX'] = config['PROJECT_NAME'].upper() # TODO: may be nicer?
@ -1144,6 +1157,7 @@ env['SPP_TARGET_DEPENDENCIES'] = []
env['SPP_DEPENDENCIES'] = {}
env['SPP_RECIPES'] = {}
env['SPP_MODULES'] = {} # maps from folder to _Module
env['SPP_CPU_FEATURES'] = config.get('USE_CPU_FEATURES', [])
env['OBJSUFFIX'] = f".{env['BUILD_TYPE']}{env['OBJSUFFIX']}"
if variant:
@ -1246,6 +1260,13 @@ if env['COMPILER_FAMILY'] == 'gcc' or env['COMPILER_FAMILY'] == 'clang':
env.Append(DEPS_CXXFLAGS = ['-fsanitize=address', '-fno-omit-frame-pointer'])
env.Append(DEPS_LINKFLAGS = ['-fsanitize=address'])
for feature in env['SPP_CPU_FEATURES']:
flag = _GCC_CPU_FEATURES_MAP.get(feature)
if flag is None:
_warn(None, f'Unknown or unsupported cpu feature "{feature}" for GCC/Clang.')
else:
env.Append(CCFLAGS = [flag])
elif env['COMPILER_FAMILY'] == 'cl':
cxx_version_name = {
'c++14': 'c++14',