CMake: fixes for xcodebuild

This commit is contained in:
Carles Fernandez
2026-05-10 11:21:39 +02:00
parent b382866536
commit 32cd10620f
4 changed files with 101 additions and 13 deletions
+12
View File
@@ -137,6 +137,11 @@ if(ENABLE_PACKAGING)
set(ENABLE_STRIP OFF)
endif()
option(ENABLE_GNSSSDR_ADHOC_CODESIGN
"Ad-hoc sign local Darwin build-tree executables that must run after the build."
ON
)
# Testing
option(ENABLE_UNIT_TESTING "Build unit tests" ON)
@@ -275,6 +280,12 @@ endif()
if(NOT ("${CMAKE_BUILD_TYPE}" STREQUAL "Release"))
set(ENABLE_STRIP OFF)
endif()
if("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
find_program(CODESIGN_EXECUTABLE codesign)
endif()
if(NOT CODESIGN_EXECUTABLE)
set(ENABLE_GNSSSDR_ADHOC_CODESIGN OFF)
endif()
# Enable optimization options in GCC for Release and RelWithDebInfo build types
if((${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
@@ -3417,6 +3428,7 @@ add_feature_info(ENABLE_INSTALL_TESTS ENABLE_INSTALL_TESTS "Install test binarie
add_feature_info(ENABLE_BENCHMARKS ENABLE_BENCHMARKS "Enables building of code snippet benchmarks.")
add_feature_info(ENABLE_EXTERNAL_MATHJAX ENABLE_EXTERNAL_MATHJAX "Use MathJax from an external CDN in HTML docs when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME} doc'.")
add_feature_info(ENABLE_CPUFEATURES ENABLE_CPUFEATURES "Make use of the cpu_features library.")
add_feature_info(ENABLE_GNSSSDR_ADHOC_CODESIGN ENABLE_GNSSSDR_ADHOC_CODESIGN "Ad-hoc sign local Darwin build-tree executables that must run after the build.")
add_feature_info(Boost_USE_STATIC_LIBS Boost_USE_STATIC_LIBS "Use Boost static libraries.")
message(STATUS "")
+18
View File
@@ -175,6 +175,24 @@ ExternalProject_Add(protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}
INSTALL_COMMAND ""
)
if("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
find_program(CODESIGN_EXECUTABLE codesign)
if(CODESIGN_EXECUTABLE)
ExternalProject_Add_Step(
protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}
codesign_protoc
COMMAND ${CODESIGN_EXECUTABLE}
--force
--sign -
${PROTOBUF_PROTOC_EXECUTABLE_}
DEPENDEES build
COMMENT "Ad-hoc signing bundled protoc executable"
VERBATIM
)
endif()
endif()
file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/include)
file(MAKE_DIRECTORY ${GNSSSDR_BINARY_DIR}/protobuf-${GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION}/${CMAKE_INSTALL_LIBDIR})
+28 -4
View File
@@ -88,10 +88,34 @@ if(ENABLE_CLANG_TIDY)
endif()
endif()
add_custom_command(TARGET gnss-sdr
POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:gnss-sdr>
${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:gnss-sdr>
)
if(ENABLE_GNSSSDR_ADHOC_CODESIGN)
add_custom_command(TARGET gnss-sdr POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
${LOCAL_INSTALL_BASE_DIR}/install
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:gnss-sdr>
${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:gnss-sdr>.tmp
COMMAND ${CODESIGN_EXECUTABLE}
--force
--sign -
${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:gnss-sdr>.tmp
COMMAND ${CMAKE_COMMAND} -E remove -f
${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:gnss-sdr>
COMMAND ${CMAKE_COMMAND} -E rename
${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:gnss-sdr>.tmp
${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:gnss-sdr>
VERBATIM
)
else()
add_custom_command(TARGET gnss-sdr POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
${LOCAL_INSTALL_BASE_DIR}/install
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:gnss-sdr>
${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:gnss-sdr>
VERBATIM
)
endif()
install(TARGETS gnss-sdr
RUNTIME DESTINATION bin
+43 -9
View File
@@ -15,6 +15,43 @@ if(CMAKE_VERSION VERSION_LESS "3.5")
include(CMakeParseArguments)
endif()
function(gnsssdr_copy_target_to_local_install target)
if(NOT TARGET ${target})
message(FATAL_ERROR
"gnsssdr_copy_target_to_local_install called for unknown target: ${target}"
)
endif()
if(ENABLE_GNSSSDR_ADHOC_CODESIGN)
add_custom_command(TARGET ${target} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
${LOCAL_INSTALL_BASE_DIR}/install
COMMAND ${CMAKE_COMMAND} -E copy
"$<TARGET_FILE:${target}>"
"${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:${target}>.tmp"
COMMAND ${CODESIGN_EXECUTABLE}
--force
--sign -
"${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:${target}>.tmp"
COMMAND ${CMAKE_COMMAND} -E remove -f
"${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:${target}>"
COMMAND ${CMAKE_COMMAND} -E rename
"${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:${target}>.tmp"
"${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:${target}>"
VERBATIM
)
else()
add_custom_command(TARGET ${target} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
${LOCAL_INSTALL_BASE_DIR}/install
COMMAND ${CMAKE_COMMAND} -E copy
"$<TARGET_FILE:${target}>"
"${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:${target}>"
VERBATIM
)
endif()
endfunction()
# Helper to fetch optional test data with integrity checking and optional uncompressing
#
# Arguments:
@@ -711,10 +748,7 @@ if(ENABLE_UNIT_TESTING)
endif()
install(TARGETS run_tests RUNTIME DESTINATION bin COMPONENT "run_tests")
else()
add_custom_command(TARGET run_tests POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:run_tests>
${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:run_tests>
)
gnsssdr_copy_target_to_local_install(run_tests)
endif()
if(ENABLE_GPERFTOOLS)
if(GPERFTOOLS_FOUND)
@@ -882,12 +916,12 @@ function(add_system_test executable)
if(EXISTS ${LOCAL_INSTALL_BASE_DIR}/install/${executable})
file(REMOVE ${LOCAL_INSTALL_BASE_DIR}/install/${executable})
endif()
install(TARGETS ${executable} RUNTIME DESTINATION bin COMPONENT "${executable}_test")
else()
add_custom_command(TARGET ${executable} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${executable}>
${LOCAL_INSTALL_BASE_DIR}/install/$<TARGET_FILE_NAME:${executable}>
install(TARGETS ${executable}
RUNTIME DESTINATION bin
COMPONENT "${executable}_test"
)
else()
gnsssdr_copy_target_to_local_install(${executable})
endif()
xcode_remove_warning_duplicates(${executable})