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
16 changes: 5 additions & 11 deletions llvm/cmake/modules/AddLLVM.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -51,19 +51,13 @@ 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 "")
# TODO: GTEST_HAS_RTTI should be determined automatically, evaluate whether
# the explicit definition is actually required.
list(APPEND LLVM_COMPILE_DEFINITIONS GTEST_HAS_RTTI=0)
if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
list(APPEND LLVM_COMPILE_CXXFLAGS "-fno-rtti")
elseif (MSVC)
list(APPEND LLVM_COMPILE_CXXFLAGS "/GR-")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL")
list(APPEND LLVM_COMPILE_CXXFLAGS "-qnortti")
endif ()
elseif(MSVC)
list(APPEND LLVM_COMPILE_CXXFLAGS "/GR")
list(APPEND LLVM_COMPILE_CXXFLAGS ${LLVM_CXXFLAGS_RTTI_DISABLE})
else()
list(APPEND LLVM_COMPILE_CXXFLAGS ${LLVM_CXXFLAGS_RTTI_ENABLE})
endif()

target_compile_options(${name} PRIVATE ${LLVM_COMPILE_FLAGS} $<$<COMPILE_LANGUAGE:CXX>:${LLVM_COMPILE_CXXFLAGS}>)
Expand Down
15 changes: 12 additions & 3 deletions llvm/cmake/modules/HandleLLVMOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -1162,13 +1162,22 @@ elseif(MSVC)
endif()
endif()

if(MSVC)
# llvm_update_compile_flags adds one of these to each target.
set(LLVM_CXXFLAGS_RTTI_DISABLE "")
set(LLVM_CXXFLAGS_RTTI_ENABLE "")
if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
set(LLVM_CXXFLAGS_RTTI_DISABLE "-fno-rtti")
elseif(MSVC)
# Remove flags here, for exceptions and RTTI.
# Each target property or source property should be responsible to control
# them.
# CL.EXE complains to override flags like "/GR /GR-".
string(REGEX REPLACE "(^| ) */EH[-cs]+ *( |$)" "\\1 \\2" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REGEX REPLACE "(^| ) */GR-? *( |$)" "\\1 \\2" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REGEX REPLACE "(^| ) */EH[-cs]+ *( |$)" "\\1 \\2" CMAKE_CXXFLAGS "${CMAKE_CXX_FLAGS}")
string(REGEX REPLACE "(^| ) */GR-? *( |$)" "\\1 \\2" CMAKE_CXXFLAGS "${CMAKE_CXX_FLAGS}")
set(LLVM_CXXFLAGS_RTTI_DISABLE "/GR-")
set(LLVM_CXXFLAGS_RTTI_ENABLE "/GR")
elseif(CMAKE_CXXCOMPILER_ID MATCHES "XL")
set(LLVM_CXXFLAGS_RTTI_DISABLE "-qnortti")
endif()

# Provide public options to globally control RTTI and EH
Expand Down
12 changes: 7 additions & 5 deletions llvm/tools/llvm-config/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,6 @@ endforeach()

string(REPLACE ";" " " SYSTEM_LIBS "${SYSTEM_LIBS}")

# Fetch target specific compile options, e.g. RTTI option
get_property(COMPILE_FLAGS TARGET llvm-config PROPERTY COMPILE_FLAGS)

# NOTE: We don't want to start extracting any random C/CXX flags that the
# user may add that could affect the ABI. We only want to extract flags
# that have been added by the LLVM build system.
Expand All @@ -61,9 +58,14 @@ set(LLVM_CPPFLAGS "${LLVM_DEFINITIONS}")
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} ${COMPILE_FLAGS} ${LLVM_DEFINITIONS}")
set(LLVM_CXXFLAGS "${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ${LLVM_CXX_STDLIB_FLAG} ${LLVM_DEFINITIONS}")
if(LLVM_ENABLE_RTTI)
append(${LLVM_CXXFLAGS_RTTI_ENABLE} LLVM_CXXFLAGS)
else()
append(${LLVM_CXXFLAGS_RTTI_DISABLE} LLVM_CXXFLAGS)
endif()
set(LLVM_BUILD_SYSTEM cmake)
set(LLVM_HAS_RTTI ${LLVM_CONFIG_HAS_RTTI})
set(LLVM_HAS_RTTI ${LLVM_ENABLE_RTTI})
set(LLVM_DYLIB_VERSION "${LLVM_VERSION_MAJOR}${LLVM_VERSION_SUFFIX}")
set(LLVM_SHARED_LIBRARY_PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}")

Expand Down