From 7613264ef4a1e772204206a28b28dc59ce6f28c7 Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Tue, 10 Jul 2018 17:32:48 +0000 Subject: [CMake] Teach the build system to codesign built products Automatically codesign all executables and dynamic libraries if a codesigning identity is given (via LLVM_CODESIGNING_IDENTITY). This option is darwin only for now. Also update platforms/iOS.cmake to pick up the right versions of codesign and codesign_allocate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@336708 91177308-0d34-0410-b5e6-96231b3b80d8 --- cmake/modules/AddLLVM.cmake | 29 +++++++++++++++++++++++++++++ cmake/platforms/iOS.cmake | 20 ++++++++++++++++++++ 2 files changed, 49 insertions(+) (limited to 'cmake') diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index 2f88f585db2..5ea2024d1c8 100644 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -580,6 +580,7 @@ function(llvm_add_library name) if(ARG_SHARED OR ARG_MODULE) llvm_externalize_debuginfo(${name}) + llvm_codesign(${name}) endif() endfunction() @@ -784,6 +785,8 @@ macro(add_llvm_executable name) # API for all shared libaries loaded by this executable. target_link_libraries(${name} PRIVATE ${LLVM_PTHREAD_LIB}) endif() + + llvm_codesign(${name}) endmacro(add_llvm_executable name) function(export_executable_symbols target) @@ -1590,6 +1593,32 @@ function(llvm_externalize_debuginfo name) endif() endfunction() +function(llvm_codesign name) + if(NOT LLVM_CODESIGNING_IDENTITY) + return() + endif() + + if(APPLE) + if(NOT CMAKE_CODESIGN) + set(CMAKE_CODESIGN xcrun codesign) + endif() + if(NOT CMAKE_CODESIGN_ALLOCATE) + execute_process( + COMMAND xcrun -f codesign_allocate + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE CMAKE_CODESIGN_ALLOCATE + ) + endif() + add_custom_command( + TARGET ${name} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + env CODESIGN_ALLOCATE=${CMAKE_CODESIGN_ALLOCATE} + ${CMAKE_CODESIGN} -s ${LLVM_CODESIGNING_IDENTITY} + $ + ) + endif() +endfunction() + function(llvm_setup_rpath name) if(CMAKE_INSTALL_RPATH) return() diff --git a/cmake/platforms/iOS.cmake b/cmake/platforms/iOS.cmake index d15db933a6b..69f8479721d 100644 --- a/cmake/platforms/iOS.cmake +++ b/cmake/platforms/iOS.cmake @@ -80,3 +80,23 @@ IF(NOT CMAKE_LIBTOOL) SET(CMAKE_LIBTOOL ${CMAKE_LIBTOOL_val} CACHE FILEPATH "Libtool") message(STATUS "Using libtool ${CMAKE_LIBTOOL}") ENDIF() + +IF(NOT CMAKE_CODESIGN) + execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find codesign + OUTPUT_VARIABLE CMAKE_CODESIGN_val + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + SET(CMAKE_CODESIGN ${CMAKE_CODESIGN_val} CACHE FILEPATH "Codesign") + message(STATUS "Using codesign ${CMAKE_CODESIGN}") +ENDIF() + +IF(NOT CMAKE_CODESIGN_ALLOCATE) + execute_process( + COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find codesign_allocate + OUTPUT_VARIABLE CMAKE_CODESIGN_ALLOCATE_val + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + SET(CMAKE_CODESIGN_ALLOCATE ${CMAKE_CODESIGN_ALLOCATE_val} CACHE + FILEPATH "Codesign_Allocate") + message(STATUS "Using codesign_allocate ${CMAKE_CODESIGN_ALLOCATE}") +ENDIF() -- cgit v1.2.3