diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake b/compiler-rt/cmake/Modules/AddCompilerRT.cmake index 3970fb4157af..75891168411f 100644 --- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake +++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake @@ -240,28 +240,6 @@ function(add_compiler_rt_runtime name type) set_target_properties(${LIB_PARENT_TARGET} PROPERTIES FOLDER "Compiler-RT Misc") endif() - if(NOT TARGET install-${LIB_PARENT_TARGET}) - # The parent install target specifies the parent component to scrape up - # anything not installed by the individual install targets, and to handle - # installation when running the multi-configuration generators. - add_custom_target(install-${LIB_PARENT_TARGET} - DEPENDS ${LIB_PARENT_TARGET} - COMMAND "${CMAKE_COMMAND}" - -DCMAKE_INSTALL_COMPONENT=${LIB_PARENT_TARGET} - -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") - add_custom_target(install-${LIB_PARENT_TARGET}-stripped - DEPENDS ${LIB_PARENT_TARGET} - COMMAND "${CMAKE_COMMAND}" - -DCMAKE_INSTALL_COMPONENT=${LIB_PARENT_TARGET} - -DCMAKE_INSTALL_DO_STRIP=1 - -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") - set_target_properties(install-${LIB_PARENT_TARGET} PROPERTIES - FOLDER "Compiler-RT Misc") - set_target_properties(install-${LIB_PARENT_TARGET}-stripped PROPERTIES - FOLDER "Compiler-RT Misc") - add_dependencies(install-compiler-rt install-${LIB_PARENT_TARGET}) - add_dependencies(install-compiler-rt-stripped install-${LIB_PARENT_TARGET}-stripped) - endif() endif() foreach(libname ${libnames}) @@ -352,27 +330,12 @@ function(add_compiler_rt_runtime name type) endif() endif() - # We only want to generate per-library install targets if you aren't using - # an IDE because the extra targets get cluttered in IDEs. - if(NOT CMAKE_CONFIGURATION_TYPES) - add_custom_target(install-${libname} - DEPENDS ${libname} - COMMAND "${CMAKE_COMMAND}" - -DCMAKE_INSTALL_COMPONENT=${libname} - -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") - add_custom_target(install-${libname}-stripped - DEPENDS ${libname} - COMMAND "${CMAKE_COMMAND}" - -DCMAKE_INSTALL_COMPONENT=${libname} - -DCMAKE_INSTALL_DO_STRIP=1 - -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") - # If you have a parent target specified, we bind the new install target - # to the parent install target. - if(LIB_PARENT_TARGET) - add_dependencies(install-${LIB_PARENT_TARGET} install-${libname}) - add_dependencies(install-${LIB_PARENT_TARGET}-stripped install-${libname}-stripped) - endif() + set(parent_target_arg) + if(LIB_PARENT_TARGET) + set(parent_target_arg PARENT_TARGET ${LIB_PARENT_TARGET}) endif() + add_compiler_rt_install_targets(${libname} ${parent_target_arg}) + if(APPLE) set_target_properties(${libname} PROPERTIES OSX_ARCHITECTURES "${LIB_ARCHS_${libname}}") diff --git a/compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake b/compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake index 48f761a2e7c1..5c8745bc528c 100644 --- a/compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake +++ b/compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake @@ -1,4 +1,5 @@ include(CMakeParseArguments) +include(CompilerRTUtils) # On OS X SDKs can be installed anywhere on the base system and xcode-select can # set the default Xcode to use. This function finds the SDKs that are present in @@ -249,10 +250,18 @@ function(darwin_lipo_libs name) ) add_custom_target(${name} DEPENDS ${LIB_OUTPUT_DIR}/lib${name}.a) - add_dependencies(${LIB_PARENT_TARGET} ${name}) - install(FILES ${LIB_OUTPUT_DIR}/lib${name}.a - DESTINATION ${LIB_INSTALL_DIR}) set_target_properties(${name} PROPERTIES FOLDER "Compiler-RT Misc") + add_dependencies(${LIB_PARENT_TARGET} ${name}) + + if(CMAKE_CONFIGURATION_TYPES) + set(install_component ${LIB_PARENT_TARGET}) + else() + set(install_component ${name}) + endif() + install(FILES ${LIB_OUTPUT_DIR}/lib${name}.a + DESTINATION ${LIB_INSTALL_DIR} + COMPONENT ${install_component}) + add_compiler_rt_install_targets(${name} PARENT_TARGET ${LIB_PARENT_TARGET}) else() message(WARNING "Not generating lipo target for ${name} because no input libraries exist.") endif() diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake index 957452cffecc..f1543f5666d7 100644 --- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake +++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake @@ -415,3 +415,53 @@ function(compiler_rt_process_sources OUTPUT_VAR) endif() set("${OUTPUT_VAR}" ${sources} ${headers} PARENT_SCOPE) endfunction() + +# Create install targets for a library and its parent component (if specified). +function(add_compiler_rt_install_targets name) + cmake_parse_arguments(ARG "" "PARENT_TARGET" "" ${ARGN}) + + if(ARG_PARENT_TARGET AND NOT TARGET install-${ARG_PARENT_TARGET}) + # The parent install target specifies the parent component to scrape up + # anything not installed by the individual install targets, and to handle + # installation when running the multi-configuration generators. + add_custom_target(install-${ARG_PARENT_TARGET} + DEPENDS ${ARG_PARENT_TARGET} + COMMAND "${CMAKE_COMMAND}" + -DCMAKE_INSTALL_COMPONENT=${ARG_PARENT_TARGET} + -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") + add_custom_target(install-${ARG_PARENT_TARGET}-stripped + DEPENDS ${ARG_PARENT_TARGET} + COMMAND "${CMAKE_COMMAND}" + -DCMAKE_INSTALL_COMPONENT=${ARG_PARENT_TARGET} + -DCMAKE_INSTALL_DO_STRIP=1 + -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") + set_target_properties(install-${ARG_PARENT_TARGET} PROPERTIES + FOLDER "Compiler-RT Misc") + set_target_properties(install-${ARG_PARENT_TARGET}-stripped PROPERTIES + FOLDER "Compiler-RT Misc") + add_dependencies(install-compiler-rt install-${ARG_PARENT_TARGET}) + add_dependencies(install-compiler-rt-stripped install-${ARG_PARENT_TARGET}-stripped) + endif() + + # We only want to generate per-library install targets if you aren't using + # an IDE because the extra targets get cluttered in IDEs. + if(NOT CMAKE_CONFIGURATION_TYPES) + add_custom_target(install-${name} + DEPENDS ${name} + COMMAND "${CMAKE_COMMAND}" + -DCMAKE_INSTALL_COMPONENT=${name} + -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") + add_custom_target(install-${name}-stripped + DEPENDS ${name} + COMMAND "${CMAKE_COMMAND}" + -DCMAKE_INSTALL_COMPONENT=${name} + -DCMAKE_INSTALL_DO_STRIP=1 + -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") + # If you have a parent target specified, we bind the new install target + # to the parent install target. + if(LIB_PARENT_TARGET) + add_dependencies(install-${LIB_PARENT_TARGET} install-${name}) + add_dependencies(install-${LIB_PARENT_TARGET}-stripped install-${name}-stripped) + endif() + endif() +endfunction()