#
# Copyright (c) 2018 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

config	POSIX_MAX_FDS
	int "Maximum number of open file descriptors"
	default 16 if POSIX_API
	default 4
	help
	  Maximum number of open file descriptors, this includes
	  files, sockets, special devices, etc.

config POSIX_API
	depends on !ARCH_POSIX
	bool "POSIX APIs"
	help
	  Enable mostly-standards-compliant implementations of
	  various POSIX (IEEE 1003.1) APIs.

if POSIX_API

config PTHREAD_IPC
	bool "POSIX pthread IPC API"
	help
	  This enables a mostly-standards-compliant implementation of
	  the pthread mutex, condition variable and barrier IPC
	  mechanisms.

if PTHREAD_IPC
config MAX_PTHREAD_COUNT
	int "Maximum simultaneously active pthread count in POSIX application"
	default 5
	range 0 255
	help
	  Maximum number of simultaneously active threads in a POSIX application.

config SEM_VALUE_MAX
	int "Maximum semaphore limit"
	default 32767
	range 1 32767
	help
	  Maximum semaphore count in POSIX compliant Application.

endif # PTHREAD_IPC

config MAX_TIMER_COUNT
	int "Maximum timer count in POSIX application"
	default 5
	range 0 255
	help
	  Mention maximum number of timers in POSIX compliant application.

config POSIX_MQUEUE
	bool "Enable POSIX message queue"
	help
	  This enabled POSIX message queue related APIs.

if POSIX_MQUEUE
config	MSG_COUNT_MAX
	int "Maximum number of messages in message queue"
	default 16
	help
	  Mention maximum number of messages in message queue in POSIX compliant
	  application.

config	MSG_SIZE_MAX
	int "Maximum size of a message"
	default 16
	help
	  Mention maximum size of message in bytes.

config	MQUEUE_NAMELEN_MAX
	int "Maximum size of a name length"
	default 16
	range 2 255
	help
	  Mention length of message queue name in number of characters.

endif

if FILE_SYSTEM
config POSIX_FS
	bool "Enable POSIX file system API support"
	help
	  This enables POSIX style file system related APIs.

if POSIX_FS
config	POSIX_MAX_OPEN_FILES
	int "Maximum number of open file descriptors"
	default 16
	help
	  Maximum number of open files. Note that this setting
	  is additionally bounded by CONFIG_POSIX_MAX_FDS.
endif
endif # FILE_SYSTEM

# The name of this option is mandated by zephyr_interface_library_named
# cmake directive.
config APP_LINK_WITH_POSIX_SUBSYS
        bool "Make POSIX headers available to application"
        default y
        help
          Add POSIX subsystem header files to the 'app' include path.

endif # POSIX_API
