diff options
author | Chris Matthews <cmatthews5@apple.com> | 2019-09-18 18:11:25 +0000 |
---|---|---|
committer | Chris Matthews <cmatthews5@apple.com> | 2019-09-18 18:11:25 +0000 |
commit | 8f3667acb3a6438c8088302b94a8bdbf7662623f (patch) | |
tree | 0435734c53e4709f381045534af9683515896cc4 | |
parent | 52d4b12f6e5833eb4eec7ee2e57120b34c87550b (diff) |
Support for codesigning executables on Darwin
Mirror LLVM's cmake llvm_codesign function into the test-suite and apply
to all executables.
git-svn-id: https://llvm.org/svn/llvm-project/test-suite/trunk@372241 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | CMakeLists.txt | 3 | ||||
-rw-r--r-- | cmake/modules/Host.cmake | 2 | ||||
-rw-r--r-- | cmake/modules/TestSuite.cmake | 51 | ||||
-rw-r--r-- | tools/CMakeLists.txt | 2 |
4 files changed, 58 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d058770..edb3167d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,9 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TEST_SUITE_ARCH_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TEST_SUITE_ARCH_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${TEST_SUITE_ARCH_FLAGS}") +set(LLVM_CODESIGNING_IDENTITY "" CACHE STRING + "Sign executables and dylibs with the given identity or skip if empty (Darwin Only)") + add_definitions(-DNDEBUG) option(TEST_SUITE_SUPPRESS_WARNINGS "Suppress all warnings" ON) if(${TEST_SUITE_SUPPRESS_WARNINGS}) diff --git a/cmake/modules/Host.cmake b/cmake/modules/Host.cmake index 6a00b301..ef81deeb 100644 --- a/cmake/modules/Host.cmake +++ b/cmake/modules/Host.cmake @@ -31,4 +31,6 @@ function(llvm_add_host_executable targetname exename) ) add_custom_target(${targetname} DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${exename}") + llvm_codesign(${targetname} + BUNDLE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${exename}") endfunction() diff --git a/cmake/modules/TestSuite.cmake b/cmake/modules/TestSuite.cmake index b87a06ce..e09a85eb 100644 --- a/cmake/modules/TestSuite.cmake +++ b/cmake/modules/TestSuite.cmake @@ -58,6 +58,7 @@ function(llvm_test_executable_no_test target) append_target_flags(LINK_LIBRARIES ${target} -fprofile-instr-use=${target_path}.profdata) endif() + llvm_codesign(${target}) set_property(GLOBAL APPEND PROPERTY TEST_SUITE_TARGETS ${target}) test_suite_add_build_dependencies(${target}) endfunction() @@ -125,3 +126,53 @@ function(append_target_flags propertyname target) set_target_properties(${target} PROPERTIES ${propertyname} "${new_flags}") endif() endfunction() + +# Usage: llvm_codesign(name [FORCE] [ENTITLEMENTS file] [BUNDLE_PATH path]) +function(llvm_codesign name) + cmake_parse_arguments(ARG "FORCE" "ENTITLEMENTS;BUNDLE_PATH" "" ${ARGN}) + if(NOT LLVM_CODESIGNING_IDENTITY) + return() + endif() + + if(CMAKE_GENERATOR STREQUAL "Xcode") + set_target_properties(${name} PROPERTIES + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ${LLVM_CODESIGNING_IDENTITY} + ) + if(DEFINED ARG_ENTITLEMENTS) + set_target_properties(${name} PROPERTIES + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${ARG_ENTITLEMENTS} + ) + endif() + elseif(APPLE AND CMAKE_HOST_SYSTEM_NAME MATCHES Darwin) + 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() + if(DEFINED ARG_ENTITLEMENTS) + set(pass_entitlements --entitlements ${ARG_ENTITLEMENTS}) + endif() + + if (NOT ARG_BUNDLE_PATH) + set(ARG_BUNDLE_PATH $<TARGET_FILE:${name}>) + endif() + + if(ARG_FORCE) + set(force_flag "-f") + endif() + + add_custom_command( + TARGET ${name} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + env CODESIGN_ALLOCATE=${CMAKE_CODESIGN_ALLOCATE} + ${CMAKE_CODESIGN} -s ${LLVM_CODESIGNING_IDENTITY} + ${pass_entitlements} ${force_flag} ${ARG_BUNDLE_PATH} + COMMENT "Codesign ${name}" + ) + endif() +endfunction() diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 20f35a7b..e0f3f1b8 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -8,6 +8,7 @@ include(Host) add_executable(fpcmp-target ${CMAKE_CURRENT_SOURCE_DIR}/fpcmp.c) +llvm_codesign(fpcmp-target) add_executable(build-fpcmp-target ALIAS fpcmp-target) llvm_add_host_executable(build-fpcmp fpcmp fpcmp.c) @@ -34,6 +35,7 @@ if(TEST_SUITE_USE_PERF) add_custom_target(build-timeit-target DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/timeit-target) else() add_executable(timeit-target ${CMAKE_CURRENT_SOURCE_DIR}/timeit.c) + llvm_codesign(timeit-target) add_executable(build-timeit-target ALIAS timeit-target) llvm_add_host_executable(build-timeit timeit timeit.c) endif() |