mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
1d8ca35eec
* Replaced all C++ exception related functions with wrappers if -fno-exception is used. This prevents linking of the corresponding code in libgcc. The code size will decrease by around 7-9 KB when building with -fno-exception. * added no except test app Closes https://github.com/espressif/esp-idf/pull/5380 Closes https://github.com/espressif/esp-idf/issues/5363 Closes https://github.com/espressif/esp-idf/issues/5224 Closes IDFGH-3153 Closes IDF-2577
62 lines
2.3 KiB
CMake
62 lines
2.3 KiB
CMake
idf_component_register(SRCS "cxx_exception_stubs.cpp"
|
|
"cxx_guards.cpp"
|
|
# Make sure that pthread is in component list
|
|
PRIV_REQUIRES pthread)
|
|
|
|
if(NOT CONFIG_CXX_EXCEPTIONS)
|
|
set(WRAP_FUNCTIONS
|
|
_Unwind_SetEnableExceptionFdeSorting
|
|
__register_frame_info_bases
|
|
__register_frame_info
|
|
__register_frame
|
|
__register_frame_info_table_bases
|
|
__register_frame_info_table
|
|
__register_frame_table
|
|
__deregister_frame_info_bases
|
|
__deregister_frame_info
|
|
_Unwind_Find_FDE
|
|
_Unwind_GetGR
|
|
_Unwind_GetCFA
|
|
_Unwind_GetIP
|
|
_Unwind_GetIPInfo
|
|
_Unwind_GetRegionStart
|
|
_Unwind_GetDataRelBase
|
|
_Unwind_GetTextRelBase
|
|
_Unwind_SetIP
|
|
_Unwind_SetGR
|
|
_Unwind_GetLanguageSpecificData
|
|
_Unwind_FindEnclosingFunction
|
|
_Unwind_Resume
|
|
_Unwind_RaiseException
|
|
_Unwind_DeleteException
|
|
_Unwind_ForcedUnwind
|
|
_Unwind_Resume_or_Rethrow
|
|
_Unwind_Backtrace
|
|
__cxa_call_unexpected
|
|
__gxx_personality_v0)
|
|
|
|
foreach(wrap ${WRAP_FUNCTIONS})
|
|
target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--wrap=${wrap}")
|
|
endforeach()
|
|
endif()
|
|
|
|
target_link_libraries(${COMPONENT_LIB} PUBLIC stdc++ gcc)
|
|
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u __cxa_guard_dummy")
|
|
|
|
# Force libpthread to appear later than libstdc++ in link line since libstdc++ depends on libpthread.
|
|
# Furthermore, force libcxx to appear later than libgcc because some libgcc unwind code is wrapped, if C++
|
|
# exceptions are disabled. libcxx (this component) provides the unwind code wrappers.
|
|
# This is to prevent linking of libgcc's unwind code which considerably increases the binary size.
|
|
idf_component_get_property(pthread pthread COMPONENT_LIB)
|
|
idf_component_get_property(cxx cxx COMPONENT_LIB)
|
|
add_library(stdcpp_pthread INTERFACE)
|
|
target_link_libraries(stdcpp_pthread INTERFACE stdc++ $<TARGET_FILE:${pthread}>)
|
|
target_link_libraries(${COMPONENT_LIB} PUBLIC stdcpp_pthread)
|
|
add_library(libgcc_cxx INTERFACE)
|
|
target_link_libraries(libgcc_cxx INTERFACE gcc $<TARGET_FILE:${cxx}>)
|
|
target_link_libraries(${COMPONENT_LIB} PUBLIC libgcc_cxx)
|
|
|
|
if(NOT CONFIG_COMPILER_CXX_EXCEPTIONS)
|
|
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u __cxx_fatal_exception")
|
|
endif()
|