Please use this corrected patch instead. Michael
libcxx-use-macros-for-abi-library-setup.patch
Description: Binary data
On 08 Feb 2013, at 12:04 PM, Michael van der Westhuizen <[email protected]> wrote: > Here's a patch against the current state of the repository to implement this > macro. > > Michael > > <libcxx-use-macros-for-abi-library-setup.patch> > > On 07 Feb 2013, at 9:52 PM, Michael Spencer <[email protected]> wrote: > >> On Thu, Feb 7, 2013 at 7:27 AM, Howard Hinnant <[email protected]> wrote: >>> Author: hhinnant >>> Date: Thu Feb 7 09:27:39 2013 >>> New Revision: 174623 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=174623&view=rev >>> Log: >>> Michael van der Westhuizen: The attached patch add support for building >>> against libc++abi and libcxxrt to CMake builds of libc++. >>> >>> Usage (with the appropriate CC and CXX environment variables) is: >>> $ cmake -DLIBCXX_CXX_ABI=libcxxabi >>> '-DLIBCXX_LIBCXXABI_INCLUDE_PATHS=/home/michael/libcxxabi/include' ../libcxx >>> and: >>> $ cmake -DLIBCXX_CXX_ABI=libcxxrt >>> '-DLIBCXX_LIBCXXRT_INCLUDE_PATHS=/home/michael/libcxxrt/src' ../libcxx >>> >>> Modified: >>> libcxx/trunk/CMakeLists.txt >>> libcxx/trunk/include/__split_buffer >>> libcxx/trunk/include/functional >>> libcxx/trunk/include/string >>> libcxx/trunk/include/vector >>> >>> Modified: libcxx/trunk/CMakeLists.txt >>> URL: >>> http://llvm.org/viewvc/llvm-project/libcxx/trunk/CMakeLists.txt?rev=174623&r1=174622&r2=174623&view=diff >>> ============================================================================== >>> --- libcxx/trunk/CMakeLists.txt (original) >>> +++ libcxx/trunk/CMakeLists.txt Thu Feb 7 09:27:39 2013 >>> @@ -114,6 +114,89 @@ if ("${LIBCXX_CXX_ABI}" STREQUAL "libsup >>> FILES_MATCHING >>> PATTERN "*" >>> ) >>> +elseif ("${LIBCXX_CXX_ABI}" STREQUAL "libcxxabi") >>> + set(LIBCXX_LIBCXXABI_INCLUDE_PATHS "${LIBCXX_LIBCXXABI_INCLUDE_PATHS}" >>> + CACHE STRINGS >>> + "Paths to libc++abi include directories separate by ';'.") >>> + set(LIBCXX_CXX_ABI_LIBRARIES c++abi) >>> + set(LIBCXX_LIBCXXABI_FILES >>> + cxxabi.h >>> + cxa_demangle.h >>> + ) >>> + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/include") >>> + set(LIBCXX_LIBCXXABI_FILE_PATHS) >>> + foreach(path ${LIBCXX_LIBCXXABI_FILES}) >>> + set(found FALSE) >>> + foreach(incpath ${LIBCXX_LIBCXXABI_INCLUDE_PATHS}) >>> + if (EXISTS "${incpath}/${path}") >>> + set(found TRUE) >>> + get_filename_component(file ${path} NAME) >>> + add_custom_command( >>> + OUTPUT "${CMAKE_BINARY_DIR}/include/${file}" >>> + COMMAND ${CMAKE_COMMAND} -E copy_if_different >>> + "${incpath}/${path}" >>> + "${CMAKE_BINARY_DIR}/include" >>> + MAIN_DEPENDENCY "${incpath}/${path}" >>> + ) >>> + list(APPEND LIBCXX_CXX_ABI_DEPS >>> + "${CMAKE_BINARY_DIR}/include/${file}") >>> + endif() >>> + endforeach() >>> + if (NOT found) >>> + message(FATAL_ERROR "Failed to find ${path}") >>> + endif() >>> + endforeach() >>> + add_custom_target(cxxabi_headers DEPENDS ${LIBCXX_CXX_ABI_DEPS}) >>> + set(LIBCXX_CXX_ABI_DEPS cxxabi_headers) >>> + include_directories("${CMAKE_BINARY_DIR}/include") >>> + install(DIRECTORY "${CMAKE_BINARY_DIR}/include/" >>> + DESTINATION include/c++/v1 >>> + FILES_MATCHING >>> + PATTERN "*" >>> + ) >>> +elseif ("${LIBCXX_CXX_ABI}" STREQUAL "libcxxrt") >>> + set(LIBCXX_LIBCXXRT_INCLUDE_PATHS "${LIBCXX_LIBCXXRT_INCLUDE_PATHS}" >>> + CACHE STRINGS >>> + "Paths to libcxxrt include directories separate by ';'.") >>> + set(LIBCXX_CXX_ABI_LIBRARIES cxxrt) >>> + set(LIBCXX_LIBCXXRT_FILES >>> + cxxabi.h >>> + unwind.h >>> + unwind-arm.h >>> + unwind-itanium.h >>> + ) >>> + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/include") >>> + set(LIBCXX_LIBCXXRT_FILE_PATHS) >>> + foreach(path ${LIBCXX_LIBCXXRT_FILES}) >>> + set(found FALSE) >>> + foreach(incpath ${LIBCXX_LIBCXXRT_INCLUDE_PATHS}) >>> + if (EXISTS "${incpath}/${path}") >>> + set(found TRUE) >>> + get_filename_component(file ${path} NAME) >>> + add_custom_command( >>> + OUTPUT "${CMAKE_BINARY_DIR}/include/${file}" >>> + COMMAND ${CMAKE_COMMAND} -E copy_if_different >>> + "${incpath}/${path}" >>> + "${CMAKE_BINARY_DIR}/include" >>> + MAIN_DEPENDENCY "${incpath}/${path}" >>> + ) >>> + list(APPEND LIBCXX_CXX_ABI_DEPS >>> + "${CMAKE_BINARY_DIR}/include/${file}") >>> + endif() >>> + endforeach() >>> + if (NOT found) >>> + message(FATAL_ERROR "Failed to find ${path}") >>> + endif() >>> + endforeach() >>> + add_custom_target(cxxrt_headers DEPENDS ${LIBCXX_CXX_ABI_DEPS}) >>> + set(LIBCXX_CXX_ABI_DEPS cxxrt_headers) >>> + include_directories("${CMAKE_BINARY_DIR}/include") >>> + install(DIRECTORY "${CMAKE_BINARY_DIR}/include/" >>> + DESTINATION include/c++/v1 >>> + FILES_MATCHING >>> + PATTERN "*" >>> + ) >>> + list(APPEND LIBCXX_CXX_FEATURE_FLAGS -DLIBCXXRT) >>> elseif (NOT "${LIBCXX_CXX_ABI}" STREQUAL "none") >>> message(FATAL_ERROR >>> "Currently only none and libsupc++ are supported for c++ abi.") >>> >> >> This should go into a function/macro, as it's pretty much identical >> between the supported ABIs. >> >> - Michael Spencer >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
