xref: /llvm-project/libc/src/__support/threads/linux/CMakeLists.txt (revision db6b7a84e6e4949569e756f46357d9f54ad16a03)
1add_header_library(
2  futex_word_type
3  HDRS
4    futex_word.h
5)
6
7if(NOT TARGET libc.src.__support.OSUtil.osutil)
8  return()
9endif()
10
11add_header_library(
12  futex_utils
13  HDRS
14    futex_utils.h
15  DEPENDS
16    .futex_word_type
17    libc.include.sys_syscall
18    libc.src.__support.OSUtil.osutil
19    libc.src.__support.CPP.atomic
20    libc.src.__support.CPP.limits
21    libc.src.__support.CPP.optional
22    libc.src.__support.time.linux.abs_timeout
23)
24
25set(monotonicity_flags)
26if (LIBC_CONF_TIMEOUT_ENSURE_MONOTONICITY)
27  set(monotonicity_flags -DLIBC_COPT_TIMEOUT_ENSURE_MONOTONICITY=1)
28else()
29  set(monotonicity_flags -DLIBC_COPT_TIMEOUT_ENSURE_MONOTONICITY=0)
30endif()
31
32add_header_library(
33  raw_mutex
34  HDRS
35    mutex.h
36  DEPENDS
37    .futex_utils
38    libc.src.__support.threads.sleep
39    libc.src.__support.time.linux.abs_timeout
40    libc.src.__support.time.linux.monotonicity
41    libc.src.__support.CPP.optional
42    libc.hdr.types.pid_t
43  COMPILE_OPTIONS
44    -DLIBC_COPT_RAW_MUTEX_DEFAULT_SPIN_COUNT=${LIBC_CONF_RAW_MUTEX_DEFAULT_SPIN_COUNT}
45    ${monotonicity_flags}
46)
47
48add_header_library(
49  rwlock
50  HDRS
51    rwlock.h
52  DEPENDS
53    .futex_utils
54    .raw_mutex
55    libc.src.__support.common
56    libc.src.__support.OSUtil.osutil
57    libc.src.__support.CPP.limits
58    libc.src.__support.threads.identifier
59  COMPILE_OPTIONS
60    -DLIBC_COPT_RWLOCK_DEFAULT_SPIN_COUNT=${LIBC_CONF_RWLOCK_DEFAULT_SPIN_COUNT}
61    ${monotonicity_flags}
62)
63
64add_header_library(
65  mutex
66  HDRS
67    mutex.h
68  DEPENDS
69    .futex_utils
70    .raw_mutex
71    libc.src.__support.threads.mutex_common
72)
73
74add_object_library(
75  thread
76  SRCS
77    thread.cpp
78  DEPENDS
79    .futex_utils
80    libc.config.app_h
81    libc.include.sys_syscall
82    libc.hdr.fcntl_macros
83    libc.src.errno.errno
84    libc.src.__support.CPP.atomic
85    libc.src.__support.CPP.stringstream
86    libc.src.__support.CPP.string_view
87    libc.src.__support.common
88    libc.src.__support.error_or
89    libc.src.__support.threads.thread_common
90  COMPILE_OPTIONS
91    ${libc_opt_high_flag}
92    -fno-omit-frame-pointer # This allows us to sniff out the thread args from
93                            # the new thread's stack reliably.
94    -Wno-frame-address      # Yes, calling __builtin_return_address with a
95                            # value other than 0 is dangerous. We know.
96)
97
98add_object_library(
99  callonce
100  SRCS
101    callonce.cpp
102  HDRS
103    ../callonce.h
104    callonce.h
105  DEPENDS
106    .futex_utils
107    libc.src.__support.macros.optimization
108)
109
110add_object_library(
111  CndVar
112  SRCS
113    CndVar.cpp
114  HDRS
115    ../CndVar.h
116  DEPENDS
117    libc.include.sys_syscall
118    libc.src.__support.OSUtil.osutil
119    libc.src.__support.threads.linux.futex_word_type
120    libc.src.__support.threads.mutex
121    libc.src.__support.threads.linux.raw_mutex
122    libc.src.__support.CPP.mutex
123)
124