Skip to content

Commit

Permalink
Added LLVM_ENABLE_RTTI and LLVM_ENABLE_EH options that allow RTTI and EH
Browse files Browse the repository at this point in the history
to globally be controlled. Individual targets (e.g.  ExceptionDemo) can
still override this by using LLVM_REQUIRE_RTTI and LLVM_REQUIRE_EH if
they need to be compiled with RTTI or exception handling respectively.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213663 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
delcypher committed Jul 22, 2014
1 parent 578c74e commit 976824a
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 3 deletions.
13 changes: 10 additions & 3 deletions cmake/modules/AddLLVM.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,13 @@ function(llvm_update_compile_flags name)
set(update_src_props ON)
endif()

if(LLVM_REQUIRES_EH)
set(LLVM_REQUIRES_RTTI ON)
# LLVM_REQUIRES_EH is an internal flag that individual
# targets can use to force EH
if(LLVM_REQUIRES_EH OR LLVM_ENABLE_EH)
if(NOT (LLVM_REQUIRES_RTTI OR LLVM_ENABLE_RTTI))
message(AUTHOR_WARNING "Exception handling requires RTTI. Enabling RTTI for ${name}")
set(LLVM_REQUIRES_RTTI ON)
endif()
else()
if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
list(APPEND LLVM_COMPILE_FLAGS "-fno-exceptions")
Expand All @@ -19,7 +24,9 @@ function(llvm_update_compile_flags name)
endif()
endif()

if(NOT LLVM_REQUIRES_RTTI)
# LLVM_REQUIRES_RTTI is an internal flag that individual
# targets can use to force RTTI
if(NOT (LLVM_REQUIRES_RTTI OR LLVM_ENABLE_RTTI))
list(APPEND LLVM_COMPILE_DEFINITIONS GTEST_HAS_RTTI=0)
if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
list(APPEND LLVM_COMPILE_FLAGS "-fno-rtti")
Expand Down
7 changes: 7 additions & 0 deletions cmake/modules/HandleLLVMOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,13 @@ if(MSVC)
string(REGEX REPLACE "(^| ) */GR-? *( |$)" "\\1 \\2" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
endif()

# Provide public options to globally control RTTI and EH
option(LLVM_ENABLE_EH "Enable Exception handling" OFF)
option(LLVM_ENABLE_RTTI "Enable run time type information" OFF)
if(LLVM_ENABLE_EH AND NOT LLVM_ENABLE_RTTI)
message(FATAL_ERROR "Exception handling requires RTTI. You must set LLVM_ENABLE_RTTI to ON")
endif()

# Plugin support
# FIXME: Make this configurable.
if(WIN32 OR CYGWIN)
Expand Down
8 changes: 8 additions & 0 deletions docs/CMake.rst
Original file line number Diff line number Diff line change
Expand Up @@ -218,10 +218,18 @@ LLVM-specific variables
Enables code assertions. Defaults to OFF if and only if ``CMAKE_BUILD_TYPE``
is *Release*.

**LLVM_ENABLE_EH**:BOOL
Build LLVM with exception handling support. This is necessary if you wish to
link against LLVM libraries and make use of C++ exceptions in your own code
that need to propagate through LLVM code. Defaults to OFF.

**LLVM_ENABLE_PIC**:BOOL
Add the ``-fPIC`` flag for the compiler command-line, if the compiler supports
this flag. Some systems, like Windows, do not need this flag. Defaults to ON.

**LLVM_ENABLE_RTTI**:BOOL
Build LLVM with run time type information. Defaults to OFF.

**LLVM_ENABLE_WARNINGS**:BOOL
Enable all compiler warnings. Defaults to ON.

Expand Down
2 changes: 2 additions & 0 deletions examples/ExceptionDemo/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ set(LLVM_LINK_COMPONENTS
nativecodegen
)

# Enable EH and RTTI for this demo
set(LLVM_REQUIRES_EH 1)
set(LLVM_REQUIRES_RTTI 1)

add_llvm_example(ExceptionDemo
ExceptionDemo.cpp
Expand Down

0 comments on commit 976824a

Please sign in to comment.