diff --git a/cmake/BSP.cmake b/cmake/BSP.cmake index ecc3222..5adb01b 100644 --- a/cmake/BSP.cmake +++ b/cmake/BSP.cmake @@ -9,6 +9,36 @@ function(bsp_reset) 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) + function(bsp_add_library) set(options) set(one_value_args NAME HEADER_DIR LIB_DIR) @@ -70,6 +100,40 @@ function(bsp_add_program) 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) + 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} $ + COMMAND ${Python_EXECUTABLE} ${bsp_tool} + add-binary ${bsp_manifest} ${target_name}-cfg + ${arg_SVC_DIR} ${cfg_file} + 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) + function(bsp_finalise) set(options) set(one_value_args BOOTSTRAP_PROGRAM DEST_DIR BSP_NAME) diff --git a/cmake/Sysroot.cmake b/cmake/Sysroot.cmake index 5aa01cb..5cbabe3 100644 --- a/cmake/Sysroot.cmake +++ b/cmake/Sysroot.cmake @@ -155,6 +155,40 @@ function(sysroot_add_program) set_property(GLOBAL PROPERTY sysroot_target_list ${sysroot_targets} ${sysroot_target_name}) endfunction(sysroot_add_program) +function(sysroot_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(sysroot_target_name _sysroot-${target_name}) + + get_property(sysroot_targets GLOBAL PROPERTY sysroot_target_list) + get_property(cfg_file TARGET ${arg_NAME} PROPERTY service_cfg_path) + 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} $ + COMMAND ${Python_EXECUTABLE} ${sysroot_tool} + add-binary ${sysroot_manifest} ${target_name}-cfg + ${arg_SVC_DIR} ${cfg_file} + 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_service) + function(sysroot_add_file) set(options) set(one_value_args ID SRC_PATH DEST_DIR) diff --git a/cmake/Templates.cmake b/cmake/Templates.cmake index f2dfe4a..d6d7c40 100644 --- a/cmake/Templates.cmake +++ b/cmake/Templates.cmake @@ -32,6 +32,29 @@ function(rosetta_add_executable) DESTINATION ${arg_SYSROOT_PATH}) endfunction(rosetta_add_executable) +function(rosetta_add_service) + set(options) + set(one_value_args NAME CFG_FILE) + set(multi_value_args SOURCES) + cmake_parse_arguments(PARSE_ARGV 0 arg + "${options}" + "${one_value_args}" + "${multi_value_args}") + + set(exec_name ${arg_NAME}) + get_property(programs GLOBAL PROPERTY rosetta_program_list) + set_property(GLOBAL PROPERTY rosetta_program_list ${programs} ${exec_name}) + + message(STATUS "Building service ${exec_name}") + add_executable(${exec_name} ${arg_SOURCES}) + + set_target_properties(${exec_name} PROPERTIES + POSITION_INDEPENDENT_CODE ON + service_cfg_path ${arg_CFG_FILE}) + install(TARGETS ${exec_name} + DESTINATION ${arg_SYSROOT_PATH}) +endfunction(rosetta_add_service) + function(rosetta_add_library) set(options STATIC SHARED) set(one_value_args NAME)