Skip to content

Commit

Permalink
posix: split supported features into separate Kconfig files
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
cfriedt committed Jul 6, 2023
1 parent e9cad7f commit 7198c27
Show file tree
Hide file tree
Showing 18 changed files with 260 additions and 161 deletions.
183 changes: 22 additions & 161 deletions lib/posix/Kconfig
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Copyright (c) 2018 Intel Corporation
# Copyright (c) 2023 Meta
#
# SPDX-License-Identifier: Apache-2.0

source "lib/posix/getopt/Kconfig"

config POSIX_MAX_FDS
int "Maximum number of open file descriptors"
default 16 if POSIX_API
Expand All @@ -18,144 +18,6 @@ config POSIX_API
Enable mostly-standards-compliant implementations of
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
# cmake directive.
config APP_LINK_WITH_POSIX_SUBSYS
Expand All @@ -165,27 +27,26 @@ config APP_LINK_WITH_POSIX_SUBSYS
help
Add POSIX subsystem header files to the 'app' include path.

config EVENTFD
bool "Support for eventfd"
depends on !NATIVE_APPLICATION
select POLL
config PTHREAD_IPC
bool "POSIX pthread IPC API"
default y if POSIX_API
depends on POSIX_CLOCK
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.
This enables a mostly-standards-compliant implementation of
the pthread mutex, condition variable and barrier IPC
mechanisms.

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".
source "lib/posix/Kconfig.barrier"
source "lib/posix/Kconfig.clock"
source "lib/posix/Kconfig.cond"
source "lib/posix/Kconfig.eventfd"
source "lib/posix/Kconfig.fnmatch"
source "lib/posix/Kconfig.fs"
source "lib/posix/Kconfig.getopt"
source "lib/posix/Kconfig.key"
source "lib/posix/Kconfig.mqueue"
source "lib/posix/Kconfig.mutex"
source "lib/posix/Kconfig.pthread"
source "lib/posix/Kconfig.semaphore"
source "lib/posix/Kconfig.spinlock"
source "lib/posix/Kconfig.timer"
24 changes: 24 additions & 0 deletions lib/posix/Kconfig.barrier
Original file line number Diff line number Diff line change
@@ -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 changes: 10 additions & 0 deletions lib/posix/Kconfig.clock
Original file line number Diff line number Diff line change
@@ -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 changes: 9 additions & 0 deletions lib/posix/Kconfig.cond
Original file line number Diff line number Diff line change
@@ -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"
21 changes: 21 additions & 0 deletions lib/posix/Kconfig.eventfd
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright (c) 2021 Nordic Semiconductor ASA
#
# 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 changes: 10 additions & 0 deletions lib/posix/Kconfig.fnmatch
Original file line number Diff line number Diff line change
@@ -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 changes: 18 additions & 0 deletions lib/posix/Kconfig.fs
Original file line number Diff line number Diff line change
@@ -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 changes: 5 additions & 0 deletions lib/posix/Kconfig.getopt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Copyright (c) 2021 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0

source "lib/posix/getopt/Kconfig"
9 changes: 9 additions & 0 deletions lib/posix/Kconfig.key
Original file line number Diff line number Diff line change
@@ -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 changes: 33 additions & 0 deletions lib/posix/Kconfig.mqueue
Original file line number Diff line number Diff line change
@@ -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 changes: 9 additions & 0 deletions lib/posix/Kconfig.mutex
Original file line number Diff line number Diff line change
@@ -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"
9 changes: 9 additions & 0 deletions lib/posix/Kconfig.pthread
Original file line number Diff line number Diff line change
@@ -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"
10 changes: 10 additions & 0 deletions lib/posix/Kconfig.semaphore
Original file line number Diff line number Diff line change
@@ -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.
8 changes: 8 additions & 0 deletions lib/posix/Kconfig.spinlock
Original file line number Diff line number Diff line change
@@ -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"
Loading

0 comments on commit 7198c27

Please sign in to comment.