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