aboutsummaryrefslogtreecommitdiff
path: root/libc/src/__support/threads/linux/CMakeLists.txt
blob: 9bf88ccc84557df421352520084c3dafcfaf74a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
add_header_library(
  futex_word_type
  HDRS
    futex_word.h
)

if(NOT TARGET libc.src.__support.OSUtil.osutil)
  return()
endif()

add_header_library(
  futex_utils
  HDRS
    futex_utils.h
  DEPENDS
    .futex_word_type
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.__support.CPP.atomic
    libc.src.__support.CPP.limits
    libc.src.__support.CPP.optional
    libc.src.__support.time.linux.abs_timeout
)

set(raw_mutex_additional_flags)
if (LIBC_CONF_TIMEOUT_ENSURE_MONOTONICITY)
  set(raw_mutex_additional_flags -DLIBC_COPT_TIMEOUT_ENSURE_MONOTONICITY=1)
else()
  set(raw_mutex_additional_flags -DLIBC_COPT_TIMEOUT_ENSURE_MONOTONICITY=0)
endif()

add_header_library(
  raw_mutex
  HDRS
    mutex.h
  DEPENDS
    .futex_utils
    libc.src.__support.threads.sleep
    libc.src.__support.time.linux.abs_timeout
    libc.src.__support.time.linux.monotonicity
    libc.src.__support.CPP.optional
    libc.hdr.types.pid_t
  COMPILE_OPTIONS
    -DLIBC_COPT_RAW_MUTEX_DEFAULT_SPIN_COUNT=${LIBC_CONF_RAW_MUTEX_DEFAULT_SPIN_COUNT}
    ${raw_mutex_additional_flags}
  
)

add_header_library(
  mutex
  HDRS
    mutex.h
  DEPENDS
    .futex_utils
    .raw_mutex
    libc.src.__support.threads.mutex_common
)

add_object_library(
  thread
  SRCS
    thread.cpp
  DEPENDS
    .futex_utils
    libc.config.linux.app_h
    libc.include.sys_syscall
    libc.src.errno.errno
    libc.src.__support.CPP.atomic
    libc.src.__support.CPP.stringstream
    libc.src.__support.CPP.string_view
    libc.src.__support.common
    libc.src.__support.error_or
    libc.src.__support.threads.thread_common
  COMPILE_OPTIONS
    -O3
    -fno-omit-frame-pointer # This allows us to sniff out the thread args from
                            # the new thread's stack reliably.
    -Wno-frame-address      # Yes, calling __builtin_return_address with a
                            # value other than 0 is dangerous. We know.
)

add_object_library(
  callonce
  SRCS
    callonce.cpp
  HDRS
    ../callonce.h
  DEPENDS
    .futex_utils
)

add_object_library(
  CndVar
  SRCS
    CndVar.cpp
  HDRS
    ../CndVar.h
  DEPENDS
    libc.include.sys_syscall
    libc.src.__support.OSUtil.osutil
    libc.src.__support.threads.linux.futex_word_type
    libc.src.__support.threads.mutex
    libc.src.__support.threads.linux.raw_mutex
    libc.src.__support.CPP.mutex
)