diff --git a/llvm/docs/CMake.rst b/llvm/docs/CMake.rst --- a/llvm/docs/CMake.rst +++ b/llvm/docs/CMake.rst @@ -625,6 +625,14 @@ -DLLVM_EXTERNAL_FOO_SOURCE_DIR=/src/foo -DLLVM_EXTERNAL_BAR_SOURCE_DIR=/src/bar``. +**LLVM_EXTERNAL_RUNTIMES**:STRING + Semicolon-separated list of additional external runtimes to build. For each + additional runtime LLVM_EXTERNAL__SOURCE_DIR has to be specified with + the path for the source code of the project. Example: + ``-DLLVM_EXTERNAL_RUNTIMES="mylib1;mylib2" + -DLLVM_EXTERNAL_MYLIB1_SOURCE_DIR=/src/mylib1 + -DLLVM_EXTERNAL_MYLIB2_SOURCE_DIR=/src/mylib2``. + **LLVM_EXTERNALIZE_DEBUGINFO**:BOOL Generate dSYM files and strip executables and libraries (Darwin Only). Defaults to OFF. diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -15,6 +15,19 @@ STRING(REGEX REPLACE "-" "_" canon_name ${canon_name}) set(LLVM_EXTERNAL_${canon_name}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../${proj}") endforeach() +if(LLVM_EXTERNAL_RUNTIMES) + string(REPLACE ";" "|" LLVM_EXTERNAL_RUNTIMES_PASSTHROUGH "${LLVM_EXTERNAL_RUNTIMES}") + list(APPEND EXTERNAL_RUNTIMES_CMAKE_ARGS -DLLVM_EXTERNAL_RUNTIMES=${LLVM_EXTERNAL_RUNTIMES_PASSTHROUGH}) +endif() +foreach(proj ${LLVM_EXTERNAL_RUNTIMES}) + string(TOUPPER "${proj}" canon_name) + STRING(REGEX REPLACE "-" "_" canon_name ${canon_name}) + set(LLVM_EXTERNAL_${canon_name}_SOURCE_DIR + "${LLVM_EXTERNAL_${canon_name}_SOURCE_DIR}" + CACHE PATH "Path to ${proj} source directory") + list(APPEND EXTERNAL_RUNTIMES_CMAKE_ARGS + "-DLLVM_EXTERNAL_${canon_name}_SOURCE_DIR=${LLVM_EXTERNAL_${canon_name}_SOURCE_DIR}") +endforeach() function(get_compiler_rt_path path) foreach(entry ${runtimes}) @@ -240,6 +253,7 @@ -DCMAKE_CXX_COMPILER_WORKS=ON -DCMAKE_ASM_COMPILER_WORKS=ON ${COMMON_CMAKE_ARGS} + ${EXTERNAL_RUNTIMES_CMAKE_ARGS} ${RUNTIMES_CMAKE_ARGS} ${ARG_CMAKE_ARGS} PASSTHROUGH_PREFIXES LLVM_ENABLE_RUNTIMES @@ -348,6 +362,7 @@ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON -DLLVM_RUNTIMES_TARGET=${name} ${COMMON_CMAKE_ARGS} + ${EXTERNAL_RUNTIMES_CMAKE_ARGS} ${${name}_extra_args} EXTRA_TARGETS ${${name}_extra_targets} ${${name}_test_targets} diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -41,6 +41,17 @@ set(LLVM_EXTERNAL_${canon_name}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}") endforeach() +foreach(proj ${LLVM_EXTERNAL_RUNTIMES}) + string(TOUPPER "${proj}" canon_name) + STRING(REGEX REPLACE "-" "_" canon_name ${canon_name}) + 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_EXTERNAL_RUNTIMES requests ${proj} but directory not found: ${proj_dir}") + endif() +endforeach() + function(runtime_register_component name) set_property(GLOBAL APPEND PROPERTY SUB_COMPONENTS ${name}) endfunction()