Files
cariflex/tools/EVerest-main/cmake/trailbook-ext-everest/generate-rst-from-interface.cmake
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

129 lines
4.7 KiB
CMake

# This macro is for internal use only
#
# It is used in the function trailbook_ev_generate_rst_from_interface().
# It adds an custom command to generate the RST file from the interface definition file
macro(_trailbook_ev_generate_rst_from_interface_generate_command)
get_filename_component(INTERFACE_NAME ${args_INTERFACE_FILE} NAME_WE)
set(GENERATED_FILE "${TRAILBOOK_EV_REFERENCE_INTERFACES_DIRECTORY}/${INTERFACE_NAME}.rst")
set(TEMPLATES_DIRECTORY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/templates")
add_custom_command(
OUTPUT
${GENERATED_FILE}
DEPENDS
trailbook_${args_TRAILBOOK_NAME}_stage_prepare_sphinx_source_after
${DEPS_STAGE_PREPARE_SPHINX_SOURCE_AFTER}
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/process_template.py
${args_INTERFACE_FILE}
${TEMPLATES_DIRECTORY}/interface.rst.jinja
${TEMPLATES_DIRECTORY}/macros.jinja
COMMENT
"Generating RST file ${GENERATED_FILE} from interface definition ${args_INTERFACE_FILE}"
COMMAND
${Python3_EXECUTABLE}
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/process_template.py
--template-dir "${TEMPLATES_DIRECTORY}"
--template-file "${TEMPLATES_DIRECTORY}/interface.rst.jinja"
--name "${INTERFACE_NAME}"
--data-file "${args_INTERFACE_FILE}"
--errors-yaml-path "${CMAKE_SOURCE_DIR}/errors/"
--target-file "${GENERATED_FILE}"
)
endmacro()
# This function generates an RST file from an interface definition file.
#
# Arguments:
# TRAILBOOK_NAME (required): Name of the trailbook instance.
# INTERFACE_FILE (required): Path to the interface definition file
# Usage:
# trailbook_ev_generate_rst_from_interface(
# TRAILBOOK_NAME <trailbook_name>
# INTERFACE_FILE <path_to_interface_definition_file>
# )
function(trailbook_ev_generate_rst_from_interface)
set(options)
set(one_value_args
TRAILBOOK_NAME
INTERFACE_FILE
)
set(multi_value_args)
cmake_parse_arguments(
"args"
"${options}"
"${one_value_args}"
"${multi_value_args}"
${ARGN}
)
# Parameter TRAILBOOK_NAME
# - is required
# - there should be a target named trailbook_<TRAILBOOK_NAME>
if(NOT args_TRAILBOOK_NAME)
message(FATAL_ERROR "trailbook_ext_ev_generate_rst_from_interface: TRAILBOOK_NAME argument is required")
endif()
if(NOT TARGET trailbook_${args_TRAILBOOK_NAME})
message(
FATAL_ERROR
"trailbook_ext_ev_generate_rst_from_interface: No target named trailbook_${args_TRAILBOOK_NAME} found."
" Did you forget to call add_trailbook() first?"
)
endif()
# Parameter INTERFACE_FILE
# - is required
# - must be a absolute path
# - must exist
if(NOT args_INTERFACE_FILE)
message(FATAL_ERROR "trailbook_ext_ev_generate_rst_from_interface: INTERFACE_FILE argument is required")
endif()
if(NOT IS_ABSOLUTE "${args_INTERFACE_FILE}")
message(FATAL_ERROR "trailbook_ext_ev_generate_rst_from_interface: INTERFACE_FILE must be an absolute path")
endif()
if(NOT EXISTS "${args_INTERFACE_FILE}")
message(FATAL_ERROR "trailbook_ext_ev_generate_rst_from_interface: INTERFACE_FILE must exist")
endif()
get_target_property(
TRAILBOOK_INSTANCE_SOURCE_DIRECTORY
trailbook_${args_TRAILBOOK_NAME}
TRAILBOOK_INSTANCE_SOURCE_DIRECTORY
)
get_target_property(
TRAILBOOK_CURRENT_BINARY_DIR
trailbook_${args_TRAILBOOK_NAME}
TRAILBOOK_CURRENT_BINARY_DIR
)
get_target_property(
DEPS_STAGE_PREPARE_SPHINX_SOURCE_AFTER
trailbook_${args_TRAILBOOK_NAME}
DEPS_STAGE_PREPARE_SPHINX_SOURCE_AFTER
)
set(TRAILBOOK_EV_REFERENCE_DIRECTORY "${TRAILBOOK_INSTANCE_SOURCE_DIRECTORY}/reference")
set(TRAILBOOK_EV_REFERENCE_INTERFACES_DIRECTORY "${TRAILBOOK_EV_REFERENCE_DIRECTORY}/interfaces")
_trailbook_ev_generate_rst_from_interface_generate_command()
add_custom_target(
trailbook_${args_TRAILBOOK_NAME}_generate_rst_from_interface_${INTERFACE_NAME}
DEPENDS
${GENERATED_FILE}
trailbook_${args_TRAILBOOK_NAME}_stage_prepare_sphinx_source_after
${DEPS_STAGE_PREPARE_SPHINX_SOURCE_AFTER}
COMMENT
"Target to generate RST file ${GENERATED_FILE} from interface definition ${args_INTERFACE_FILE}"
)
set_property(
TARGET
trailbook_${args_TRAILBOOK_NAME}
APPEND
PROPERTY
ADDITIONAL_DEPS_STAGE_BUILD_SPHINX_BEFORE
${GENERATED_FILE}
trailbook_${args_TRAILBOOK_NAME}_generate_rst_from_interface_${INTERFACE_NAME}
)
endfunction()