Files
rosetta/cmake/BSP.cmake
T

180 lines
5.4 KiB
CMake
Raw Normal View History

2026-02-05 09:54:46 +00:00
find_package(Python COMPONENTS Interpreter)
set(bsp_manifest ${CMAKE_CURRENT_BINARY_DIR}/bsp-manifest.json)
set(bsp_tool ${CMAKE_SOURCE_DIR}/util/bsp-tool.py)
function(bsp_reset)
execute_process(
COMMAND ${Python_EXECUTABLE} ${bsp_tool} reset ${bsp_manifest}
COMMAND_ERROR_IS_FATAL ANY)
endfunction(bsp_reset)
function(bsp_add_file)
set(options)
set(one_value_args ID SRC_PATH DEST_DIR)
set(multi_value_args)
cmake_parse_arguments(PARSE_ARGV 0 arg
"${options}"
"${one_value_args}"
"${multi_value_args}")
set(target_name ${arg_ID})
set(bsp_target_name _bsp-${target_name})
get_property(bsp_targets GLOBAL PROPERTY bsp_target_list)
list(LENGTH bsp_targets nr_bsp_targets)
if (${nr_bsp_targets} GREATER 0)
math(EXPR serialiser_index "${nr_bsp_targets}-1")
list(GET bsp_targets ${serialiser_index} serialiser)
endif ()
add_custom_target(${bsp_target_name}
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
add-binary ${bsp_manifest} ${target_name}
${arg_DEST_DIR} ${arg_SRC_PATH}
COMMENT "Preparing bsp component: ${target_name}"
DEPENDS ${arg_SRC_PATH} ${serialiser})
set_property(GLOBAL PROPERTY bsp_target_list ${bsp_targets} ${bsp_target_name})
endfunction(bsp_add_file)
2026-02-05 09:54:46 +00:00
function(bsp_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(bsp_target_name _bsp-${target_name})
meta_target_get_header_directories(TARGET ${target_name} OUT header_dirs)
get_property(bsp_targets GLOBAL PROPERTY bsp_target_list)
list(LENGTH bsp_targets nr_bsp_targets)
if (${nr_bsp_targets} GREATER 0)
math(EXPR serialiser_index "${nr_bsp_targets}-1")
list(GET bsp_targets ${serialiser_index} serialiser)
endif ()
add_custom_target(${bsp_target_name}
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
add-binary ${bsp_manifest} ${target_name}
${arg_LIB_DIR} $<TARGET_FILE:${target_name}>
COMMENT "Preparing bsp component: ${target_name}"
DEPENDS ${target_name} ${serialiser})
set_property(GLOBAL PROPERTY bsp_target_list ${bsp_targets} ${bsp_target_name})
endfunction(bsp_add_library)
function(bsp_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(bsp_target_name _bsp-${target_name})
get_property(bsp_targets GLOBAL PROPERTY bsp_target_list)
list(LENGTH bsp_targets nr_bsp_targets)
if (${nr_bsp_targets} GREATER 0)
math(EXPR serialiser_index "${nr_bsp_targets}-1")
list(GET bsp_targets ${serialiser_index} serialiser)
endif ()
add_custom_target(${bsp_target_name}
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
add-binary ${bsp_manifest} ${target_name}
${arg_BIN_DIR} $<TARGET_FILE:${target_name}>
COMMENT "Preparing bsp component: ${target_name}"
DEPENDS ${target_name} ${serialiser})
set_property(GLOBAL PROPERTY bsp_target_list ${bsp_targets} ${bsp_target_name})
endfunction(bsp_add_program)
function(bsp_add_service)
set(options)
set(one_value_args NAME BIN_DIR SVC_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(bsp_target_name _bsp-${target_name})
get_property(bsp_targets GLOBAL PROPERTY bsp_target_list)
get_property(cfg_file TARGET ${arg_NAME} PROPERTY service_cfg_path)
get_property(file_list TARGET ${arg_NAME} PROPERTY service_file_list)
get_property(target_type TARGET ${arg_NAME} PROPERTY TYPE)
list(LENGTH bsp_targets nr_bsp_targets)
list(LENGTH file_list nr_service_files)
if (${nr_bsp_targets} GREATER 0)
math(EXPR serialiser_index "${nr_bsp_targets}-1")
list(GET bsp_targets ${serialiser_index} serialiser)
endif ()
set(commands
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
add-binary ${bsp_manifest} ${target_name}-cfg
${arg_SVC_DIR} ${cfg_file})
if (target_type STREQUAL "EXECUTABLE")
set(commands ${commands}
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
add-binary ${bsp_manifest} ${target_name}
${arg_BIN_DIR} $<TARGET_FILE:${target_name}>)
endif ()
if (nr_service_files GREATER 0)
math(EXPR nr_service_files "${nr_service_files}-1")
foreach (i RANGE 0 ${nr_service_files} 2)
math(EXPR i2 "${i}+1")
list(GET file_list ${i} src_file)
list(GET file_list ${i2} dest_dir)
set(commands ${commands}
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
add-binary ${bsp_manifest} ${target_name}-${i}
${dest_dir} ${src_file})
endforeach (i)
endif ()
add_custom_target(${bsp_target_name}
${commands}
COMMENT "Preparing bsp component: ${target_name}"
DEPENDS ${target_name} ${serialiser})
set_property(GLOBAL PROPERTY bsp_target_list ${bsp_targets} ${bsp_target_name})
endfunction(bsp_add_service)
2026-02-05 09:54:46 +00:00
function(bsp_finalise)
set(options)
set(one_value_args BOOTSTRAP_PROGRAM DEST_DIR BSP_NAME)
2026-02-05 09:54:46 +00:00
set(multi_value_args)
cmake_parse_arguments(PARSE_ARGV 0 arg
"${options}"
"${one_value_args}"
"${multi_value_args}")
set(bsp_output_path ${arg_DEST_DIR}/${arg_BSP_NAME})
2026-02-05 09:54:46 +00:00
get_property(bsp_targets GLOBAL PROPERTY bsp_target_list)
add_custom_target(bsp
2026-02-05 09:54:46 +00:00
COMMAND ${Python_EXECUTABLE} ${bsp_tool}
build-bsp ${bsp_manifest}
$<TARGET_FILE:${arg_BOOTSTRAP_PROGRAM}> ${bsp_output_path}
DEPENDS ${bsp_targets} ${arg_BOOTSTRAP_PROGRAM}
2026-02-05 09:54:46 +00:00
COMMENT "Building bsp: ${arg_BSP_NAME}")
endfunction(bsp_finalise)