# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0

menu "POSIX signals"

config POSIX_REALTIME_SIGNALS
	bool "POSIX realtime signals [EXPERIMENTAL]"
	select EXPERIMENTAL
	help
	  Enable support for POSIX realtime signals.

if POSIX_REALTIME_SIGNALS

config POSIX_RTSIG_MAX
	int "Maximum number of realtime signals"
	default 8
	help
	  Define the maximum number of realtime signals (RTSIG_MAX).
	  The range of realtime signals is [SIGRTMIN .. (SIGRTMIN+RTSIG_MAX)]

endif # POSIX_REALTIME_SIGNALS

config POSIX_SIGNALS
	bool "POSIX signals [EXPERIMENTAL]"
	select EXPERIMENTAL
	select POSIX_MULTI_PROCESS
	help
	  Enable support for POSIX signals.

if POSIX_SIGNALS

config POSIX_SIGNAL_STRING_DESC
	bool "Use full description for the strsignal API"
	default y
	help
	  Use full description for the strsignal API.
	  Will use 256 bytes of ROM.

# These options are intended to be used for compatibility with external POSIX
# implementations such as those in Newlib or Picolibc.

config POSIX_SIGNALS_ALIAS_KILL
	bool

endif

endmenu # "Signal support"
