96 lines
2.9 KiB
CMake
96 lines
2.9 KiB
CMake
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} $<TARGET_FILE:${target_name}>
|
|
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} $<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_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)
|