diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -9,6 +9,17 @@ set(LLVM_ENABLE_RUNTIMES ${LLVM_ALL_RUNTIMES}) endif() +# If both libc++ and libc++abi are being built, always configure libc++abi before libc++. +# This allows libc++ to depend on targets set up by libc++abi when it needs to. +if (libcxx IN_LIST LLVM_ENABLE_RUNTIMES AND libcxxabi IN_LIST LLVM_ENABLE_RUNTIMES) + list(FIND LLVM_ENABLE_RUNTIMES libcxx _libcxx_index) + list(FIND LLVM_ENABLE_RUNTIMES libcxxabi _libcxxabi_index) + if (_libcxx_index LESS _libcxxabi_index) + list(TRANSFORM LLVM_ENABLE_RUNTIMES REPLACE "^libcxx$" "libcxxabi" AT ${_libcxx_index}) + list(TRANSFORM LLVM_ENABLE_RUNTIMES REPLACE "^libcxxabi$" "libcxx" AT ${_libcxxabi_index}) + endif() +endif() + foreach(proj ${LLVM_ENABLE_RUNTIMES}) set(proj_dir "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}") if(IS_DIRECTORY ${proj_dir} AND EXISTS ${proj_dir}/CMakeLists.txt)