Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cFE Integration candidate: Equuleus-rc1+dev4 #2512

Merged
merged 5 commits into from
Feb 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog

## Development Build: equuleus-rc1+dev90
- EDS XML file updates
- add EDS cmake hooks
- See <https://github.com/nasa/cFE/pull/2510> and <https://github.com/nasa/cFE/pull/2511>

## Development Build: equuleus-rc1+dev84
- CFE updates needed for generated header compatibility (EDS)
- See <https://github.com/nasa/cFE/pull/2505>
Expand Down
16 changes: 15 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,21 @@ project(CFE C)
# Allow unit tests to be added by any recipe
enable_testing()

# This switch determines whether to use EDS framework
# By default it is set OFF/false as this is a new/experimental feature.
option(CFE_EDS_ENABLED_BUILD "Use EDS framework" OFF)

# Always create directories to hold generated files/wrappers
# EDS makes signficant use of generated files. In non-EDS builds
# some headers and wrapper files are also generated. Directories
# may simply remain empty if not used/needed in the current config.
file(MAKE_DIRECTORY
"${CMAKE_BINARY_DIR}/eds"
"${CMAKE_BINARY_DIR}/obj"
"${CMAKE_BINARY_DIR}/inc"
"${CMAKE_BINARY_DIR}/src"
)

# Include the global routines
include("cmake/global_functions.cmake")

Expand Down Expand Up @@ -123,4 +138,3 @@ prepare()
foreach(SYSVAR ${TGTSYS_LIST})
process_arch(${SYSVAR})
endforeach(SYSVAR ${TGTSYS_LIST})

11 changes: 11 additions & 0 deletions cmake/arch_build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,17 @@ function(add_cfe_app APP_NAME APP_SRC_FILES)
add_library(${APP_NAME} ${APPTYPE} ${APP_SRC_FILES} ${ARGN})
target_link_libraries(${APP_NAME} core_api)

# If using "local" EDS linkage, then link the app with the EDS library here.
# Note that the linker will only pull in the compilation unit that actually
# resolves an undefined symbol, which in this case would be the app-specific
# DATATYPE_DB object if one is referenced at all.
#
# By linking with the respective application like this, the net result is that
# only the _referenced_ EDS DBs (i.e. those for loaded apps) are held in memory.
if (CFE_EDS_ENABLED_BUILD AND CFE_EDS_LINK_MODE STREQUAL LOCAL)
target_link_libraries($(APP_NAME) cfe_edsdb_static)
endif()

# An "install" step is only needed for dynamic/runtime loaded apps
if (APP_DYNAMIC_TARGET_LIST)
cfs_app_do_install(${APP_NAME} ${APP_DYNAMIC_TARGET_LIST})
Expand Down
16 changes: 15 additions & 1 deletion cmake/global_functions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,20 @@

include(CMakeParseArguments)

# This is done here at the global level so this definition is used for
# ALL code on ALL targets, including host-side tools. Ideally, this should
# only be necessary on the core_api interface, but it does not fully propagate
# to all unit test targets. If/when that issue is resolved, this can be removed.
if (CFE_EDS_ENABLED_BUILD)

# Propagate the setting to a C preprocessor define of the same name
# The CFE_EDS_ENABLED_BUILD switch indicates that any
# compile-time preprocessor blocks should be enabled in this build
add_definitions(-DCFE_EDS_ENABLED_BUILD)

endif(CFE_EDS_ENABLED_BUILD)


##################################################################
#
# FUNCTION: cfe_locate_implementation_file
Expand Down Expand Up @@ -58,7 +72,7 @@ function(cfe_locate_implementation_file OUTPUT_VAR FILE_NAME)
string(REPLACE ${MISSION_SOURCE_DIR} "" RELATIVEDIR ${BASEDIR})

