From 7ba0c20d4c1bedf096f5b5e2927226056c101e11 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Wed, 4 Nov 2015 20:57:43 +0000 Subject: [PATCH] llvm-config: Add --has-rtti option Summary: This prints NO if LLVM was built with -fno-rtti or an equivalent flag and YES otherwise. The reasons to add -has-rtti rather than adding -fno-rtti to --cxxflags are: 1. Building LLVM with -fno-rtti does not always mean that client applications need this flag. 2. Some compilers have a different flag for disabling rtti, and the compiler being used to build LLVM may not be the compiler being used to build the application. Reviewers: echristo, chandlerc, beanz Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D11849 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252075 91177308-0d34-0410-b5e6-96231b3b80d8 --- cmake/modules/AddLLVM.cmake | 2 ++ tools/llvm-config/BuildVariables.inc.in | 1 + tools/llvm-config/CMakeLists.txt | 1 + tools/llvm-config/Makefile | 8 ++++++++ tools/llvm-config/llvm-config.cpp | 3 +++ 5 files changed, 15 insertions(+) diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index c3e1679bdb5..8d0cf7c5615 100644 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -26,7 +26,9 @@ function(llvm_update_compile_flags name) # LLVM_REQUIRES_RTTI is an internal flag that individual # targets can use to force RTTI + set(LLVM_CONFIG_HAS_RTTI YES CACHE INTERNAL "") if(NOT (LLVM_REQUIRES_RTTI OR LLVM_ENABLE_RTTI)) + set(LLVM_CONFIG_HAS_RTTI NO CACHE INTERNAL "") list(APPEND LLVM_COMPILE_DEFINITIONS GTEST_HAS_RTTI=0) if (LLVM_COMPILER_IS_GCC_COMPATIBLE) list(APPEND LLVM_COMPILE_FLAGS "-fno-rtti") diff --git a/tools/llvm-config/BuildVariables.inc.in b/tools/llvm-config/BuildVariables.inc.in index 0f28fad3170..38465f60d07 100644 --- a/tools/llvm-config/BuildVariables.inc.in +++ b/tools/llvm-config/BuildVariables.inc.in @@ -27,3 +27,4 @@ #define LLVM_TARGETS_BUILT "@LLVM_TARGETS_BUILT@" #define LLVM_SYSTEM_LIBS "@LLVM_SYSTEM_LIBS@" #define LLVM_BUILD_SYSTEM "@LLVM_BUILD_SYSTEM@" +#define LLVM_HAS_RTTI "@LLVM_HAS_RTTI@" diff --git a/tools/llvm-config/CMakeLists.txt b/tools/llvm-config/CMakeLists.txt index dd534600e8f..d1f87064962 100644 --- a/tools/llvm-config/CMakeLists.txt +++ b/tools/llvm-config/CMakeLists.txt @@ -25,6 +25,7 @@ set(LLVM_CPPFLAGS "${CMAKE_CPP_FLAGS} ${CMAKE_CPP_FLAGS_${uppercase_CMAKE_BUILD_ set(LLVM_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") set(LLVM_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${COMPILE_FLAGS} ${LLVM_DEFINITIONS}") set(LLVM_BUILD_SYSTEM cmake) +set(LLVM_HAS_RTTI ${LLVM_CONFIG_HAS_RTTI}) # Use the C++ link flags, since they should be a superset of C link flags. set(LLVM_LDFLAGS "${CMAKE_CXX_LINK_FLAGS}") diff --git a/tools/llvm-config/Makefile b/tools/llvm-config/Makefile index c2b5e8f9b9e..03d910bb03f 100644 --- a/tools/llvm-config/Makefile +++ b/tools/llvm-config/Makefile @@ -38,6 +38,12 @@ else LLVM_SYSTEM_LIBS := $(LIBS) endif +ifneq ($(REQUIRES_RTTI), 1) + LLVM_HAS_RTTI := NO +else + LLVM_HAS_RTTI := YES +endif + # This is blank for now. We need to be careful about adding stuff here: # LDFLAGS tend not to be portable, and we don't currently require the # user to use libtool when linking against LLVM. @@ -67,6 +73,8 @@ $(ObjDir)/BuildVariables.inc: $(BUILDVARIABLES_SRCPATH) Makefile $(ObjDir)/.dir >> temp.sed $(Verb) $(ECHO) 's/@LLVM_BUILD_SYSTEM@/autoconf/' \ >> temp.sed + $(Verb) $(ECHO) 's/@LLVM_HAS_RTTI@/$(LLVM_HAS_RTTI)/' \ + >> temp.sed $(Verb) $(SED) -f temp.sed < $< > $@ $(Verb) $(RM) temp.sed diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp index 4ce8f1002ad..8bf2680d391 100644 --- a/tools/llvm-config/llvm-config.cpp +++ b/tools/llvm-config/llvm-config.cpp @@ -158,6 +158,7 @@ Options:\n\ --build-mode Print build mode of LLVM tree (e.g. Debug or Release).\n\ --assertion-mode Print assertion mode of LLVM tree (ON or OFF).\n\ --build-system Print the build system used to build LLVM (autoconf or cmake).\n\ + --has-rtti Print whether or not LLVM was built with rtti (YES or NO).\n\ Typical components:\n\ all All LLVM libraries (default).\n\ engine Either a native JIT or a bitcode interpreter.\n"; @@ -326,6 +327,8 @@ int main(int argc, char **argv) { #endif } else if (Arg == "--build-system") { OS << LLVM_BUILD_SYSTEM << '\n'; + } else if (Arg == "--has-rtti") { + OS << LLVM_HAS_RTTI << '\n'; } else if (Arg == "--obj-root") { OS << ActivePrefix << '\n'; } else if (Arg == "--src-root") { -- 2.34.1