Skip to content

Commit

Permalink
Merge pull request #2512 from nasa/integration-candidate
Browse files Browse the repository at this point in the history
cFE Integration candidate: Equuleus-rc1+dev4
  • Loading branch information
dzbaker authored Feb 2, 2024
2 parents 3e32c9d + 713aa65 commit 8cdad66
Show file tree
Hide file tree
Showing 24 changed files with 336 additions and 727 deletions.
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

0 comments on commit 8cdad66

Please sign in to comment.