# A target-specific prefixed filename gets priority over a direct filename match
# But do not include this variant if the prefix is already part of the relative search path
# But do not include this variant if the prefix is already part of the relative search path
foreach (PREFIX ${LOCATEIMPL_ARG_PREFIX})
if (NOT "${RELATIVEDIR}" MATCHES "/${PREFIX}/")
list(APPEND IMPL_SEARCH_PATH "${BASEDIR}${PREFIX}_${FILE_NAME}")
Expand Down
9 changes: 2 additions & 7 deletions cmake/mission_build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -293,12 +293,6 @@ function(prepare)
add_definitions(-DSIMULATION=${SIMULATION})
endif (SIMULATION)

# Create directories to hold generated files/wrappers
file(MAKE_DIRECTORY "${MISSION_BINARY_DIR}/eds")
file(MAKE_DIRECTORY "${MISSION_BINARY_DIR}/obj")
file(MAKE_DIRECTORY "${MISSION_BINARY_DIR}/inc")
file(MAKE_DIRECTORY "${MISSION_BINARY_DIR}/src")

# Certain runtime variables need to be "exported" to the subordinate build, such as
# the specific arch settings and the location of all the apps. This list is collected
# during this function execution and exported at the end.
Expand Down Expand Up @@ -548,7 +542,7 @@ function(process_arch TARGETSYSTEM)
# convert to a string which is safe for a directory name
string(REGEX REPLACE "[^A-Za-z0-9]" "_" ARCH_CONFIG_NAME "${BUILD_CONFIG}")
set(ARCH_BINARY_DIR "${CMAKE_BINARY_DIR}/${ARCH_TOOLCHAIN_NAME}/${ARCH_CONFIG_NAME}")
file(MAKE_DIRECTORY "${ARCH_BINARY_DIR}" "${ARCH_BINARY_DIR}/inc")
file(MAKE_DIRECTORY "${ARCH_BINARY_DIR}")

message(STATUS "Configuring for system arch: ${ARCH_TOOLCHAIN_NAME}/${ARCH_CONFIG_NAME}")

