Added option to pass CPU features (e.g. vector extensions) to the compiler (GCC/Clang only for now).
This commit is contained in:
parent
202331ba60
commit
75c626c235
23
SConscript
23
SConscript
@ -18,6 +18,20 @@ import uuid
|
|||||||
|
|
||||||
from SCons.Node import Node
|
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):
|
class TargetType(enum.Enum):
|
||||||
PROGRAM = 0
|
PROGRAM = 0
|
||||||
STATIC_LIBRARY = 1
|
STATIC_LIBRARY = 1
|
||||||
@ -918,7 +932,6 @@ if not config.get('CXX_STANDARD'):
|
|||||||
config['CXX_STANDARD'] = 'c++23'
|
config['CXX_STANDARD'] = 'c++23'
|
||||||
if not config.get('CXX_NO_EXCEPTIONS'):
|
if not config.get('CXX_NO_EXCEPTIONS'):
|
||||||
config['CXX_NO_EXCEPTIONS'] = False
|
config['CXX_NO_EXCEPTIONS'] = False
|
||||||
|
|
||||||
if not config.get('PREPROCESSOR_PREFIX'):
|
if not config.get('PREPROCESSOR_PREFIX'):
|
||||||
config['PREPROCESSOR_PREFIX'] = config['PROJECT_NAME'].upper() # TODO: may be nicer?
|
config['PREPROCESSOR_PREFIX'] = config['PROJECT_NAME'].upper() # TODO: may be nicer?
|
||||||
|
|
||||||
@ -1144,6 +1157,7 @@ env['SPP_TARGET_DEPENDENCIES'] = []
|
|||||||
env['SPP_DEPENDENCIES'] = {}
|
env['SPP_DEPENDENCIES'] = {}
|
||||||
env['SPP_RECIPES'] = {}
|
env['SPP_RECIPES'] = {}
|
||||||
env['SPP_MODULES'] = {} # maps from folder to _Module
|
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']}"
|
env['OBJSUFFIX'] = f".{env['BUILD_TYPE']}{env['OBJSUFFIX']}"
|
||||||
if variant:
|
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_CXXFLAGS = ['-fsanitize=address', '-fno-omit-frame-pointer'])
|
||||||
env.Append(DEPS_LINKFLAGS = ['-fsanitize=address'])
|
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':
|
elif env['COMPILER_FAMILY'] == 'cl':
|
||||||
cxx_version_name = {
|
cxx_version_name = {
|
||||||
'c++14': 'c++14',
|
'c++14': 'c++14',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user