posix: split supported features into separate Kconfig files

This change is setting up for switching over to proper POSIX
option requirements, feature test macros, and a dependency
structure that is reflective of the standard.

Signed-off-by: Christopher Friedt <cfriedt@meta.com>
This commit is contained in:
Christopher Friedt 2023-07-03 15:15:35 -04:00 committed by Chris Friedt
commit 13dcf2e4ed
18 changed files with 261 additions and 161 deletions

View file

@ -1,8 +1,8 @@
# Copyright (c) 2018 Intel Corporation # Copyright (c) 2018 Intel Corporation
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
source "lib/posix/getopt/Kconfig"
config POSIX_MAX_FDS config POSIX_MAX_FDS
int "Maximum number of open file descriptors" int "Maximum number of open file descriptors"
default 16 if POSIX_API default 16 if POSIX_API
@ -18,144 +18,6 @@ config POSIX_API
Enable mostly-standards-compliant implementations of Enable mostly-standards-compliant implementations of
various POSIX (IEEE 1003.1) APIs. various POSIX (IEEE 1003.1) APIs.
config PTHREAD_IPC
bool "POSIX pthread IPC API"
default y if POSIX_API
depends on POSIX_CLOCK
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 PTHREAD_CREATE_BARRIER
bool "Use a pthread_barrier_t to serialize pthread_create()"
help
When running several SMP applications in parallel instances of Qemu,
e.g. via twister, explicit serialization may be required between
pthread_create() and zephyr_thread_wrapper() when spawning and joining
many pthreads concurrently.
On such systems, say Y here to introduce explicit serialization
via pthread_barrier_wait().
config MAX_PTHREAD_MUTEX_COUNT
int "Maximum simultaneously active mutex count in POSIX application"
default 5
range 0 255
help
Maximum number of simultaneously active mutexes in a POSIX application.
config MAX_PTHREAD_COND_COUNT
int "Maximum simultaneously active condition variables in a POSIX application"
default 5
range 0 255
help
Maximum number of simultaneously active condition variables in a POSIX application.
config MAX_PTHREAD_KEY_COUNT
int "Maximum simultaneously active keys in a POSIX application"
default 5
range 0 255
help
Maximum number of simultaneously active keys in a POSIX application.
config MAX_PTHREAD_BARRIER_COUNT
int "Maximum simultaneously active barriers in a POSIX application"
default 5
range 0 255
help
Maximum number of simultaneously active keys in a POSIX application.
config MAX_PTHREAD_SPINLOCK_COUNT
int "Maximum simultaneously active spinlocks in a POSIX application"
default 5
range 0 255
help
Maximum number of simultaneously active spinlocks 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 POSIX_CLOCK
bool "POSIX clock, timer, and sleep APIs"
default y if POSIX_API
help
This enables POSIX clock\_\*(), timer\_\*(), and \*sleep()
functions.
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 TIMER_CREATE_WAIT
int "Time to wait for timer availability (in msec) in POSIX application"
default 100
range 0 1000
help
This controls how long to wait for resources to come available to create
a new timer in POSIX compliant application
config POSIX_MQUEUE
bool "POSIX message queue"
default y if POSIX_API
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
config POSIX_FS
bool "POSIX file system API support"
default y if POSIX_API
depends on FILE_SYSTEM
help
This enables POSIX style file system related APIs.
config POSIX_MAX_OPEN_FILES
int "Maximum number of open file descriptors"
default 16
depends on POSIX_FS
help
Maximum number of open files. Note that this setting
is additionally bounded by CONFIG_POSIX_MAX_FDS.
# The name of this option is mandated by zephyr_interface_library_named # The name of this option is mandated by zephyr_interface_library_named
# cmake directive. # cmake directive.
config APP_LINK_WITH_POSIX_SUBSYS config APP_LINK_WITH_POSIX_SUBSYS
@ -165,27 +27,26 @@ config APP_LINK_WITH_POSIX_SUBSYS
help help
Add POSIX subsystem header files to the 'app' include path. Add POSIX subsystem header files to the 'app' include path.
config EVENTFD config PTHREAD_IPC
bool "Support for eventfd" bool "POSIX pthread IPC API"
depends on !NATIVE_APPLICATION
select POLL
default y if POSIX_API default y if POSIX_API
depends on POSIX_CLOCK
help help
Enable support for event file descriptors, eventfd. An eventfd can This enables a mostly-standards-compliant implementation of
be used as an event wait/notify mechanism together with POSIX calls the pthread mutex, condition variable and barrier IPC
like read, write and poll. mechanisms.
config EVENTFD_MAX source "lib/posix/Kconfig.barrier"
int "Maximum number of eventfd's" source "lib/posix/Kconfig.clock"
depends on EVENTFD source "lib/posix/Kconfig.cond"
default 1 source "lib/posix/Kconfig.eventfd"
range 1 4096 source "lib/posix/Kconfig.fnmatch"
help source "lib/posix/Kconfig.fs"
The maximum number of supported event file descriptors. source "lib/posix/Kconfig.getopt"
source "lib/posix/Kconfig.key"
config FNMATCH source "lib/posix/Kconfig.mqueue"
bool "Support for fnmatch" source "lib/posix/Kconfig.mutex"
default y if POSIX_API source "lib/posix/Kconfig.pthread"
help source "lib/posix/Kconfig.semaphore"
Match filenames using the the fnmatch function. For example, the pattern source "lib/posix/Kconfig.spinlock"
"*.c" matches the filename "hello.c". source "lib/posix/Kconfig.timer"