Expand Down Expand Up @@ -578,6 +572,7 @@ function(process_arch TARGETSYSTEM)
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=${CMAKE_EXPORT_COMPILE_COMMANDS}
-DCFE_EDS_ENABLED_BUILD:BOOL=${CFE_EDS_ENABLED_BUILD}
${SELECTED_TOOLCHAIN_FILE}
${CFE_SOURCE_DIR}
WORKING_DIRECTORY
Expand Down
35 changes: 35 additions & 0 deletions cmake/mission_defaults.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,41 @@ set(MISSION_MODULE_SEARCH_PATH
set(osal_SEARCH_PATH ".")
set(psp_SEARCH_PATH ".")

# Account for differences when EDS is enabled
if(CFE_EDS_ENABLED_BUILD)

# The EDS database is an object (or set of objects) generated by the tools from the EDS files.
# This can be linked into CFE either as a whole (GLOBAL) or as part of each app (LOCAL).
#
# LOCAL mode may use less memory by only only including DB objects for the apps that are
# originating or terminating CFS message traffic, but GLOBAL mode is simpler as it ensures
# that the entire DB is accessible by any app, even for data definitions that are not its own.
#
# NOTE: If running CI/TO, SBN, or other "generic" apps that relay SB traffic (or otherwise
# handle data that may not have originated on the same CFE instance) then it is recommended
# to stay with GLOBAL mode.
if (NOT DEFINED CFE_EDS_LINK_MODE)
set(CFE_EDS_LINK_MODE GLOBAL)
endif()

# The standard msg module is not used in EDS build, edslib provides an alternate
list(REMOVE_ITEM MISSION_CORE_MODULES msg)

list(APPEND MISSION_CORE_MODULES
"edslib"
"missionlib"
"edsmsg"
)

list(APPEND MISSION_MODULE_SEARCH_PATH
"tools/eds/cfecfs" # CFE/CFS modules and extensions from EdsLib
)

# edslib exists directly under tools/eds (EDS runtime libraries)
set(edslib_SEARCH_PATH "tools/eds")

endif(CFE_EDS_ENABLED_BUILD)

# Include "cfe_assert" library in all builds, because it is included
# in the default startup script. It should not have any effect if not
# used.
Expand Down
106 changes: 61 additions & 45 deletions cmake/sample_defs/eds/cfe-topicids.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,72 +46,88 @@
changes are made. Such changes would not be an issue if EDS were used across the board, but until that
milestone is met, this manually-specified approach offers more stability in distributed systems.
-->
<Define name="TELECOMMAND_NUM_TOPICIDS" value="60" />
<Define name="TELEMETRY_NUM_TOPICIDS" value="60" />
<Define name="TELECOMMAND_NUM_TOPICIDS" value="256" />
<Define name="TELEMETRY_NUM_TOPICIDS" value="256" />

<Define name="TELECOMMAND_BASE_TOPICID" value="1" />
<!-- GLOBAL Telemetry Topics - these are not specific to a CPU number -->
<Define name="GLOBAL_CMD_NUM_TOPICIDS" value="4" />
<Define name="GLOBAL_TLM_NUM_TOPICIDS" value="4" />

<Define name="GLOBAL_CMD_BASE_TOPICID" value="1" />
<Define name="GLOBAL_CMD_MAX_TOPICID" value="${CFE_MISSION/GLOBAL_CMD_BASE_TOPICID} + ${CFE_MISSION/GLOBAL_CMD_NUM_TOPICIDS}" />
<Define name="GLOBAL_TLM_BASE_TOPICID" value="${CFE_MISSION/GLOBAL_CMD_MAX_TOPICID}" />
<Define name="GLOBAL_TLM_MAX_TOPICID" value="${CFE_MISSION/GLOBAL_TLM_BASE_TOPICID} + ${CFE_MISSION/GLOBAL_TLM_NUM_TOPICIDS}" />

<Define name="TELECOMMAND_BASE_TOPICID" value="${CFE_MISSION/GLOBAL_TLM_MAX_TOPICID}" />
<Define name="TELECOMMAND_MAX_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + ${CFE_MISSION/TELECOMMAND_NUM_TOPICIDS}" />
<Define name="TELEMETRY_BASE_TOPICID" value="${CFE_MISSION/TELECOMMAND_MAX_TOPICID}" />
<Define name="TELEMETRY_MAX_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + ${CFE_MISSION/TELEMETRY_NUM_TOPICIDS}" />

<Define name="MAX_TOPICID" value="${CFE_MISSION/TELEMETRY_MAX_TOPICID}" />

<!-- CFE TIME is currently the only framework component that uses global IDs -->
<Define name="TIME_DATA_CMD_TOPICID" value="${CFE_MISSION/GLOBAL_CMD_BASE_TOPICID} + 0" />
<Define name="TIME_SEND_CMD_TOPICID" value="${CFE_MISSION/GLOBAL_CMD_BASE_TOPICID} + 2" />

<!-- Mission-specific mappings for CFE "topic IDs" -->
<!-- Executive Services (ES) Command Topics -->
<Define name="ES_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 0" />
<Define name="ES_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 1" />
<Define name="ES_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 6" />
<Define name="ES_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 8" />
<!-- Time Services (TIME) Command Topics -->
<Define name="TIME_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 2" />
<Define name="TIME_TONE_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 3" />
<Define name="TIME_ONEHZ_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 4" />
<Define name="TIME_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 5" />
<Define name="TIME_DATA_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 6" />
<Define name="TIME_FAKE_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 7" />
<Define name="TIME_SEND_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 8" />
<Define name="TIME_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 5" />
<Define name="TIME_TONE_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 16" />
<Define name="TIME_ONEHZ_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 17" />
<Define name="TIME_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 13" />
<!-- <Define name="TIME_FAKE_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 7" /> -->
<!-- Event Services (EVS) Command Topics -->
<Define name="EVS_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 9" />
<Define name="EVS_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 10" />
<Define name="EVS_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 1" />
<Define name="EVS_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 9" />
<!-- Software Bus (SB) Command Topics -->
<Define name="SB_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 11" />
<Define name="SB_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 12" />
<Define name="SB_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 3" />
<Define name="SB_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 11" />
<Define name="SB_SUB_RPT_CTRL_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 14" />
<!-- Table Services (TBL) Command Topics -->
<Define name="TBL_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 13" />
<Define name="TBL_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 14" />

<Define name="CI_LAB_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 15" />
<Define name="CI_LAB_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 16" />
<Define name="TO_LAB_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 17" />
<Define name="TO_LAB_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 18" />
<Define name="SAMPLE_APP_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 19" />
<Define name="SAMPLE_APP_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 20" />
<Define name="SB_SUB_RPT_CTRL_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 21" />
<Define name="TEST_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 22" />
<Define name="TBL_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 4" />
<Define name="TBL_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 12" />

<Define name="TEST_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 2" />

<Define name="TO_LAB_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 128" />
<Define name="TO_LAB_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 129" />
<Define name="SAMPLE_APP_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 130" />
<Define name="SAMPLE_APP_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 131" />
<Define name="CI_LAB_CMD_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 132" />
<Define name="CI_LAB_SEND_HK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 133" />
<Define name="CI_LAB_READ_UPLINK_TOPICID" value="${CFE_MISSION/TELECOMMAND_BASE_TOPICID} + 134" />


<!-- Executive Services (ES) Telemetry Topics -->
<Define name="ES_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 0" />
<Define name="ES_APP_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 1" />
<Define name="ES_APP_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 11" />
<Define name="ES_SHELL_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 2" />
<Define name="ES_MEMSTATS_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 3" />
<Define name="ES_MEMSTATS_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 16" />
<!-- Time Services (TIME) Telemetry Topics -->
<Define name="TIME_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 4" />
<Define name="TIME_DIAG_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 5" />
<Define name="TIME_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 5" />
<Define name="TIME_DIAG_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 6" />
<!-- Event Services (EVS) Telemetry Topics -->
<Define name="EVS_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 6" />
<Define name="EVS_SHORT_EVENT_MSG_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 7" />
<Define name="EVS_LONG_EVENT_MSG_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 8" />
<Define name="EVS_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 1" />
<Define name="EVS_SHORT_EVENT_MSG_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 8" />
<Define name="EVS_LONG_EVENT_MSG_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 9" />
<!-- Software Bus (SB) Telemetry Topics -->
<Define name="SB_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 9" />
<Define name="SB_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 3" />
<Define name="SB_STATS_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 10" />
<Define name="SB_ALLSUBS_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 11" />
<Define name="SB_ONESUB_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 12" />
<Define name="SB_ALLSUBS_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 13" />
<Define name="SB_ONESUB_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 14" />
<!-- Table Services (TBL) Telemetry Topics -->
<Define name="TBL_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 13" />
<Define name="TBL_REG_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 14" />

<Define name="CI_LAB_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 15" />
<Define name="TO_LAB_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 16" />
<Define name="TO_LAB_DATA_TYPES_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 17" />
<Define name="SAMPLE_APP_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 18" />
<Define name="TEST_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 19" />
<Define name="TBL_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 4" />
<Define name="TBL_REG_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 12" />

<Define name="TEST_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 2" />

<Define name="TO_LAB_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 128" />
<Define name="TO_LAB_DATA_TYPES_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 129" />
<Define name="SAMPLE_APP_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 131" />
<Define name="CI_LAB_HK_TLM_TOPICID" value="${CFE_MISSION/TELEMETRY_BASE_TOPICID} + 132" />

</Package>
</DesignParameters>
Loading
Loading