Files
rosetta/cmake/Sysroot.cmake
2026-02-05 09:54:46 +00:00

116 lines
3.8 KiB
CMake

find_package(Python COMPONENTS Interpreter)
set(sysroot_manifest ${CMAKE_CURRENT_BINARY_DIR}/sysroot-manifest.json)
set(sysroot_tool ${CMAKE_SOURCE_DIR}/util/sysroot-tool.py)
function(sysroot_reset)
execute_process(
COMMAND ${Python_EXECUTABLE} ${sysroot_tool} reset ${sysroot_manifest}
COMMAND_ERROR_IS_FATAL ANY)
endfunction(sysroot_reset)
function(sysroot_add_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 ()
add_custom_target(${sysroot_target_name}
COMMAND ${Python_EXECUTABLE} ${sysroot_tool}
add-binary ${sysroot_manifest} ${target_name}
${arg_LIB_DIR} $<TARGET_FILE:${target_name}>
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})
set_property(GLOBAL PROPERTY sysroot_target_list ${sysroot_targets} ${sysroot_target_name})
endfunction(sysroot_add_library)
function(sysroot_add_program)
set(options)
set(one_value_args NAME BIN_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})
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 ()
add_custom_target(${sysroot_target_name}
COMMAND ${Python_EXECUTABLE} ${sysroot_tool}
add-binary ${sysroot_manifest} ${target_name}
${arg_BIN_DIR} $<TARGET_FILE:${target_name}>
COMMENT "Preparing sysroot component: ${target_name}"
DEPENDS ${target_name} ${serialiser})
set_property(GLOBAL PROPERTY sysroot_target_list ${sysroot_targets} ${sysroot_target_name})
endfunction(sysroot_add_program)
function(sysroot_add_file)
set(options)
set(one_value_args ID SRC_PATH DEST_DIR)
set(multi_value_args DEPENDS)
cmake_parse_arguments(PARSE_ARGV 0 arg
"${options}"
"${one_value_args}"
"${multi_value_args}")
set(src_path ${arg_SRC_PATH})
set(dest_dir ${arg_DEST_DIR})
set(sysroot_target_name _sysroot-${arg_ID})
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 ()
add_custom_target(${sysroot_target_name}
COMMAND ${Python_EXECUTABLE} ${sysroot_tool}
add-binary ${sysroot_manifest} ${arg_ID}
${dest_dir} ${src_path}
COMMENT "Preparing sysroot component: ${arg_ID}"
DEPENDS ${target_name} ${serialiser} ${arg_DEPENDS})
set_property(GLOBAL PROPERTY sysroot_target_list ${sysroot_targets} ${sysroot_target_name})
endfunction(sysroot_add_file)
function(sysroot_finalise)
get_property(sysroot_targets GLOBAL PROPERTY sysroot_target_list)
add_custom_target(sysroot
COMMAND ${Python_EXECUTABLE} ${sysroot_tool}
build-sysroot ${sysroot_manifest} ${CMAKE_BINARY_DIR}/sysroot
DEPENDS ${sysroot_targets}
COMMENT "Building sysroot...")
endfunction(sysroot_finalise)