[cmake] Restore exception flags in llvm-config --cxxflags (#176195)
https://github.com/llvm/llvm-project/pull/173869 accidentally dropped rtti and eh flags from `llvm-config --cxxflags`. Then https://github.com/llvm/llvm-project/pull/174084 restored the rtti flags. The eh flags were not included with the rationale that they are not ABI relevant. This PR restores the eh flags as well. While they are not strictly necessary, I believe that code that directly interfaces with LLVM almost certainly does not want to build with exceptions if LLVM is not built with exceptions. Building in the peculiar `-fexceptions -fno-rtti` configuration is rarely useful and likely not intended. On MacOS, this is also relevant because it's not possible to use C++17 headers without `-fno-exceptions` when using older deployment targets. In that configuration, `-fno-exceptions` is required to interact with LLVM.
This commit is contained in:
parent
c30c2f4f3e
commit
9bbea753a4
@ -31,6 +31,24 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "XL")
|
||||
set(LLVM_CXXFLAGS_RTTI_DISABLE "-qnortti")
|
||||
endif()
|
||||
|
||||
# Determine required flags to enable/disable EH.
|
||||
set(LLVM_CXXFLAGS_EH_DISABLE "")
|
||||
set(LLVM_CXXFLAGS_EH_ENABLE "")
|
||||
if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
|
||||
set(LLVM_CXXFLAGS_EH_DISABLE "-fno-exceptions")
|
||||
if(LLVM_ENABLE_UNWIND_TABLES)
|
||||
list(APPEND LLVM_CXXFLAGS_EH_DISABLE "-funwind-tables")
|
||||
else()
|
||||
list(APPEND LLVM_CXXFLAGS_EH_DISABLE "-fno-unwind-tables")
|
||||
list(APPEND LLVM_CXXFLAGS_EH_DISABLE "-fno-asynchronous-unwind-tables")
|
||||
endif()
|
||||
elseif(MSVC)
|
||||
set(LLVM_CXXFLAGS_EH_ENABLE "/EHsc")
|
||||
set(LLVM_CXXFLAGS_EH_DISABLE "/EHs-c-")
|
||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL")
|
||||
set(LLVM_CXXFLAGS_EH_DISABLE "-qnoeh")
|
||||
endif()
|
||||
|
||||
function(llvm_update_compile_flags name)
|
||||
set(LLVM_COMPILE_CXXFLAGS "")
|
||||
|
||||
@ -41,24 +59,12 @@ function(llvm_update_compile_flags name)
|
||||
message(AUTHOR_WARNING "Exception handling requires RTTI. Enabling RTTI for ${name}")
|
||||
set(LLVM_REQUIRES_RTTI ON)
|
||||
endif()
|
||||
if(MSVC)
|
||||
list(APPEND LLVM_COMPILE_CXXFLAGS "/EHsc")
|
||||
endif()
|
||||
list(APPEND LLVM_COMPILE_CXXFLAGS ${LLVM_CXXFLAGS_EH_ENABLE})
|
||||
else()
|
||||
if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
|
||||
list(APPEND LLVM_COMPILE_CXXFLAGS "-fno-exceptions")
|
||||
if(LLVM_ENABLE_UNWIND_TABLES)
|
||||
list(APPEND LLVM_COMPILE_CXXFLAGS "-funwind-tables")
|
||||
else()
|
||||
list(APPEND LLVM_COMPILE_CXXFLAGS "-fno-unwind-tables")
|
||||
list(APPEND LLVM_COMPILE_CXXFLAGS "-fno-asynchronous-unwind-tables")
|
||||
endif()
|
||||
elseif(MSVC)
|
||||
if(MSVC)
|
||||
list(APPEND LLVM_COMPILE_DEFINITIONS _HAS_EXCEPTIONS=0)
|
||||
list(APPEND LLVM_COMPILE_CXXFLAGS "/EHs-c-")
|
||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL")
|
||||
list(APPEND LLVM_COMPILE_CXXFLAGS "-qnoeh")
|
||||
endif()
|
||||
list(APPEND LLVM_COMPILE_CXXFLAGS ${LLVM_CXXFLAGS_EH_DISABLE})
|
||||
endif()
|
||||
|
||||
# LLVM_REQUIRES_RTTI is an internal flag that individual
|
||||
|
||||
@ -59,6 +59,11 @@ set(LLVM_CFLAGS "${LLVM_C_STD_FLAG} ${LLVM_DEFINITIONS}")
|
||||
# The language standard potentially affects the ABI/API of LLVM, so we want
|
||||
# to make sure it is reported by llvm-config.
|
||||
set(LLVM_CXXFLAGS "${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ${LLVM_CXX_STDLIB_FLAG} ${LLVM_DEFINITIONS}")
|
||||
if(LLVM_ENABLE_EH)
|
||||
append(${LLVM_CXXFLAGS_EH_ENABLE} LLVM_CXXFLAGS)
|
||||
else()
|
||||
append(${LLVM_CXXFLAGS_EH_DISABLE} LLVM_CXXFLAGS)
|
||||
endif()
|
||||
if(LLVM_ENABLE_RTTI)
|
||||
append(${LLVM_CXXFLAGS_RTTI_ENABLE} LLVM_CXXFLAGS)
|
||||
else()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user