diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -143,6 +143,20 @@ endif() endif() +# Select the runtimes to build +set(LLVM_DEFAULT_RUNTIMES "compiler-rt;libc;libcxx;libcxxabi;libunwind;openmp") +set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc") +set(LLVM_ENABLE_RUNTIMES "" CACHE STRING + "Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.") +if(LLVM_ENABLE_RUNTIMES STREQUAL "all") + set(LLVM_ENABLE_RUNTIMES ${LLVM_DEFAULT_RUNTIMES}) +endif() +foreach(proj IN LISTS LLVM_ENABLE_RUNTIMES) + if (NOT "${proj}" IN_LIST LLVM_SUPPORTED_RUNTIMES) + message(FATAL_ERROR "Runtime ${proj} is not a supported runtime. Supported runtimes are: ${LLVM_SUPPORTED_RUNTIMES}") + endif() +endforeach() + # LLVM_ENABLE_PROJECTS_USED is `ON` if the user has ever used the # `LLVM_ENABLE_PROJECTS` CMake cache variable. This exists for # several reasons: diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -3,16 +3,6 @@ # similar although simpler functionality. We should figure out how to merge # the two files. -# TODO: Selecting runtimes should be always performed inside the runtimes -# build, see runtimes/CMakeLists.txt, except that we currently check whether -# compiler-rt is being built to determine whether to first build builtins -# or not so we need that information in this file as well. -set(LLVM_ALL_RUNTIMES "compiler-rt;libc;libcxx;libcxxabi;libunwind;openmp") -set(LLVM_ENABLE_RUNTIMES "" CACHE STRING - "Semicolon-separated list of runtimes to build (${LLVM_ALL_RUNTIMES}), or \"all\".") -if(LLVM_ENABLE_RUNTIMES STREQUAL "all" ) - set(LLVM_ENABLE_RUNTIMES ${LLVM_ALL_RUNTIMES}) -endif() set(COMMON_CMAKE_ARGS "-DHAVE_LLVM_LIT=ON") foreach(proj ${LLVM_ENABLE_RUNTIMES}) set(proj_dir "${CMAKE_CURRENT_SOURCE_DIR}/../../${proj}") diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -16,14 +16,14 @@ # We order libraries to mirror roughly how they are layered, except that compiler-rt can depend # on libc++, so we put it after. set(LLVM_DEFAULT_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp") -set(LLVM_ALL_RUNTIMES "${LLVM_DEFAULT_RUNTIMES};llvm-libgcc") +set(LLVM_SUPPORTED_RUNTIMES "${LLVM_DEFAULT_RUNTIMES};llvm-libgcc") set(LLVM_ENABLE_RUNTIMES "" CACHE STRING - "Semicolon-separated list of runtimes to build (${LLVM_ALL_RUNTIMES}), or \"all\".") + "Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.") if(LLVM_ENABLE_RUNTIMES STREQUAL "all" ) set(LLVM_ENABLE_RUNTIMES ${LLVM_DEFAULT_RUNTIMES}) endif() include(SortSubset) -sort_subset("${LLVM_ALL_RUNTIMES}" "${LLVM_ENABLE_RUNTIMES}" LLVM_ENABLE_RUNTIMES) +sort_subset("${LLVM_SUPPORTED_RUNTIMES}" "${LLVM_ENABLE_RUNTIMES}" LLVM_ENABLE_RUNTIMES) foreach(proj ${LLVM_ENABLE_RUNTIMES}) set(proj_dir "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}")