From d658f2fdb1de551f5c07a0b1719f38431e867569 Mon Sep 17 00:00:00 2001 From: Chris Bieneman Date: Thu, 25 Aug 2016 20:49:51 +0000 Subject: [PATCH] [CMake] Add support for exposing runtime targets This patch adds support to the runtimes build for exposing sub-project targets through the high-level configuration. This will enable exposing the build, check and install targets for sub-project components (i.e. asan, check-asan, install-asan...). This patch requires minor changes to the runtime projects to take advantage of it, and I'll phase those changes into Compiler-RT shortly. llvm-svn: 279776 --- llvm/runtimes/CMakeLists.txt | 53 +++++++++++++++++++++++++++++++-------- llvm/runtimes/Components.cmake.in | 2 ++ 2 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 llvm/runtimes/Components.cmake.in diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt index 2d84f47..f4d7201 100644 --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -19,6 +19,10 @@ endforeach() # triggered by the external project call for the runtimes target below. if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) + function(runtime_register_component name) + set_property(GLOBAL APPEND PROPERTY SUB_COMPONENTS ${name}) + endfunction() + cmake_minimum_required(VERSION 3.4.3) # Add the root project's CMake modules, and the LLVM build's modules to the @@ -71,19 +75,44 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) list(APPEND RUNTIMES_LIT_EXTRA_ARGS ${LLVM_LIT_EXTRA_ARGS}) endforeach() - # Add a global check rule now that all subdirectories have been traversed - # and we know the total set of lit testsuites. - - add_lit_target(check-runtimes - "Running all regression tests" - ${RUNTIMES_LIT_TESTSUITES} - PARAMS ${RUNTIMES_LIT_PARAMS} - DEPENDS ${RUNTIMES_LIT_DEPENDS} - ARGS ${RUNTIMES_LIT_EXTRA_ARGS} - ) - add_custom_target(test-depends-runtimes DEPENDS ${RUNTIMES_LIT_DEPENDS}) + if(LLVM_INCLUDE_TESTS) + # Add a global check rule now that all subdirectories have been traversed + # and we know the total set of lit testsuites. + + add_lit_target(check-runtimes + "Running all regression tests" + ${RUNTIMES_LIT_TESTSUITES} + PARAMS ${RUNTIMES_LIT_PARAMS} + DEPENDS ${RUNTIMES_LIT_DEPENDS} + ARGS ${RUNTIMES_LIT_EXTRA_ARGS} + ) + add_custom_target(test-depends-runtimes DEPENDS ${RUNTIMES_LIT_DEPENDS}) + endif() + + get_property(SUB_COMPONENTS GLOBAL PROPERTY SUB_COMPONENTS) + list(REMOVE_DUPLICATES SUB_COMPONENTS) + foreach(component ${SUB_COMPONENTS}) + if(NOT TARGET ${component}) + message(SEND_ERROR "Missing target for runtime component ${component}!") + continue() + endif() + if(LLVM_INCLUDE_TESTS AND NOT TARGET check-${component}) + message(SEND_ERROR "Missing check target for runtime component ${component}!") + continue() + endif() + + if(TARGET install-${component}) + list(APPEND SUB_INSTALL_TARGETS install-${component}) + endif() + endforeach() + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/Components.cmake.in + ${LLVM_BINARY_DIR}/runtimes/Components.cmake) else() # if this is included from LLVM's CMake + include(${LLVM_BINARY_DIR}/runtimes/Components.cmake OPTIONAL) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${LLVM_BINARY_DIR}/runtimes/Components.cmake) include(LLVMExternalProjectUtils) # If compiler-rt is present we need to build the builtin libraries first. This @@ -134,6 +163,8 @@ else() # if this is included from LLVM's CMake EXTRA_TARGETS ${extra_targets} test-depends-runtimes check-runtimes + ${SUB_COMPONENTS} + ${SUB_INSTALL_TARGETS} USE_TOOLCHAIN) set_property(GLOBAL APPEND PROPERTY LLVM_LIT_DEPENDS test-depends-runtimes) diff --git a/llvm/runtimes/Components.cmake.in b/llvm/runtimes/Components.cmake.in new file mode 100644 index 0000000..6e24ac3 --- /dev/null +++ b/llvm/runtimes/Components.cmake.in @@ -0,0 +1,2 @@ +set(SUB_COMPONENTS @SUB_COMPONENTS@) +set(SUB_INSTALL_TARGETS @SUB_INSTALL_TARGETS@) -- 2.7.4