Added LLVM_ENABLE_RTTI and LLVM_ENABLE_EH options that allow RTTI and EH
authorDan Liew <dan@su-root.co.uk>
Tue, 22 Jul 2014 15:41:18 +0000 (15:41 +0000)
committerDan Liew <dan@su-root.co.uk>
Tue, 22 Jul 2014 15:41:18 +0000 (15:41 +0000)
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

cmake/modules/AddLLVM.cmake
cmake/modules/HandleLLVMOptions.cmake
docs/CMake.rst
examples/ExceptionDemo/CMakeLists.txt

index 81efae62e79ec3569f096184996dde3daadd47c4..409a5d61e65be6e8b6514d1f07a2834af5e61206 100644 (file)
@@ -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")
@@ -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")
index 27a126c8cb3649fc9f4d2e2d714f12be5b59178a..8258512c42a0c3b6f4266b2cdf6dc4d11386bdfb 100644 (file)
@@ -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)
index bfc9cb94844c68e7f49e9860d7ec615e711f366e..2c83238753890c5317b38ecaee6646390d9427db 100644 (file)
@@ -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.
 
index 5324acd21eabd4a0668679db8d67399327beab0e..a08a7c30bd8afd4eb6e7f3f5a0241f3e67098f87 100644 (file)
@@ -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