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_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} $ COMMAND ${Python_EXECUTABLE} ${bsp_tool} add-headers ${bsp_manifest} ${target_name} ${arg_HEADER_DIR} ${header_dirs} 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} $ 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_finalise) set(options) set(one_value_args BSP_NAME) set(multi_value_args) cmake_parse_arguments(PARSE_ARGV 0 arg "${options}" "${one_value_args}" "${multi_value_args}") set(bsp_output_path ${CMAKE_CURRENT_BINARY_DIR}/${arg_BSP_NAME}) get_property(bsp_targets GLOBAL PROPERTY bsp_target_list) add_custom_command(OUTPUT ${bsp_output_path} COMMAND ${Python_EXECUTABLE} ${bsp_tool} build-bsp ${bsp_manifest} ${bsp_output_path} DEPENDS ${bsp_targets} COMMENT "Building bsp: ${arg_BSP_NAME}") add_custom_target(bsp DEPENDS ${bsp_output_path}) endfunction(bsp_finalise)