|  | # Copyright (c) 2017 Intel Corporation | 
|  | # Copyright (c) 2023 Meta | 
|  | # Copyright (c) 2024 Tenstorrent AI ULC | 
|  | # | 
|  | # SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | menuconfig POSIX_THREADS | 
|  | bool "POSIX thread support" | 
|  | help | 
|  | Select 'y' here to enable POSIX threads, mutexes, condition variables, and thread-specific | 
|  | storage. | 
|  |  | 
|  | For more information please see | 
|  | https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_subprofiles.html | 
|  |  | 
|  | if POSIX_THREADS | 
|  |  | 
|  | config HEAP_MEM_POOL_ADD_SIZE_POSIX_THREADS | 
|  | def_int 256 | 
|  |  | 
|  | config POSIX_THREAD_THREADS_MAX | 
|  | int "Maximum number of POSIX threads" | 
|  | default 5 | 
|  | help | 
|  | Maximum simultaneously active threads in a POSIX application. | 
|  |  | 
|  | For more information, see | 
|  | https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html | 
|  |  | 
|  | config MAX_PTHREAD_MUTEX_COUNT | 
|  | int "Maximum number of POSIX mutexes" | 
|  | default 5 | 
|  | help | 
|  | Maximum simultaneously active mutexes in a POSIX application. | 
|  |  | 
|  | config MAX_PTHREAD_COND_COUNT | 
|  | int "Maximum number of POSIX condition variables" | 
|  | default 5 | 
|  | help | 
|  | Maximum simultaneously active condition variables in a POSIX application. | 
|  |  | 
|  | config POSIX_THREAD_KEYS_MAX | 
|  | int "Maximum number of POSIX thread-specific-storage keys" | 
|  | default 5 | 
|  | help | 
|  | Maximum simultaneously active thread-specific-storage keys in a POSIX application. | 
|  |  | 
|  | For more information, see | 
|  | https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html | 
|  |  | 
|  | config PTHREAD_RECYCLER_DELAY_MS | 
|  | int "Delay for reclaiming dynamic pthread stacks (ms)" | 
|  | default 100 | 
|  | help | 
|  | Prior to a POSIX thread terminating via k_thread_abort(), scheduled | 
|  | work is added to the system workqueue (SWQ) so that any resources | 
|  | allocated by the thread (e.g. thread stack from a pool or the heap) | 
|  | can be released back to the system. Because resources are also freed | 
|  | on calls to pthread_create() there is no need to worry about resource | 
|  | starvation. | 
|  |  | 
|  | This option sets the number of milliseconds by which to defer | 
|  | scheduled work. | 
|  |  | 
|  | Note: this option should be considered temporary and will likely be | 
|  | removed once a more synchronous solution is available. | 
|  |  | 
|  | config POSIX_THREAD_ATTR_STACKADDR | 
|  | bool "Support getting and setting POSIX thread stack addresses" | 
|  | help | 
|  | Enable this option to use pthread_attr_getstackaddr() and | 
|  | pthread_attr_setstackaddr(). | 
|  |  | 
|  | This option was removed in IEEE 1003.1-2017 in favour of | 
|  | pthread_attr_getstack() and pthread_attr_setstack(). | 
|  |  | 
|  | For more information, please see | 
|  | https://pubs.opengroup.org/onlinepubs/009696799/functions/pthread_attr_getstackaddr.html | 
|  | https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xsh_chap03.html | 
|  | https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09_08 | 
|  |  | 
|  | config POSIX_THREAD_ATTR_STACKSIZE | 
|  | bool "Support getting and setting POSIX thread stack sizes" | 
|  | help | 
|  | Enable this option to use pthread_attr_getstacksize() or | 
|  | pthread_attr_setstacksize(). | 
|  |  | 
|  | For more information, please see | 
|  | https://pubs.opengroup.org/onlinepubs/009696699/functions/pthread_attr_getstacksize.html | 
|  |  | 
|  | config POSIX_THREADS_EXT | 
|  | bool "Extended POSIX thread support" | 
|  | help | 
|  | Enable this option to use pthread_attr_getguardsize(), pthread_attr_setguardsize(), | 
|  | pthread_mutexattr_gettype(), or pthread_mutexattr_settype(). | 
|  |  | 
|  | For more information, please see | 
|  | https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_subprofiles.html | 
|  |  | 
|  | config POSIX_THREAD_PRIORITY_SCHEDULING | 
|  | bool "Run POSIX threads with different priorities and schedulers" | 
|  | help | 
|  | Enabling this option allows the application to configure different priorities and | 
|  | scheduling algorithms for different threads via functions such as pthread_setschedparam() | 
|  | and pthread_setschedprio(). This is required for Realtime Threads and Advanced Realtime | 
|  | Threads. | 
|  |  | 
|  | For more information, please see | 
|  | https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap02.html#tag_02_01_06 | 
|  | https://man7.org/linux/man-pages/man7/posixoptions.7.html | 
|  |  | 
|  | config POSIX_PTHREAD_ATTR_STACKSIZE_BITS | 
|  | int "Significant bits for pthread_attr_t stacksize" | 
|  | range 8 31 | 
|  | default 23 | 
|  | help | 
|  | This value plays a part in determining the maximum supported | 
|  | pthread_attr_t stacksize. Valid stacksizes are in the range | 
|  | [1, N], where N = 1 << M, and M is this configuration value. | 
|  |  | 
|  | config POSIX_PTHREAD_ATTR_GUARDSIZE_BITS | 
|  | int "Significant bits for pthread_attr_t guardsize" | 
|  | range 1 31 | 
|  | default 9 | 
|  | help | 
|  | This value plays a part in determining the maximum supported | 
|  | pthread_attr_t guardsize. Valid guardsizes are in the range | 
|  | [0, N-1], where N = 1 << M, and M is this configuration value. | 
|  |  | 
|  | Actual guardsize values may be rounded-up. | 
|  |  | 
|  | config POSIX_PTHREAD_ATTR_GUARDSIZE_DEFAULT | 
|  | int "Default size of stack guard area" | 
|  | default 0 | 
|  | help | 
|  | This is the default amount of space to reserve at the overflow end of a | 
|  | pthread stack. Since Zephyr already supports both software-based stack | 
|  | protection (canaries) and hardware-based stack protection (MMU or MPU), | 
|  | this is set to 0 by default. However, a conforming application would be | 
|  | required to set this to PAGESIZE. Eventually, this option might | 
|  | facilitate a more dynamic approach to guard areas (via software or | 
|  | hardware) but for now it simply increases the size of thread stacks. | 
|  |  | 
|  | config POSIX_THREAD_PRIO_INHERIT | 
|  | bool "POSIX mutex priority inheritance" | 
|  | help | 
|  | Select 'y' here to enable POSIX mutex priority inheritance. | 
|  |  | 
|  | For more information, please see | 
|  | https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getprotocol.html | 
|  |  | 
|  | config POSIX_THREAD_PRIO_PROTECT | 
|  | bool "POSIX mutex priority protection" | 
|  | help | 
|  | Select 'y' here to enable POSIX mutex priority protection. | 
|  |  | 
|  | For more information, please see | 
|  | https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getprotocol.html | 
|  |  | 
|  | config POSIX_THREAD_SAFE_FUNCTIONS | 
|  | bool "POSIX thread-safe functions" | 
|  | select POSIX_FILE_SYSTEM_R | 
|  | select POSIX_C_LANG_SUPPORT_R | 
|  | help | 
|  | Select 'y' here to enable POSIX thread-safe functions including asctime_r(), ctime_r(), | 
|  | flockfile(), ftrylockfile(), funlockfile(), getc_unlocked(), getchar_unlocked(), | 
|  | getgrgid_r(), getgrnam_r(), getpwnam_r(), getpwuid_r(), gmtime_r(), localtime_r(), | 
|  | putc_unlocked(), putchar_unlocked(), rand_r(), readdir_r(), strerror_r(), and strtok_r(). | 
|  |  | 
|  | For more information, please see | 
|  | https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xsh_chap02.html#tag_22_02_09_07 | 
|  |  | 
|  | module = PTHREAD | 
|  | module-str = POSIX thread | 
|  | source "subsys/logging/Kconfig.template.log_config" | 
|  |  | 
|  | module = PTHREAD_MUTEX | 
|  | module-str = POSIX mutex | 
|  | source "subsys/logging/Kconfig.template.log_config" | 
|  |  | 
|  | module = PTHREAD_COND | 
|  | module-str = POSIX condition variable | 
|  | source "subsys/logging/Kconfig.template.log_config" | 
|  |  | 
|  | module = PTHREAD_KEY | 
|  | module-str = POSIX thread-specific data | 
|  | source "subsys/logging/Kconfig.template.log_config" | 
|  |  | 
|  | endif # POSIX_THREADS |