Skip to content

Commit

Permalink
Merge pull request #654 from jphickey/fix-652-osal-config
Browse files Browse the repository at this point in the history
Fix #652, cmake-based OSAL config
  • Loading branch information
jphickey committed Apr 29, 2020
2 parents 7566f2f + 8cafba7 commit a5b66c9
Show file tree
Hide file tree
Showing 3 changed files with 234 additions and 230 deletions.
18 changes: 12 additions & 6 deletions cmake/arch_build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -259,12 +259,18 @@ endfunction(cfs_app_do_install)
#
function(prepare)

# Generate the "osconfig.h" wrapper file as indicated by the configuration
# If specific system config options were not specified, use defaults
if (NOT OSAL_SYSTEM_OSCONFIG)
set(OSAL_SYSTEM_OSCONFIG default)
endif (NOT OSAL_SYSTEM_OSCONFIG)
generate_config_includefile("inc/osconfig.h" osconfig.h ${OSAL_SYSTEM_OSCONFIG} ${TARGETSYSTEM})
# Choose the configuration file to use for OSAL on this system
set(OSAL_CONFIGURATION_FILE)
if (EXISTS "${MISSION_DEFS}/default_osconfig.cmake")
list(APPEND OSAL_CONFIGURATION_FILE "${MISSION_DEFS}/default_osconfig.cmake")
endif()
if (DEFINED OSAL_SYSTEM_OSCONFIG AND EXISTS "${MISSION_DEFS}/${OSAL_SYSTEM_OSCONFIG}_osconfig.cmake")
list(APPEND OSAL_CONFIGURATION_FILE "${MISSION_DEFS}/${OSAL_SYSTEM_OSCONFIG}_osconfig.cmake")
endif()
if (EXISTS "${MISSION_DEFS}/${TARGETSYSTEM}_osconfig.cmake")
list(APPEND OSAL_CONFIGURATION_FILE "${MISSION_DEFS}/${TARGETSYSTEM}_osconfig.cmake")
endif()
set(OSAL_CONFIGURATION_FILE ${OSAL_CONFIGURATION_FILE} PARENT_SCOPE)

# Allow sources to "ifdef" certain things if running on simulated hardware
# This should be used sparingly, typically to fake access to hardware that is not present
Expand Down
222 changes: 222 additions & 0 deletions cmake/sample_defs/default_osconfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
#
#
# Copyright (c) 2020, United States government as represented by the
# administrator of the National Aeronautics Space Administration.
# All rights reserved. This software was created at NASA Goddard
# Space Flight Center pursuant to government contracts.
#
# This is governed by the NASA Open Source Agreement and may be used,
# distributed and modified only according to the terms of that agreement.
#
#

##########################################################################
#
# CFE configuration options for OSAL
#
# This file specifies the default values for various compile-time options
# supported by OSAL. These options can be further tuned by the specific
# OSAL and BSP selection, as well as the user application.
#
##########################################################################


##############################################################
# Code/Feature Selection Options for the OSAL implementation
##############################################################


# OSAL_CONFIG_INCLUDE_NETWORK
# ----------------------------------
#
# Whether to include the Network API
#
# If set TRUE, the the socket abstraction (if applicable on the platform)
# will be included. If set FALSE, then all calls to the network API will
# return OS_ERR_NOT_IMPLEMENTED.
#
# This can be set FALSE for platforms which do not have a network or
# IP stack available, or to save code space if the application does
# not use network resources.
#
set(OSAL_CONFIG_INCLUDE_NETWORK TRUE)


#
# OSAL_CONFIG_INCLUDE_DYNAMIC_LOADER
# ----------------------------------
#
# Whether to include the capability of loading dynamic code objects
#
# This is normally set TRUE to support modularized applications on
# platforms which have this capability.
#
# For deployments which are always statically linked, this may be set
# FALSE for a smaller library size and reduced linking requirements.
#
set(OSAL_CONFIG_INCLUDE_DYNAMIC_LOADER TRUE)


#
# OSAL_CONFIG_INCLUDE_STATIC_LOADER
# ----------------------------------
#
# Whether to include a compatibility "loader" for statically-linked objects
#
# This feature allows applications normally written for dynamic module loading
# operate transparently in a static link environment. If this is set TRUE,
# then the application must supply an object named "OS_STATIC_SYMBOL_TABLE" that
# contains the names and addresses of statically-linked symbols that should
# be known to the lookup/load functions.
#
# Note that modules "loaded" using this abstraction are still assigned a
# module ID and still require a slot in the module table even though
# no actual runtime loading is performed (see OSAL_CONFIG_MAX_MODULES).
#
set(OSAL_CONFIG_INCLUDE_STATIC_LOADER TRUE)

#
# OSAL_CONFIG_INCLUDE_SHELL
# ----------------------------------
#
# Whether to include features which utilize the operating system shell.
#
# Remote Shell commands can be very powerful tool for remotely diagnosing
# and mitigating runtime issues in the field, but also have significant
# security implications. If this is set to "false" then shell functionality
# is disabled and OSAL functions which invoke the shell will return
# OS_ERR_NOT_IMPLEMENTED.
#
set(OSAL_CONFIG_INCLUDE_SHELL FALSE)


