SCons: Disable C++ exception handling by default
Counterpart to https://github.com/godotengine/godot/pull/80612.pull/1216/head
parent
0a6a19e33b
commit
bf1c03ab5f
|
@ -72,21 +72,22 @@ endif()
|
||||||
# Input from user for GDExtension interface header and the API JSON file
|
# Input from user for GDExtension interface header and the API JSON file
|
||||||
set(GODOT_GDEXTENSION_DIR "gdextension" CACHE STRING "")
|
set(GODOT_GDEXTENSION_DIR "gdextension" CACHE STRING "")
|
||||||
set(GODOT_CUSTOM_API_FILE "" CACHE STRING "")
|
set(GODOT_CUSTOM_API_FILE "" CACHE STRING "")
|
||||||
set(FLOAT_PRECISION "single" CACHE STRING "")
|
|
||||||
if ("${FLOAT_PRECISION}" STREQUAL "double")
|
|
||||||
add_definitions(-DREAL_T_IS_DOUBLE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(GODOT_GDEXTENSION_API_FILE "${GODOT_GDEXTENSION_DIR}/extension_api.json")
|
set(GODOT_GDEXTENSION_API_FILE "${GODOT_GDEXTENSION_DIR}/extension_api.json")
|
||||||
if (NOT "${GODOT_CUSTOM_API_FILE}" STREQUAL "") # User-defined override.
|
if (NOT "${GODOT_CUSTOM_API_FILE}" STREQUAL "") # User-defined override.
|
||||||
set(GODOT_GDEXTENSION_API_FILE "${GODOT_CUSTOM_API_FILE}")
|
set(GODOT_GDEXTENSION_API_FILE "${GODOT_CUSTOM_API_FILE}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(FLOAT_PRECISION "single" CACHE STRING "")
|
||||||
|
if ("${FLOAT_PRECISION}" STREQUAL "double")
|
||||||
|
add_definitions(-DREAL_T_IS_DOUBLE)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(GODOT_COMPILE_FLAGS )
|
set(GODOT_COMPILE_FLAGS )
|
||||||
|
|
||||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
# using Visual Studio C++
|
# using Visual Studio C++
|
||||||
set(GODOT_COMPILE_FLAGS "/EHsc /utf-8") # /GF /MP
|
set(GODOT_COMPILE_FLAGS "/utf-8") # /GF /MP
|
||||||
|
|
||||||
if(CMAKE_BUILD_TYPE MATCHES Debug)
|
if(CMAKE_BUILD_TYPE MATCHES Debug)
|
||||||
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /MDd") # /Od /RTC1 /Zi
|
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /MDd") # /Od /RTC1 /Zi
|
||||||
|
@ -107,6 +108,21 @@ else() # GCC/Clang
|
||||||
endif(CMAKE_BUILD_TYPE MATCHES Debug)
|
endif(CMAKE_BUILD_TYPE MATCHES Debug)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Disable exception handling. Godot doesn't use exceptions anywhere, and this
|
||||||
|
# saves around 20% of binary size and very significant build time (GH-80513).
|
||||||
|
option(GODOT_DISABLE_EXCEPTIONS ON "Force disabling exception handling code")
|
||||||
|
if (GODOT_DISABLE_EXCEPTIONS)
|
||||||
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -D_HAS_EXCEPTIONS=0")
|
||||||
|
else()
|
||||||
|
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -fno-exceptions")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /EHsc")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# Generate source from the bindings file
|
# Generate source from the bindings file
|
||||||
find_package(Python3 3.4 REQUIRED) # pathlib should be present
|
find_package(Python3 3.4 REQUIRED) # pathlib should be present
|
||||||
if(GENERATE_TEMPLATE_GET_NODE)
|
if(GENERATE_TEMPLATE_GET_NODE)
|
||||||
|
|
|
@ -36,7 +36,7 @@ set(GODOT_LINKER_FLAGS )
|
||||||
|
|
||||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
# using Visual Studio C++
|
# using Visual Studio C++
|
||||||
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /EHsc /WX") # /GF /MP
|
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /WX") # /GF /MP
|
||||||
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /DTYPED_METHOD_BIND")
|
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /DTYPED_METHOD_BIND")
|
||||||
|
|
||||||
if(CMAKE_BUILD_TYPE MATCHES Debug)
|
if(CMAKE_BUILD_TYPE MATCHES Debug)
|
||||||
|
@ -92,6 +92,21 @@ else()
|
||||||
endif(CMAKE_BUILD_TYPE MATCHES Debug)
|
endif(CMAKE_BUILD_TYPE MATCHES Debug)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Disable exception handling. Godot doesn't use exceptions anywhere, and this
|
||||||
|
# saves around 20% of binary size and very significant build time (GH-80513).
|
||||||
|
option(GODOT_DISABLE_EXCEPTIONS ON "Force disabling exception handling code")
|
||||||
|
if (GODOT_DISABLE_EXCEPTIONS)
|
||||||
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -D_HAS_EXCEPTIONS=0")
|
||||||
|
else()
|
||||||
|
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -fno-exceptions")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /EHsc")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# Get Sources
|
# Get Sources
|
||||||
file(GLOB_RECURSE SOURCES src/*.c**)
|
file(GLOB_RECURSE SOURCES src/*.c**)
|
||||||
file(GLOB_RECURSE HEADERS include/*.h**)
|
file(GLOB_RECURSE HEADERS include/*.h**)
|
||||||
|
|
|
@ -183,6 +183,12 @@ def options(opts, env):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
opts.Add(
|
||||||
|
BoolVariable(
|
||||||
|
"disable_exceptions", "Force disabling exception handling code", default=env.get("disable_exceptions", True)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
# Add platform options
|
# Add platform options
|
||||||
for pl in platforms:
|
for pl in platforms:
|
||||||
tool = Tool(pl, toolpath=["tools"])
|
tool = Tool(pl, toolpath=["tools"])
|
||||||
|
@ -242,6 +248,16 @@ def generate(env):
|
||||||
if env["use_hot_reload"]:
|
if env["use_hot_reload"]:
|
||||||
env.Append(CPPDEFINES=["HOT_RELOAD_ENABLED"])
|
env.Append(CPPDEFINES=["HOT_RELOAD_ENABLED"])
|
||||||
|
|
||||||
|
# Disable exception handling. Godot doesn't use exceptions anywhere, and this
|
||||||
|
# saves around 20% of binary size and very significant build time.
|
||||||
|
if env["disable_exceptions"]:
|
||||||
|
if env.get("is_msvc", False):
|
||||||
|
env.Append(CPPDEFINES=[("_HAS_EXCEPTIONS", 0)])
|
||||||
|
else:
|
||||||
|
env.Append(CXXFLAGS=["-fno-exceptions"])
|
||||||
|
elif env.get("is_msvc", False):
|
||||||
|
env.Append(CXXFLAGS=["/EHsc"])
|
||||||
|
|
||||||
tool = Tool(env["platform"], toolpath=["tools"])
|
tool = Tool(env["platform"], toolpath=["tools"])
|
||||||
|
|
||||||
if tool is None or not tool.exists(env):
|
if tool is None or not tool.exists(env):
|
||||||
|
|
|
@ -31,7 +31,7 @@ def generate(env):
|
||||||
env.Tool("mslink")
|
env.Tool("mslink")
|
||||||
|
|
||||||
env.Append(CPPDEFINES=["TYPED_METHOD_BIND", "NOMINMAX"])
|
env.Append(CPPDEFINES=["TYPED_METHOD_BIND", "NOMINMAX"])
|
||||||
env.Append(CCFLAGS=["/EHsc", "/utf-8"])
|
env.Append(CCFLAGS=["/utf-8"])
|
||||||
env.Append(LINKFLAGS=["/WX"])
|
env.Append(LINKFLAGS=["/WX"])
|
||||||
|
|
||||||
if env["use_clang_cl"]:
|
if env["use_clang_cl"]:
|
||||||
|
|
Loading…
Reference in New Issue