24
lib/posix/Kconfig.barrier Normal file
View file

@ -0,0 +1,24 @@
# Copyright (c) 2017 Intel Corporation
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0
TYPE = PTHREAD_BARRIER
type = pthread_barrier_t
type-function = pthread_barrier_wait
source "lib/posix/Kconfig.template.pooled_ipc_type"
if PTHREAD_BARRIER
config PTHREAD_CREATE_BARRIER
bool "Use a pthread_barrier_t to serialize pthread_create()"
help
When running several SMP applications in parallel instances of Qemu,
e.g. via twister, explicit serialization may be required between
pthread_create() and zephyr_thread_wrapper() when spawning and joining
many pthreads concurrently.
On such systems, say Y here to introduce explicit serialization
via pthread_barrier_wait().
endif

10
lib/posix/Kconfig.clock Normal file
View file

@ -0,0 +1,10 @@
# Copyright (c) 2018 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
config POSIX_CLOCK
bool "POSIX clock, timer, and sleep APIs"
default y if POSIX_API
help
This enables POSIX clock\_\*(), timer\_\*(), and \*sleep()
functions.

9
lib/posix/Kconfig.cond Normal file
View file

@ -0,0 +1,9 @@
# Copyright (c) 2017 Intel Corporation
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0
TYPE = PTHREAD_COND
type = pthread_cond_t
type-function = pthread_cond_wait
source "lib/posix/Kconfig.template.pooled_ipc_type"

22
lib/posix/Kconfig.eventfd Normal file
View file

@ -0,0 +1,22 @@
# Copyright (c) 2020 Tobias Svehagen
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0
config EVENTFD
bool "Support for eventfd"
depends on !NATIVE_APPLICATION
select POLL
default y if POSIX_API
help
Enable support for event file descriptors, eventfd. An eventfd can
be used as an event wait/notify mechanism together with POSIX calls
like read, write and poll.
config EVENTFD_MAX
int "Maximum number of eventfd's"
depends on EVENTFD
default 1
range 1 4096
help
The maximum number of supported event file descriptors.

10
lib/posix/Kconfig.fnmatch Normal file
View file

@ -0,0 +1,10 @@
# Copyright (c) 2018 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
config FNMATCH
bool "Support for fnmatch"
default y if POSIX_API
help
Match filenames using the the fnmatch function. For example, the pattern
"*.c" matches the filename "hello.c".

