summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2018-07-10 17:32:48 +0000
committerJustin Bogner <mail@justinbogner.com>2018-07-10 17:32:48 +0000
commit7613264ef4a1e772204206a28b28dc59ce6f28c7 (patch)
treee4b2b04168b10ec71ba4500a21728fc314cd3759 /cmake
parent5c37ae1e46f445d1d9118b7f9a124ce4c442460b (diff)
[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
Diffstat (limited to 'cmake')
-rw-r--r--cmake/modules/AddLLVM.cmake29
-rw-r--r--cmake/platforms/iOS.cmake20
2 files changed, 49 insertions, 0 deletions
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}
+ $<TARGET_FILE:${name}>
+ )
+ 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()