From 2e6d7df38ce2d3c8964cb86389e8d86d14f1e2c4 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Thu, 19 Feb 2026 19:24:20 +0000 Subject: [PATCH] cmake: sysroot: add support for object and binary-only libraries --- cmake/Sysroot.cmake | 73 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 9 deletions(-) diff --git a/cmake/Sysroot.cmake b/cmake/Sysroot.cmake index 9cb2d52..80d9f65 100644 --- a/cmake/Sysroot.cmake +++ b/cmake/Sysroot.cmake @@ -30,19 +30,74 @@ function(sysroot_add_library) list(GET sysroot_targets ${serialiser_index} serialiser) endif () - add_custom_target(${sysroot_target_name} - COMMAND ${Python_EXECUTABLE} ${sysroot_tool} - add-binary ${sysroot_manifest} ${target_name} - ${arg_LIB_DIR} $ - COMMAND ${Python_EXECUTABLE} ${sysroot_tool} - add-headers ${sysroot_manifest} ${target_name} - ${arg_HEADER_DIR} ${header_dirs} - COMMENT "Preparing sysroot component: ${target_name}" - DEPENDS ${target_name} ${serialiser}) + if (arg_HEADER_DIR) + add_custom_target(${sysroot_target_name} + COMMAND ${Python_EXECUTABLE} ${sysroot_tool} + add-binary ${sysroot_manifest} ${target_name} + ${arg_LIB_DIR} $ + COMMAND ${Python_EXECUTABLE} ${sysroot_tool} + add-headers ${sysroot_manifest} ${target_name} + ${arg_HEADER_DIR} ${header_dirs} + COMMENT "Preparing sysroot component: ${target_name}" + DEPENDS ${target_name} ${serialiser}) + else() + add_custom_target(${sysroot_target_name} + COMMAND ${Python_EXECUTABLE} ${sysroot_tool} + add-binary ${sysroot_manifest} ${target_name} + ${arg_LIB_DIR} $ + COMMENT "Preparing sysroot component: ${target_name}" + DEPENDS ${target_name} ${serialiser}) + endif () set_property(GLOBAL PROPERTY sysroot_target_list ${sysroot_targets} ${sysroot_target_name}) endfunction(sysroot_add_library) +function(sysroot_add_object_library) + set(options) + set(one_value_args NAME HEADER_DIR LIB_DIR) + set(multi_value_args) + + cmake_parse_arguments(PARSE_ARGV 0 arg + "${options}" + "${one_value_args}" + "${multi_value_args}") + + set(target_name ${arg_NAME}) + set(sysroot_target_name _sysroot-${target_name}) + meta_target_get_header_directories(TARGET ${target_name} OUT header_dirs) + + get_property(sysroot_targets GLOBAL PROPERTY sysroot_target_list) + list(LENGTH sysroot_targets nr_sysroot_targets) + if (${nr_sysroot_targets} GREATER 0) + math(EXPR serialiser_index "${nr_sysroot_targets}-1") + list(GET sysroot_targets ${serialiser_index} serialiser) + endif () + + if (arg_HEADER_DIR) + add_custom_target(${sysroot_target_name} + COMMAND ${Python_EXECUTABLE} ${sysroot_tool} + add-binary ${sysroot_manifest} ${target_name} + ${arg_LIB_DIR} $ + COMMAND ${Python_EXECUTABLE} ${sysroot_tool} + add-headers ${sysroot_manifest} ${target_name} + ${arg_HEADER_DIR} ${header_dirs} + COMMENT "Preparing sysroot component: ${target_name}" + DEPENDS ${target_name} ${serialiser}) + else() + add_custom_target(${sysroot_target_name} + COMMAND ${Python_EXECUTABLE} ${sysroot_tool} + add-binary ${sysroot_manifest} ${target_name} + ${arg_LIB_DIR} $ + COMMENT "Preparing sysroot component: ${target_name}" + DEPENDS ${target_name} ${serialiser}) + endif () + + get_property(tmp TARGET ${target_name} PROPERTY SUFFIX) + message(STATUS ${tmp}) + + set_property(GLOBAL PROPERTY sysroot_target_list ${sysroot_targets} ${sysroot_target_name}) +endfunction(sysroot_add_object_library) + function(sysroot_add_program) set(options) set(one_value_args NAME BIN_DIR)