[libcxx] r174623 - Michael van der Westhuizen: The attached patch add support for building against libc++abi and libcxxrt to CMake builds of libc++.

Michael van der Westhuizen r1mikey at gmail.com
Fri Feb 8 00:23:24 PST 2013


Agreed.

I'll get this done and submit a new patch.

Michael

On 07 Feb 2013, at 9:52 PM, Michael Spencer <bigcheesegs at gmail.com> wrote:

> 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