diff --git a/include/posix/mqueue.h b/include/posix/mqueue.h index 1148c3fc5b0..e2ec4096a9d 100644 --- a/include/posix/mqueue.h +++ b/include/posix/mqueue.h @@ -8,7 +8,7 @@ #define __MQUEUE_H__ #include -#include +#include #include "sys/types.h" #ifdef __cplusplus diff --git a/include/posix/pthread.h b/include/posix/pthread.h index 7c7bb736f84..ba8a9859420 100644 --- a/include/posix/pthread.h +++ b/include/posix/pthread.h @@ -8,10 +8,10 @@ #define __PTHREAD_H__ #include -#include +#include +#include #include "sys/types.h" #include "posix_sched.h" -#include "unistd.h" enum pthread_state { /* The thread is running and joinable. */ diff --git a/include/posix/semaphore.h b/include/posix/semaphore.h index 5fb956266e4..52c9dc6bfdb 100644 --- a/include/posix/semaphore.h +++ b/include/posix/semaphore.h @@ -10,8 +10,8 @@ extern "C" { #endif +#include #include "sys/types.h" -#include int sem_destroy(sem_t *semaphore); int sem_getvalue(sem_t *restrict semaphore, int *restrict value); diff --git a/include/posix/time.h b/include/posix/time.h index 66126886a99..fbbc70a3955 100644 --- a/include/posix/time.h +++ b/include/posix/time.h @@ -10,9 +10,6 @@ extern "C" { #endif -#ifdef CONFIG_NEWLIB_LIBC -#include_next -#else struct timespec { signed int tv_sec; signed int tv_nsec; @@ -22,7 +19,6 @@ struct itimerspec { struct timespec it_interval; /* Timer interval */ struct timespec it_value; /* Timer expiration */ }; -#endif /* CONFIG_NEWLIB_LIBC */ #include #include diff --git a/include/posix/unistd.h b/include/posix/unistd.h index e3c6b69dab0..91c03753319 100644 --- a/include/posix/unistd.h +++ b/include/posix/unistd.h @@ -12,10 +12,6 @@ extern "C" { #include "sys/types.h" -#ifndef __ZEPHYR__ -#include_next -#endif - unsigned sleep(unsigned int seconds); int usleep(useconds_t useconds); diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index c2a196895cd..b5e1f6f3fe9 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -25,15 +25,11 @@ add_library(kernel smp.c ) -if (CONFIG_PTHREAD_IPC) -target_include_directories(kernel PRIVATE ${PROJECT_SOURCE_DIR}/include/posix) -endif (CONFIG_PTHREAD_IPC) target_sources_ifdef(CONFIG_INT_LATENCY_BENCHMARK kernel PRIVATE int_latency_bench.c) target_sources_ifdef(CONFIG_STACK_CANARIES kernel PRIVATE compiler_stack_protect.c) target_sources_ifdef(CONFIG_SYS_CLOCK_EXISTS kernel PRIVATE timer.c) target_sources_ifdef(CONFIG_ATOMIC_OPERATIONS_C kernel PRIVATE atomic_c.c) target_sources_if_kconfig( kernel PRIVATE poll.c) -add_subdirectory_ifdef(CONFIG_PTHREAD_IPC posix) # The last 2 files inside the target_sources_ifdef should be # userspace_handler.c and userspace.c. If not the linker would complain. diff --git a/kernel/Kconfig b/kernel/Kconfig index b04e4e133a8..09c31726673 100644 --- a/kernel/Kconfig +++ b/kernel/Kconfig @@ -487,76 +487,6 @@ config APPLICATION_INIT_PRIORITY endmenu -menu "POSIX Layer" -config PTHREAD_IPC - bool - prompt "POSIX pthread IPC API" - default n - 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 - prompt "Maximum pthread count in POSIX application" - default 5 - range 0 255 - help - Mention maximum number of threads in POSIX compliant application. - -config SEM_VALUE_MAX - int - prompt "Maximum semaphore limit" - default 32767 - range 1 32767 - help - Maximum semaphore count in POSIX compliant Application. - -config MAX_TIMER_COUNT - int - prompt "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 - prompt "Enable POSIX message queue" - default n - help - This enabled POSIX message queue related APIs. - -if POSIX_MQUEUE -config MSG_COUNT_MAX - int - prompt "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 - prompt "Maximum size of a message" - default 16 - help - Mention maximum size of message in bytes. - -config MQUEUE_NAMELEN_MAX - int - prompt "Maximum size of a name length" - default 16 - range 2 255 - help - Mention length of message queue name in number of characters. - -endif -endif -endmenu - menu "Security Options" config STACK_CANARIES diff --git a/kernel/posix/CMakeLists.txt b/kernel/posix/CMakeLists.txt deleted file mode 100644 index 88788086d1c..00000000000 --- a/kernel/posix/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -target_sources(kernel PRIVATE posix/pthread_common.c) -target_sources(kernel PRIVATE posix/pthread_cond.c) -target_sources(kernel PRIVATE posix/pthread_mutex.c) -target_sources(kernel PRIVATE posix/pthread_barrier.c) -target_sources(kernel PRIVATE posix/pthread.c) -target_sources(kernel PRIVATE posix/pthread_sched.c) -target_sources(kernel PRIVATE posix/clock.c) -target_sources(kernel PRIVATE posix/sleep.c) -target_sources(kernel PRIVATE posix/timer.c) -target_sources(kernel PRIVATE posix/pthread_rwlock.c) -target_sources(kernel PRIVATE posix/semaphore.c) -target_sources_ifdef(CONFIG_POSIX_MQUEUE kernel PRIVATE posix/mqueue.c) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index f9b3e040a3f..6d8976f44fe 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -6,3 +6,4 @@ endif() add_subdirectory_if_kconfig(ring_buffer) add_subdirectory_if_kconfig(base64) add_subdirectory(mempool) +add_subdirectory_ifdef(CONFIG_PTHREAD_IPC posix) diff --git a/lib/Kconfig b/lib/Kconfig index da8892f0de6..fd025ab596f 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -31,4 +31,7 @@ config BASE64 default n help Enable base64 encoding and decoding functionality + +source "lib/posix/Kconfig" + endmenu diff --git a/lib/posix/CMakeLists.txt b/lib/posix/CMakeLists.txt new file mode 100644 index 00000000000..db478ebf4eb --- /dev/null +++ b/lib/posix/CMakeLists.txt @@ -0,0 +1,21 @@ + +add_library(PTHREAD INTERFACE) + +target_include_directories(PTHREAD INTERFACE ${PROJECT_SOURCE_DIR}/include/posix) + +zephyr_library() +zephyr_library_sources(pthread_common.c) +zephyr_library_sources(pthread_cond.c) +zephyr_library_sources(pthread_mutex.c) +zephyr_library_sources(pthread_barrier.c) +zephyr_library_sources(pthread.c) +zephyr_library_sources(pthread_sched.c) +zephyr_library_sources(clock.c) +zephyr_library_sources(sleep.c) +zephyr_library_sources(timer.c) +zephyr_library_sources(pthread_rwlock.c) +zephyr_library_sources(semaphore.c) +zephyr_library_sources_ifdef(CONFIG_POSIX_MQUEUE mqueue.c) + +zephyr_library_link_libraries(PTHREAD) +target_link_libraries(PTHREAD INTERFACE zephyr_interface) diff --git a/lib/posix/Kconfig b/lib/posix/Kconfig new file mode 100644 index 00000000000..be484fd205d --- /dev/null +++ b/lib/posix/Kconfig @@ -0,0 +1,73 @@ +# +# Copyright (c) 2018 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +config PTHREAD_IPC + bool + prompt "POSIX pthread IPC API" + default n + 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 + prompt "Maximum pthread count in POSIX application" + default 5 + range 0 255 + help + Mention maximum number of threads in POSIX compliant application. + +config SEM_VALUE_MAX + int + prompt "Maximum semaphore limit" + default 32767 + range 1 32767 + help + Maximum semaphore count in POSIX compliant Application. + +config MAX_TIMER_COUNT + int + prompt "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 + prompt "Enable POSIX message queue" + default n + help + This enabled POSIX message queue related APIs. + +if POSIX_MQUEUE +config MSG_COUNT_MAX + int + prompt "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 + prompt "Maximum size of a message" + default 16 + help + Mention maximum size of message in bytes. + +config MQUEUE_NAMELEN_MAX + int + prompt "Maximum size of a name length" + default 16 + range 2 255 + help + Mention length of message queue name in number of characters. + +endif +endif diff --git a/kernel/posix/clock.c b/lib/posix/clock.c similarity index 93% rename from kernel/posix/clock.c rename to lib/posix/clock.c index d29d7853b78..56b33db6f56 100644 --- a/kernel/posix/clock.c +++ b/lib/posix/clock.c @@ -4,8 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ #include -#include #include +#include +#include /** * @brief Get clock time specified by clock_id. diff --git a/kernel/posix/mqueue.c b/lib/posix/mqueue.c similarity index 99% rename from kernel/posix/mqueue.c rename to lib/posix/mqueue.c index 1d6086c3b5e..3f148596987 100644 --- a/kernel/posix/mqueue.c +++ b/lib/posix/mqueue.c @@ -4,11 +4,11 @@ * SPDX-License-Identifier: Apache-2.0 */ #include -#include #include -#include #include #include +#include +#include typedef struct mqueue_object { sys_snode_t snode; diff --git a/kernel/posix/pthread.c b/lib/posix/pthread.c similarity index 99% rename from kernel/posix/pthread.c rename to lib/posix/pthread.c index e0372e36710..3f33f968dfb 100644 --- a/kernel/posix/pthread.c +++ b/lib/posix/pthread.c @@ -5,11 +5,11 @@ */ #include -#include #include #include -#include "ksched.h" -#include "wait_q.h" +#include +#include +#include #define PTHREAD_INIT_FLAGS PTHREAD_CANCEL_ENABLE #define PTHREAD_CANCELED ((void *) -1) diff --git a/kernel/posix/pthread_barrier.c b/lib/posix/pthread_barrier.c similarity index 88% rename from kernel/posix/pthread_barrier.c rename to lib/posix/pthread_barrier.c index 445eb32a0ba..0f5d5159367 100644 --- a/kernel/posix/pthread_barrier.c +++ b/lib/posix/pthread_barrier.c @@ -5,9 +5,9 @@ */ #include -#include -#include "ksched.h" -#include "wait_q.h" +#include +#include +#include #include void ready_one_thread(_wait_q_t *wq); diff --git a/kernel/posix/pthread_common.c b/lib/posix/pthread_common.c similarity index 90% rename from kernel/posix/pthread_common.c rename to lib/posix/pthread_common.c index 25c0d1f0894..2ffd49ad0d8 100644 --- a/kernel/posix/pthread_common.c +++ b/lib/posix/pthread_common.c @@ -5,10 +5,10 @@ */ #include -#include -#include "ksched.h" -#include "wait_q.h" -#include "time.h" +#include +#include +#include +#include void ready_one_thread(_wait_q_t *wq) { diff --git a/kernel/posix/pthread_cond.c b/lib/posix/pthread_cond.c similarity index 97% rename from kernel/posix/pthread_cond.c rename to lib/posix/pthread_cond.c index 072b205c854..9fc01b7326c 100644 --- a/kernel/posix/pthread_cond.c +++ b/lib/posix/pthread_cond.c @@ -5,10 +5,10 @@ */ #include -#include -#include "ksched.h" -#include "wait_q.h" +#include +#include #include +#include void ready_one_thread(_wait_q_t *wq); diff --git a/kernel/posix/pthread_mutex.c b/lib/posix/pthread_mutex.c similarity index 81% rename from kernel/posix/pthread_mutex.c rename to lib/posix/pthread_mutex.c index 4bf1b916604..bd8e429771c 100644 --- a/kernel/posix/pthread_mutex.c +++ b/lib/posix/pthread_mutex.c @@ -5,9 +5,9 @@ */ #include -#include -#include "ksched.h" -#include "wait_q.h" +#include +#include +#include int pthread_mutex_trylock(pthread_mutex_t *m) { diff --git a/kernel/posix/pthread_rwlock.c b/lib/posix/pthread_rwlock.c similarity index 99% rename from kernel/posix/pthread_rwlock.c rename to lib/posix/pthread_rwlock.c index 455fb30dc45..145f6e85f76 100644 --- a/kernel/posix/pthread_rwlock.c +++ b/lib/posix/pthread_rwlock.c @@ -4,9 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ #include -#include #include -#include +#include +#include #define INITIALIZED 1 #define NOT_INITIALIZED 0 diff --git a/kernel/posix/pthread_sched.c b/lib/posix/pthread_sched.c similarity index 97% rename from kernel/posix/pthread_sched.c rename to lib/posix/pthread_sched.c index e5e90b66c50..8c1e0a07665 100644 --- a/kernel/posix/pthread_sched.c +++ b/lib/posix/pthread_sched.c @@ -5,7 +5,7 @@ */ #include -#include +#include static bool valid_posix_policy(int policy) { diff --git a/kernel/posix/semaphore.c b/lib/posix/semaphore.c similarity index 98% rename from kernel/posix/semaphore.c rename to lib/posix/semaphore.c index 6490a02f5ce..e284f681521 100644 --- a/kernel/posix/semaphore.c +++ b/lib/posix/semaphore.c @@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include #include +#include /** * @brief Destroy semaphore. diff --git a/kernel/posix/sleep.c b/lib/posix/sleep.c similarity index 91% rename from kernel/posix/sleep.c rename to lib/posix/sleep.c index 6cbd36d52bd..cf5bc171b8c 100644 --- a/kernel/posix/sleep.c +++ b/lib/posix/sleep.c @@ -3,7 +3,9 @@ * * SPDX-License-Identifier: Apache-2.0 */ -#include + +#include +#include /** * @brief Sleep for a specified number of seconds. diff --git a/kernel/posix/timer.c b/lib/posix/timer.c similarity index 99% rename from kernel/posix/timer.c rename to lib/posix/timer.c index 333749dd1e2..3863abff606 100644 --- a/kernel/posix/timer.c +++ b/lib/posix/timer.c @@ -4,10 +4,10 @@ * SPDX-License-Identifier: Apache-2.0 */ #include -#include #include #include #include +#include #define ACTIVE 1 #define NOT_ACTIVE 0