#
# OSAL_CONFIG_DEBUG_PERMISSIVE_MODE
# ----------------------------------
#
# The OSAL_CONFIG_DEBUG_PERMISSIVE_MODE option controls how privileged operations
# are handled by the OSAL in the event that the user does not have sufficient permission.
# In particular this applies to task priorities and message queues.
#
# If set FALSE, then all permissions are enforced, and a failure due to lack of permission
# will cause a failure of the overall operation, which is passed back to the application.
#
# If set to TRUE, this will treat some errors non-fatal and enable a graceful fallback,
# allowing the overall operation to complete in a reduced form. This makes the
# OSAL library compatible with a non-root (normal user mode) environment.
#
# In the PC-Linux/Posix build, this means:
# - A message queue deeper than the maximum system limit will be silently truncated
# to the maximum system limit (no error).
# - If the user does not have permission to create elevated priority tasks, then the tasks will
# be created at the default priority (no error).
#
set(OSAL_CONFIG_DEBUG_PERMISSIVE_MODE TRUE)

#
# OSAL_CONFIG_DEBUG_PRINTF
# ----------------------------------
#
# Controls inclusion of OS_DEBUG statements in the code
#
# If set FALSE, all OS_DEBUG statements are compiled out.
#
# If set TRUE, all the "OS_DEBUG" statements will be compiled in and displayed
# on the debug console. The statements may still be suppressed at runtime.
#
set(OSAL_CONFIG_DEBUG_PRINTF TRUE)


#############################################
# Resource Limits for the OS API
#############################################

# The maximum number of concurrently-running tasks to support
set(OSAL_CONFIG_MAX_TASKS 64)

# The maximum number of queues to support
set(OSAL_CONFIG_MAX_QUEUES 64)

# The maximum number of counting semaphores to support
set(OSAL_CONFIG_MAX_COUNT_SEMAPHORES 20)

# The maximum number of binary semaphores to support
set(OSAL_CONFIG_MAX_BIN_SEMAPHORES 20)

# The maximum number of mutexes to support
set(OSAL_CONFIG_MAX_MUTEXES 20)

# The maximum number of loadable modules to support
# Note that emulating module loading for statically-linked objects also
# requires a slot in this table, as it still assigns an OSAL ID.
set(OSAL_CONFIG_MAX_MODULES 20)

# The maximum number of time base objects (reference for timers)
set(OSAL_CONFIG_MAX_TIMEBASES 5)

# The maximum number of user timers / app callbacks that can be registered
set(OSAL_CONFIG_MAX_TIMERS 10)

# The maximum number of concurrently open file descriptors to support
set(OSAL_CONFIG_MAX_NUM_OPEN_FILES 50)

# The maximum number of concurrently open directory descriptors to support
set(OSAL_CONFIG_MAX_NUM_OPEN_DIRS 4)

# The maximum number of file systems that can be managed by OSAL
set(OSAL_CONFIG_MAX_FILE_SYSTEMS 14)

# The maximum length for a file name, including any extension
# (This does not include the directory part)
# This length must include an extra character for NULL termination.
set(OSAL_CONFIG_MAX_FILE_NAME 20)

# Maximum length for an virtual path name (virtual directory + file)
# This length must include an extra character for NULL termination.
set(OSAL_CONFIG_MAX_PATH_LEN 64)

# Maximum length allowed for a object (task,queue....) name
# This length must include an extra character for NULL termination.
set(OSAL_CONFIG_MAX_API_NAME 20)

# Maximum length of a symbol name for OS_SymbolLookup()
# This length must include an extra character for NULL termination.
set(OSAL_CONFIG_MAX_SYM_LEN 64)

# Maximum length of a network socket address
# This is only relevant if network support is included, and the
# required length depends on the address families in use
set(OSAL_CONFIG_SOCKADDR_MAX_LEN 28)

# Maximum length of a single message produced by OS_printf()
set(OSAL_CONFIG_PRINTF_BUFFER_SIZE 172)

# Maximum number of OS_printf() messages that will be buffered
set(OSAL_CONFIG_PRINTF_BUFFER_DEPTH 100)

# Priority level of a console output helper task
#
# Set logically low (high number) to maximize performance.
# - Messages from OS_printf() may show on the console with some delay
# but should have minimal impact to real time tasks.
#
# Set logically high (low number) for debugging
# - Messages from OS_printf() will have more timely output, but may
# adversely impact real time tasks.
set(OSAL_CONFIG_UTILITYTASK_PRIORITY 245)

# Stack size of console output task.
#
# This applies to RTOS layers with precise stack control,
# normally not necessary to change this unless the task implementation
# changes.
set(OSAL_CONFIG_UTILITYTASK_STACK_SIZE 2048)

# The size of a command that can be passed to the underlying OS
# This length must include an extra character for NULL termination.
set(OSAL_CONFIG_MAX_CMD_LEN 1000)

# The maximum depth of an OSAL message queue.
# On some implementations this may affect the overall OSAL memory footprint
# so it may be beneficial to set this limit accordingly.
set(OSAL_CONFIG_QUEUE_MAX_DEPTH 50)
Loading

0 comments on commit a5b66c9

Please sign in to comment.