Skip to content

Commit 8fa2608

Browse files
committed
[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. llvm-svn: 336708
1 parent 2ad2c18 commit 8fa2608

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

llvm/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,9 @@ option(LLVM_USE_OPROFILE
429429
option(LLVM_EXTERNALIZE_DEBUGINFO
430430
"Generate dSYM files and strip executables and libraries (Darwin Only)" OFF)
431431

432+
option(LLVM_CODESIGNING_IDENTITY
433+
"Sign executables and dylibs with the given identity (Darwin Only)" OFF)
434+
432435
# If enabled, verify we are on a platform that supports oprofile.
433436
if( LLVM_USE_OPROFILE )
434437
if( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" )

llvm/cmake/modules/AddLLVM.cmake

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,7 @@ function(llvm_add_library name)
580580

581581
if(ARG_SHARED OR ARG_MODULE)
582582
llvm_externalize_debuginfo(${name})
583+
llvm_codesign(${name})
583584
endif()
584585
endfunction()
585586

@@ -784,6 +785,8 @@ macro(add_llvm_executable name)
784785
# API for all shared libaries loaded by this executable.
785786
target_link_libraries(${name} PRIVATE ${LLVM_PTHREAD_LIB})
786787
endif()
788+
789+
llvm_codesign(${name})
787790
endmacro(add_llvm_executable name)
788791

789792
function(export_executable_symbols target)
@@ -1590,6 +1593,32 @@ function(llvm_externalize_debuginfo name)
15901593
endif()
15911594
endfunction()
15921595

1596+
function(llvm_codesign name)
1597+
if(NOT LLVM_CODESIGNING_IDENTITY)
1598+
return()
1599+
endif()
1600+
1601+
if(APPLE)
1602+
if(NOT CMAKE_CODESIGN)
1603+
set(CMAKE_CODESIGN xcrun codesign)
1604+
endif()
1605+
if(NOT CMAKE_CODESIGN_ALLOCATE)
1606+
execute_process(
1607+
COMMAND xcrun -f codesign_allocate
1608+
OUTPUT_STRIP_TRAILING_WHITESPACE
1609+
OUTPUT_VARIABLE CMAKE_CODESIGN_ALLOCATE
1610+
)
1611+
endif()
1612+
add_custom_command(
1613+
TARGET ${name} POST_BUILD
1614+
COMMAND ${CMAKE_COMMAND} -E
1615+
env CODESIGN_ALLOCATE=${CMAKE_CODESIGN_ALLOCATE}
1616+
${CMAKE_CODESIGN} -s ${LLVM_CODESIGNING_IDENTITY}
1617+
$<TARGET_FILE:${name}>
1618+
)
1619+
endif()
1620+
endfunction()
1621+
15931622
function(llvm_setup_rpath name)
15941623
if(CMAKE_INSTALL_RPATH)
15951624
return()

llvm/cmake/platforms/iOS.cmake

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,23 @@ IF(NOT CMAKE_LIBTOOL)
8080
SET(CMAKE_LIBTOOL ${CMAKE_LIBTOOL_val} CACHE FILEPATH "Libtool")
8181
message(STATUS "Using libtool ${CMAKE_LIBTOOL}")
8282
ENDIF()
83+
84+
IF(NOT CMAKE_CODESIGN)
85+
execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find codesign
86+
OUTPUT_VARIABLE CMAKE_CODESIGN_val
87+
ERROR_QUIET
88+
OUTPUT_STRIP_TRAILING_WHITESPACE)
89+
SET(CMAKE_CODESIGN ${CMAKE_CODESIGN_val} CACHE FILEPATH "Codesign")
90+
message(STATUS "Using codesign ${CMAKE_CODESIGN}")
91+
ENDIF()
92+
93+
IF(NOT CMAKE_CODESIGN_ALLOCATE)
94+
execute_process(
95+
COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find codesign_allocate
96+
OUTPUT_VARIABLE CMAKE_CODESIGN_ALLOCATE_val
97+
ERROR_QUIET
98+
OUTPUT_STRIP_TRAILING_WHITESPACE)
99+
SET(CMAKE_CODESIGN_ALLOCATE ${CMAKE_CODESIGN_ALLOCATE_val} CACHE
100+
FILEPATH "Codesign_Allocate")
101+
message(STATUS "Using codesign_allocate ${CMAKE_CODESIGN_ALLOCATE}")
102+
ENDIF()

0 commit comments

Comments
 (0)