Agreed. I'll get this done and submit a new patch.
Michael 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