18
lib/posix/Kconfig.fs Normal file
View file

@ -0,0 +1,18 @@
# Copyright (c) 2018 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
config POSIX_FS
bool "POSIX file system API support"
default y if POSIX_API
depends on FILE_SYSTEM
help
This enables POSIX style file system related APIs.
config POSIX_MAX_OPEN_FILES
int "Maximum number of open file descriptors"
default 16
depends on POSIX_FS
help
Maximum number of open files. Note that this setting
is additionally bounded by CONFIG_POSIX_MAX_FDS.

5
lib/posix/Kconfig.getopt Normal file
View file

@ -0,0 +1,5 @@
# Copyright (c) 2021 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
source "lib/posix/getopt/Kconfig"

9
lib/posix/Kconfig.key Normal file
View file

@ -0,0 +1,9 @@
# Copyright (c) 2018 Intel Corporation
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0
TYPE = PTHREAD_KEY
type = pthread_key_t
type-function = pthread_setspecific
source "lib/posix/Kconfig.template.pooled_ipc_type"

33
lib/posix/Kconfig.mqueue Normal file
View file

@ -0,0 +1,33 @@
# Copyright (c) 2017 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
config POSIX_MQUEUE
bool "POSIX message queue"
default y if POSIX_API
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

9
lib/posix/Kconfig.mutex Normal file
View file

@ -0,0 +1,9 @@
# Copyright (c) 2017 Intel Corporation
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0
TYPE = PTHREAD_MUTEX
type = pthread_mutex_t
type-function = pthread_mutex_lock
source "lib/posix/Kconfig.template.pooled_ipc_type"

View file

@ -0,0 +1,9 @@
# Copyright (c) 2017 Intel Corporation
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0
TYPE = PTHREAD
type = pthread_t
type-function = pthread_create
source "lib/posix/Kconfig.template.pooled_ipc_type"

View file

@ -0,0 +1,10 @@
# Copyright (c) 2018 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
config SEM_VALUE_MAX
int "Maximum semaphore limit"
default 32767
range 1 32767
help
Maximum semaphore count in POSIX compliant Application.

View file

@ -0,0 +1,8 @@
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0
TYPE = PTHREAD_SPINLOCK
type = pthread_spinlock_t
type-function = pthread_spin_lock
source "lib/posix/Kconfig.template.pooled_ipc_type"

View file

@ -0,0 +1,23 @@
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0
source "lib/posix/Kconfig.template.with_url"
# Not user configurable (i.e. private for now)
config $(TYPE)
bool
default y
depends on PTHREAD_IPC
help
Support for $(TYPE)
For more info, see
$(posix-url-base)/$(type-function).html
# eventually, this size should be defaulted to 0
config MAX_$(TYPE)_COUNT
int "Maximum simultaneously active $(type) in POSIX application"
default 5
depends on $(TYPE)
help
Maximum simultaneously active $(type) in a POSIX application.

View file

@ -0,0 +1,19 @@
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0
source "lib/posix/Kconfig.template.with_url"
# This is mainly for TIMER currently.
config $(TYPE)
bool "POSIX $(type) support"
help
For more info, see
$(posix-url-base)/$(type-function).html
# eventually, this size should be defaulted to 0 as a safe value
config MAX_$(TYPE)_COUNT
int "Maximum simultaneously active $(type) in POSIX application"
default 5
help
Maximum simultaneously active $(type) in a POSIX application.

View file

@ -0,0 +1,5 @@
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0
posix-url-base = https://pubs.opengroup.org/onlinepubs/9699919799

16
lib/posix/Kconfig.timer Normal file
View file

@ -0,0 +1,16 @@
# Copyright (c) 2018 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
TYPE = TIMER
type = timer_t
type-function = timer_create
source "lib/posix/Kconfig.template.pooled_type"
config TIMER_CREATE_WAIT
int "Time to wait for timer availability (in msec) in POSIX application"
default 100
range 0 1000
help
This controls how long to wait for resources to come available to create
a new timer in POSIX compliant application