[cfe-commits] [libcxx] r169036 - in /libcxx/trunk: CMakeLists.txt lib/CMakeLists.txt src/exception.cpp
Michael J. Spencer
bigcheesegs at gmail.com
Fri Nov 30 13:02:29 PST 2012
Author: mspencer
Date: Fri Nov 30 15:02:29 2012
New Revision: 169036
URL: http://llvm.org/viewvc/llvm-project?rev=169036&view=rev
Log:
[CMake] Add support for selecting which c++ abi library to use.
Modified:
libcxx/trunk/CMakeLists.txt
libcxx/trunk/lib/CMakeLists.txt
libcxx/trunk/src/exception.cpp
Modified: libcxx/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/CMakeLists.txt?rev=169036&r1=169035&r2=169036&view=diff
==============================================================================
--- libcxx/trunk/CMakeLists.txt (original)
+++ libcxx/trunk/CMakeLists.txt Fri Nov 30 15:02:29 2012
@@ -39,6 +39,11 @@
option(LIBCXX_ENABLE_CXX0X "Enable -std=c++0x and use of c++0x language features if the compiler supports it." ON)
option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON)
+set(CXXABIS none libcxxabi libcxxrt libsupc++)
+set(LIBCXX_CXX_ABI "${LIBCXX_CXX_ABI}" CACHE STRING
+ "Specify C++ ABI library to use." FORCE)
+set_property(CACHE LIBCXX_CXX_ABI PROPERTY STRINGS "";${CXXABIS})
+
#===============================================================================
# Configure System
#===============================================================================
@@ -58,6 +63,54 @@
)
set(LIBCXX_TARGET_TRIPLE ${LIBCXX_TARGET_TRIPLE} CACHE STRING "Target triple.")
+if (${LIBCXX_CXX_ABI} STREQUAL "libsupc++")
+ set(LIBCXX_LIBSUPCXX_INCLUDE_PATHS "" CACHE STRINGS
+ "Paths to libsupc++ include directories. Separate by system separator")
+ set(LIBCXX_CXX_ABI_LIBRARIES stdc++)
+ set(LIBCXX_LIBSUPCXX_FILES
+ cxxabi.h
+ bits/c++config.h
+ bits/os_defines.h
+ bits/cpu_defines.h
+ bits/cxxabi_tweaks.h
+ bits/cxxabi_forced.h
+ )
+ set(LIBCXX_LIBSUPCXX_FILE_PATHS)
+ foreach(path ${LIBCXX_LIBSUPCXX_FILES})
+ set(found FALSE)
+ foreach(incpath ${LIBCXX_LIBSUPCXX_INCLUDE_PATHS})
+ if (EXISTS "${incpath}/${path}")
+ set(found TRUE)
+ get_filename_component(dstdir ${path} PATH)
+ get_filename_component(file ${path} NAME)
+ add_custom_command(
+ OUTPUT "${CMAKE_BINARY_DIR}/include/${dstdir}/${file}"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${incpath}/${path}"
+ "${CMAKE_BINARY_DIR}/include/${dstdir}"
+ MAIN_DEPENDENCY "${incpath}/${path}"
+ )
+ list(APPEND LIBCXX_CXX_ABI_DEPS
+ "${CMAKE_BINARY_DIR}/include/${dstdir}/${file}")
+ endif()
+ endforeach()
+ if (NOT found)
+ message(FATAL_ERROR "Failed to find ${path}")
+ endif()
+ endforeach()
+ add_custom_target(supcxx_headers DEPENDS ${LIBCXX_CXX_ABI_DEPS})
+ set(LIBCXX_CXX_ABI_DEPS supcxx_headers)
+ include_directories("${CMAKE_BINARY_DIR}/include")
+ install(DIRECTORY "${CMAKE_BINARY_DIR}/include/"
+ DESTINATION include/c++/v1
+ FILES_MATCHING
+ PATTERN "*"
+ )
+elseif (${LIBCXX_CXX_ABI} NOT STREQUAL "none")
+ message(FATAL_ERROR
+ "Currently only none and libsupc++ are supported for c++ abi.")
+endif ()
+
# Configure compiler.
include(config-ix)
Modified: libcxx/trunk/lib/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/lib/CMakeLists.txt?rev=169036&r1=169035&r2=169036&view=diff
==============================================================================
--- libcxx/trunk/lib/CMakeLists.txt (original)
+++ libcxx/trunk/lib/CMakeLists.txt Fri Nov 30 15:02:29 2012
@@ -31,7 +31,10 @@
)
endif()
+add_dependencies(cxx ${LIBCXX_CXX_ABI_DEPS})
+
# Generate library list.
+set(libraries ${LIBCXX_CXX_ABI_LIBRARIES})
append_if(libraries LIBCXX_HAS_PTHREAD_LIB pthread)
append_if(libraries LIBCXX_HAS_C_LIB c)
append_if(libraries LIBCXX_HAS_M_LIB m)
Modified: libcxx/trunk/src/exception.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/exception.cpp?rev=169036&r1=169035&r2=169036&view=diff
==============================================================================
--- libcxx/trunk/src/exception.cpp (original)
+++ libcxx/trunk/src/exception.cpp Fri Nov 30 15:02:29 2012
@@ -41,7 +41,7 @@
namespace std
{
-#if !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION)
+#if !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION) && !defined(__GLIBCXX__)
// libcxxrt provides implementations of these functions itself.
unexpected_handler
@@ -99,7 +99,7 @@
}
#endif // !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION)
-#ifndef LIBCXXRT
+#if !defined(LIBCXXRT) && !defined(__GLIBCXX__)
bool uncaught_exception() _NOEXCEPT
{
#if __APPLE__ || defined(_LIBCPPABI_VERSION)
@@ -124,7 +124,7 @@
#endif // _LIBCPPABI_VERSION
#endif //LIBCXXRT
-#ifndef _LIBCPPABI_VERSION
+#if !defined(_LIBCPPABI_VERSION) && !defined(__GLIBCXX__)
bad_exception::~bad_exception() _NOEXCEPT
{
More information about the cfe-commits
mailing list