diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt index f0ef353a2c66..d466c69d1ca8 100644 --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -5,15 +5,18 @@ set(COMMON_CMAKE_ARGS "-DHAVE_LLVM_LIT=ON;-DCLANG_RESOURCE_DIR=${CLANG_RESOURCE_DIR}") foreach(proj ${LLVM_ENABLE_RUNTIMES}) - set(proj_dir "${CMAKE_CURRENT_SOURCE_DIR}/../../${proj}") - if(IS_DIRECTORY ${proj_dir} AND EXISTS ${proj_dir}/CMakeLists.txt) - list(APPEND runtimes ${proj_dir}) - else() - message(FATAL_ERROR "LLVM_ENABLE_RUNTIMES requests ${proj} but directory not found: ${proj_dir}") - endif() string(TOUPPER "${proj}" canon_name) STRING(REGEX REPLACE "-" "_" canon_name ${canon_name}) - set(LLVM_EXTERNAL_${canon_name}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../${proj}") + if(NOT LLVM_EXTERNAL_${canon_name}_SOURCE_DIR) + set(LLVM_EXTERNAL_${canon_name}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../${proj}") + endif() + set(proj_dir "${LLVM_EXTERNAL_${canon_name}_SOURCE_DIR}") + if(NOT IS_DIRECTORY ${proj_dir} OR NOT EXISTS ${proj_dir}/CMakeLists.txt) + message(FATAL_ERROR "LLVM_ENABLE_RUNTIMES requests ${proj} but directory not found: ${proj_dir}") + endif() + list(APPEND runtimes ${proj_dir}) + list(APPEND RUNTIMES_CMAKE_ARGS + "-DLLVM_EXTERNAL_${canon_name}_SOURCE_DIR=${LLVM_EXTERNAL_${canon_name}_SOURCE_DIR}") endforeach() function(get_compiler_rt_path path) diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index 157e87750e19..c12e2406b5d0 100644 --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -46,15 +46,17 @@ endif() include(SortSubset) sort_subset("${LLVM_SUPPORTED_RUNTIMES}" "${LLVM_ENABLE_RUNTIMES}" LLVM_ENABLE_RUNTIMES) foreach(proj ${LLVM_ENABLE_RUNTIMES}) - set(proj_dir "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}") + string(TOUPPER "${proj}" canon_name) + STRING(REGEX REPLACE "-" "_" canon_name ${canon_name}) + if(NOT LLVM_EXTERNAL_${canon_name}_SOURCE_DIR) + set(LLVM_EXTERNAL_${canon_name}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}") + endif() + set(proj_dir "${LLVM_EXTERNAL_${canon_name}_SOURCE_DIR}") if(IS_DIRECTORY ${proj_dir} AND EXISTS ${proj_dir}/CMakeLists.txt) list(APPEND runtimes ${proj_dir}) else() message(FATAL_ERROR "LLVM_ENABLE_RUNTIMES requests ${proj} but directory not found: ${proj_dir}") endif() - string(TOUPPER "${proj}" canon_name) - STRING(REGEX REPLACE "-" "_" canon_name ${canon_name}) - set(LLVM_EXTERNAL_${canon_name}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}") endforeach() function(runtime_register_component name)