1# SPDX-License-Identifier: Apache-2.0 2 3set(GEN_DIR ${ZEPHYR_BINARY_DIR}/include/generated) 4 5zephyr_syscall_header_ifdef(CONFIG_POSIX_CLOCK_SELECTION posix_clock.h) 6zephyr_syscall_header_ifdef(CONFIG_POSIX_TIMERS posix_clock.h) 7zephyr_syscall_header_ifdef(CONFIG_XSI_SINGLE_PROCESS posix_clock.h) 8 9if(CONFIG_POSIX_SYSTEM_HEADERS) 10 zephyr_include_directories(${ZEPHYR_BASE}/include/zephyr/posix) 11endif() 12 13if (NOT CONFIG_TC_PROVIDES_POSIX_SIGNALS) 14 if(CONFIG_POSIX_SIGNALS) 15 set(STRSIGNAL_TABLE_H ${GEN_DIR}/posix/strsignal_table.h) 16 17 add_custom_command( 18 OUTPUT ${STRSIGNAL_TABLE_H} 19 COMMAND 20 ${PYTHON_EXECUTABLE} 21 ${ZEPHYR_BASE}/scripts/build/gen_strsignal_table.py 22 -i ${ZEPHYR_BASE}/include/zephyr/posix/signal.h 23 -o ${STRSIGNAL_TABLE_H} 24 DEPENDS ${ZEPHYR_BASE}/include/zephyr/posix/signal.h 25 ) 26 endif() 27endif() 28 29if(CONFIG_POSIX_API OR CONFIG_POSIX_THREADS OR CONFIG_POSIX_TIMERS OR 30 CONFIG_POSIX_MESSAGE_PASSING OR CONFIG_POSIX_FILE_SYSTEM OR CONFIG_EVENTFD OR 31 CONFIG_POSIX_C_LIB_EXT OR CONFIG_POSIX_SINGLE_PROCESS) 32 # This is a temporary workaround so that Newlib declares the appropriate 33 # types for us. POSIX features to be formalized as part of #51211 34 zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:-D_POSIX_THREADS>) 35 zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:-D_POSIX_THREADS>) 36endif() 37 38zephyr_library() 39zephyr_library_sources_ifdef(CONFIG_EVENTFD eventfd.c) 40 41if (NOT CONFIG_TC_PROVIDES_POSIX_ASYNCHRONOUS_IO) 42 zephyr_library_sources_ifdef(CONFIG_POSIX_ASYNCHRONOUS_IO aio.c) 43endif() 44 45if (NOT CONFIG_TC_PROVIDES_POSIX_BARRIERS) 46 zephyr_library_sources_ifdef(CONFIG_POSIX_BARRIERS barrier.c) 47endif() 48 49if (NOT CONFIG_TC_PROVIDES_POSIX_CLOCK_SELECTION) 50 zephyr_library_sources_ifdef(CONFIG_POSIX_CLOCK_SELECTION clock_selection.c) 51endif() 52 53if (NOT CONFIG_TC_PROVIDES_POSIX_C_LIB_EXT) 54 zephyr_library_sources_ifdef(CONFIG_POSIX_C_LIB_EXT 55 fnmatch.c 56 getentropy.c 57 getopt/getopt.c 58 getopt/getopt_common.c 59 ) 60endif() 61 62if (NOT CONFIG_TC_PROVIDES_POSIX_DEVICE_IO) 63 zephyr_library_sources_ifdef(CONFIG_POSIX_DEVICE_IO 64 # perror should be moved to the common libc 65 perror.c 66 device_io.c 67 ) 68endif() 69 70if (NOT CONFIG_TC_PROVIDES_POSIX_FD_MGMT) 71 zephyr_library_sources_ifdef(CONFIG_POSIX_FD_MGMT 72 fd_mgmt.c 73 ) 74endif() 75 76if (NOT CONFIG_TC_PROVIDES_POSIX_FILE_SYSTEM) 77 zephyr_library_sources_ifdef(CONFIG_POSIX_FILE_SYSTEM fs.c) 78endif() 79 80if (NOT CONFIG_TC_PROVIDES_POSIX_FILE_SYSTEM_R) 81 zephyr_library_sources_ifdef(CONFIG_POSIX_FILE_SYSTEM_R file_system_r.c) 82endif() 83 84if (NOT CONFIG_TC_PROVIDES_POSIX_MEMORY_PROTECTION) 85zephyr_library_sources_ifdef(CONFIG_POSIX_MEMORY_PROTECTION mprotect.c) 86endif() 87 88if (NOT CONFIG_TC_PROVIDES_POSIX_MAPPED_FILES) 89 zephyr_library_sources_ifdef(CONFIG_POSIX_MAPPED_FILES mmap.c) 90endif() 91 92if (NOT CONFIG_TC_PROVIDES_POSIX_MULTI_PROCESS) 93 zephyr_library_sources_ifdef(CONFIG_POSIX_MULTI_PROCESS 94 sleep.c 95 multi_process.c 96 ) 97endif() 98 99if (NOT CONFIG_TC_PROVIDES_POSIX_NETWORKING) 100 zephyr_library_sources_ifdef(CONFIG_POSIX_NETWORKING net.c) 101endif() 102 103if (NOT CONFIG_TC_PROVIDES_POSIX_SIGNALS) 104 zephyr_library_sources_ifdef(CONFIG_POSIX_SIGNALS signal.c ${STRSIGNAL_TABLE_H}) 105endif() 106 107if (NOT CONFIG_TC_PROVIDES_POSIX_SINGLE_PROCESS) 108 zephyr_library_sources_ifdef(CONFIG_POSIX_SINGLE_PROCESS 109 confstr.c 110 env.c 111 env_common.c 112 sysconf.c 113 uname.c 114 ) 115endif() 116 117if (NOT CONFIG_TC_PROVIDES_POSIX_SPIN_LOCKS) 118 zephyr_library_sources_ifdef(CONFIG_POSIX_SPIN_LOCKS spinlock.c) 119endif() 120 121if (NOT CONFIG_TC_PROVIDES_POSIX_TIMERS) 122 zephyr_library_sources_ifdef(CONFIG_POSIX_TIMERS 123 clock.c 124 timer.c 125 timespec_to_timeout.c 126 ) 127endif() 128 129if (NOT CONFIG_TC_PROVIDES_POSIX_READER_WRITER_LOCKS) 130 # Note: the Option is _POSIX_READER_WRITER_LOCKS, while the Option Group is POSIX_RW_LOCKS. 131 # We have opted to use POSIX_READER_WRITER_LOCKS here to match the Option name. 132 zephyr_library_sources_ifdef(CONFIG_POSIX_READER_WRITER_LOCKS rwlock.c) 133endif() 134 135if (NOT CONFIG_TC_PROVIDES_POSIX_SEMAPHORES) 136 zephyr_library_sources_ifdef(CONFIG_POSIX_SEMAPHORES semaphore.c) 137endif() 138 139if (NOT CONFIG_TC_PROVIDES_POSIX_THREADS) 140 # Note: the Option is _POSIX_THREADS, while the Option Group is POSIX_THREADS_BASE. 141 # We have opted to use POSIX_THREADS here to match the Option name. 142 zephyr_library_sources_ifdef(CONFIG_POSIX_THREADS 143 cond.c 144 grp.c 145 key.c 146 mutex.c 147 pthread.c 148 pwd.c 149 ) 150endif() 151 152if(NOT CONFIG_TC_PROVIDES_XSI_REALTIME) 153 zephyr_library_sources_ifdef(CONFIG_POSIX_FSYNC fsync.c) 154 zephyr_library_sources_ifdef(CONFIG_POSIX_MEMLOCK mlockall.c) 155 zephyr_library_sources_ifdef(CONFIG_POSIX_MEMLOCK_RANGE mlock.c) 156 zephyr_library_sources_ifdef(CONFIG_POSIX_MESSAGE_PASSING mqueue.c) 157 zephyr_library_sources_ifdef(CONFIG_POSIX_PRIORITY_SCHEDULING sched.c) 158 zephyr_library_sources_ifdef(CONFIG_POSIX_SHARED_MEMORY_OBJECTS shm.c) 159endif() 160 161zephyr_library_sources_ifdef(CONFIG_XOPEN_STREAMS stropts.c) 162 163if (NOT CONFIG_TC_PROVIDES_XSI_SINGLE_PROCESS) 164 zephyr_library_sources_ifdef(CONFIG_XSI_SINGLE_PROCESS 165 env_common.c 166 xsi_single_process.c 167 ) 168endif() 169 170if (NOT CONFIG_TC_PROVIDES_XSI_SYSTEM_LOGGING) 171 zephyr_library_sources_ifdef(CONFIG_XSI_SYSTEM_LOGGING syslog.c) 172endif() 173 174zephyr_library_sources_ifdef(CONFIG_GETOPT_LONG 175 getopt/getopt_long.c 176) 177zephyr_include_directories_ifdef(CONFIG_POSIX_C_LIB_EXT 178 getopt/ 179) 180 181zephyr_library_include_directories( 182 ${ZEPHYR_BASE}/kernel/include 183 ${ARCH_DIR}/${ARCH}/include 184) 185 186zephyr_library_property(ALLOW_EMPTY TRUE) 187 188zephyr_library_compile_options(-U_POSIX_C_SOURCE -D_POSIX_C_SOURCE=200809L) 189