From 42dada23c966b806b394dd9f7dab3152665bad79 Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Sun, 2 Mar 2025 16:00:12 +0100 Subject: [PATCH] Added CXX_NO_EXCEPTIONS config to disable exceptions. --- SConscript | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/SConscript b/SConscript index 7e5123c..975254e 100644 --- a/SConscript +++ b/SConscript @@ -632,6 +632,8 @@ if not config.get('PROJECT_NAME'): config['PROJECT_NAME'] = 'PROJECT' 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? @@ -781,6 +783,7 @@ env['DOWNLOAD_DIR'] = os.path.join(env['SYSTEM_CACHE_DIR'], 'downloaded') env['UPDATE_REPOSITORIES'] = update_repositories env['CXX_STANDARD'] = config['CXX_STANDARD'] # make it available to everyone +env['CXX_NO_EXCEPTIONS'] = config['CXX_NO_EXCEPTIONS'] env['DEPS_CFLAGS'] = [] env['DEPS_CXXFLAGS'] = [] env['DEPS_LINKFLAGS'] = [] @@ -878,6 +881,8 @@ elif unity_mode == 'stress': # compile everything in one single file to stress t if env['COMPILER_FAMILY'] == 'gcc' or env['COMPILER_FAMILY'] == 'clang': env.Append(CCFLAGS = ['-Wall', '-Wextra', '-Werror', '-Wstrict-aliasing', '-pedantic']) env.Append(CXXFLAGS = [f'-std={config["CXX_STANDARD"]}']) + if env['CXX_NO_EXCEPTIONS']: + env.Append(CXXFLAGS = [f'-fno-exceptions']) if build_type != 'release': env.Append(LINKFLAGS = [f'-Wl,-rpath,{env["LIB_DIR"]}']) env['LINKCOM'] = env['LINKCOM'].replace('$_LIBFLAGS', '-Wl,--start-group $_LIBFLAGS -Wl,--end-group') @@ -924,15 +929,19 @@ elif env['COMPILER_FAMILY'] == 'cl': 'c++23': 'c++latest', 'c++26': 'c++latest' }.get(env['CXX_STANDARD'], 'c++14') # default to C++14 for older versions + if env['CXX_NO_EXCEPTIONS']: + exception_option = '' + else: + exception_option = '/EHsc' # C4201: nonstandard extension used : nameless struct/union - I use it and want to continue using it # C4127: conditional expression is constant - some libs (CRC, format) don't compile with this enabled # TODO: fix? # C4702: unreachable code, issued after MIJIN_FATAL macro # C4251: missing dll-interface of some std types, yaml-cpp doesn't compile with this enabled # C4275: same as above env.Append(CCFLAGS = ['/W4', '/WX', '/wd4201', '/wd4127', '/wd4702', '/wd4251', '/wd4275', '/bigobj', '/vmg', - f'/std:{cxx_version_name}', '/permissive-', '/EHsc', '/FS', '/Zc:char8_t', '/utf-8']) + f'/std:{cxx_version_name}', '/permissive-', exception_option, '/FS', '/Zc:char8_t', '/utf-8']) env.Append(CPPDEFINES = ['_CRT_SECURE_NO_WARNINGS']) # I'd like to not use MSVC specific versions of functions because they are "safer" ... - env.Append(DEPS_CXXFLAGS = ['/EHsc', '/Zc:char8_t', '/utf-8', '/vmg']) + env.Append(DEPS_CXXFLAGS = [exception_option, '/Zc:char8_t', '/utf-8', '/vmg']) if env['SHOW_INCLUDES']: env.Append(CCFLAGS = ['/showIncludes']) if build_type == 'debug':