Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 21 additions & 15 deletions llvm/cmake/modules/AddLLVM.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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 "")

Expand All @@ -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
Expand Down
5 changes: 5 additions & 0 deletions llvm/tools/llvm-config/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Loading