diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 1fefc2610afc1..d938214f9d0df 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -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 diff --git a/llvm/tools/llvm-config/CMakeLists.txt b/llvm/tools/llvm-config/CMakeLists.txt index bf9a012ef5302..fc285b2ba156a 100644 --- a/llvm/tools/llvm-config/CMakeLists.txt +++ b/llvm/tools/llvm-config/CMakeLists.txt @@ -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()