[libcxx] r174623 - Michael van der Westhuizen: The attached patch add support for building against libc++abi and libcxxrt to CMake builds of libc++.
Michael Spencer
bigcheesegs at gmail.com
Thu Feb 7 11:52:25 PST 2013
On Thu, Feb 7, 2013 at 7:27 AM, Howard Hinnant <hhinnant at apple.com> 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
More information about the cfe-commits
mailing list