6 _LIBCXXRTDIR= ${SRCTOP}/contrib/libcxxrt
7 HDRDIR= ${SRCTOP}/contrib/llvm-project/libcxx/include
8 SRCDIR= ${SRCTOP}/contrib/llvm-project/libcxx/src
9 CXXINCLUDEDIR= ${INCLUDEDIR}/c++/v${SHLIB_MAJOR}
15 SHLIB_LDSCRIPT= libc++.ldscript
24 SRCS+= condition_variable.cpp
25 SRCS+= condition_variable_destructor.cpp
28 SRCS+= filesystem/directory_iterator.cpp
29 SRCS+= filesystem/int128_builtins.cpp
30 SRCS+= filesystem/operations.cpp
35 SRCS+= ios.instantiations.cpp
40 SRCS+= mutex_destructor.cpp
44 SRCS+= random_shuffle.cpp
46 SRCS+= shared_mutex.cpp
50 SRCS+= system_error.cpp
58 CXXRT_SRCS+= auxhelper.cc
59 CXXRT_SRCS+= dynamic_cast.cc
60 CXXRT_SRCS+= exception.cc
62 CXXRT_SRCS+= libelftc_dem_gnu3.c
63 CXXRT_SRCS+= memory.cc
64 CXXRT_SRCS+= stdexcept.cc
65 CXXRT_SRCS+= terminate.cc
66 CXXRT_SRCS+= typeinfo.cc
68 .for _S in ${CXXRT_SRCS}
69 CLEANFILES+= cxxrt_${_S}
70 STATICOBJS+= cxxrt_${_S:R}.o
71 cxxrt_${_S}: ${_LIBCXXRTDIR}/${_S} .NOMETA
72 ln -sf ${.ALLSRC} ${.TARGET}
76 CFLAGS+= -isystem ${HDRDIR}
77 CFLAGS+= -isystem ${_LIBCXXRTDIR}
80 CFLAGS+= -D_LIBCPP_BUILDING_LIBRARY
82 CFLAGS+= -ffunction-sections
83 CFLAGS+= -fdata-sections
87 INCSGROUPS= STD MEM EXP EXT
89 STD_HEADERS+= __availability
90 STD_HEADERS+= __bit_reference
92 STD_HEADERS+= __bsd_locale_defaults.h
93 STD_HEADERS+= __bsd_locale_fallbacks.h
96 STD_HEADERS+= __functional_03
97 STD_HEADERS+= __functional_base
98 STD_HEADERS+= __functional_base_03
99 STD_HEADERS+= __hash_table
100 STD_HEADERS+= __libcpp_version
101 STD_HEADERS+= __locale
102 STD_HEADERS+= __mutex_base
103 STD_HEADERS+= __node_handle
104 STD_HEADERS+= __nullptr
105 STD_HEADERS+= __split_buffer
106 STD_HEADERS+= __sso_allocator
107 STD_HEADERS+= __std_stream
108 STD_HEADERS+= __string
109 STD_HEADERS+= __threading_support
111 STD_HEADERS+= __tuple
112 STD_HEADERS+= __undef_macros
113 STD_HEADERS+= algorithm
117 STD_HEADERS+= barrier
120 STD_HEADERS+= cassert
121 STD_HEADERS+= ccomplex
126 STD_HEADERS+= charconv
128 STD_HEADERS+= cinttypes
129 STD_HEADERS+= ciso646
130 STD_HEADERS+= climits
131 STD_HEADERS+= clocale
133 STD_HEADERS+= codecvt
134 STD_HEADERS+= compare
135 STD_HEADERS+= complex
136 STD_HEADERS+= complex.h
137 STD_HEADERS+= concepts
138 STD_HEADERS+= condition_variable
139 STD_HEADERS+= csetjmp
140 STD_HEADERS+= csignal
141 STD_HEADERS+= cstdarg
142 STD_HEADERS+= cstdbool
143 STD_HEADERS+= cstddef
144 STD_HEADERS+= cstdint
146 STD_HEADERS+= cstdlib
147 STD_HEADERS+= cstring
148 STD_HEADERS+= ctgmath
150 STD_HEADERS+= ctype.h
152 STD_HEADERS+= cwctype
154 STD_HEADERS+= errno.h
155 STD_HEADERS+= exception
156 STD_HEADERS+= execution
158 STD_HEADERS+= filesystem
159 STD_HEADERS+= float.h
160 STD_HEADERS+= forward_list
161 STD_HEADERS+= fstream
162 STD_HEADERS+= functional
164 STD_HEADERS+= initializer_list
165 STD_HEADERS+= inttypes.h
166 STD_HEADERS+= iomanip
169 STD_HEADERS+= iostream
170 STD_HEADERS+= istream
171 STD_HEADERS+= iterator
174 STD_HEADERS+= limits.h
177 STD_HEADERS+= locale.h
183 STD_HEADERS+= numbers
184 STD_HEADERS+= numeric
185 STD_HEADERS+= optional
186 STD_HEADERS+= ostream
191 STD_HEADERS+= scoped_allocator
192 STD_HEADERS+= semaphore
194 STD_HEADERS+= setjmp.h
195 STD_HEADERS+= shared_mutex
197 STD_HEADERS+= sstream
199 STD_HEADERS+= stdbool.h
200 STD_HEADERS+= stddef.h
201 STD_HEADERS+= stdexcept
202 STD_HEADERS+= stdint.h
203 STD_HEADERS+= stdio.h
204 STD_HEADERS+= stdlib.h
205 STD_HEADERS+= streambuf
207 STD_HEADERS+= string.h
208 STD_HEADERS+= string_view
209 STD_HEADERS+= strstream
210 STD_HEADERS+= system_error
211 STD_HEADERS+= tgmath.h
214 STD_HEADERS+= type_traits
215 STD_HEADERS+= typeindex
216 STD_HEADERS+= typeinfo
217 STD_HEADERS+= unordered_map
218 STD_HEADERS+= unordered_set
219 STD_HEADERS+= utility
220 STD_HEADERS+= valarray
221 STD_HEADERS+= variant
223 STD_HEADERS+= version
224 STD_HEADERS+= wchar.h
225 STD_HEADERS+= wctype.h
227 RT_HEADERS+= cxxabi.h
228 RT_HEADERS+= unwind-arm.h
229 RT_HEADERS+= unwind-itanium.h
230 RT_HEADERS+= unwind.h
232 .for hdr in ${STD_HEADERS}
233 STD+= ${HDRDIR}/${hdr}
234 INCSLINKS+= ../${hdr} ${CXXINCLUDEDIR}/tr1/${hdr}
236 .for hdr in ${RT_HEADERS}
237 STD+= ${_LIBCXXRTDIR}/${hdr}
239 STDDIR= ${CXXINCLUDEDIR}
241 # Special case for __config, which as of libc++ 12.0.0 is produced by
242 # concatenating the locally generated __config_site and the upstream __config
244 CONFIG_HEADER= __config
246 ${CONFIG_HEADER}: ${.CURDIR}/__config_site ${HDRDIR}/__config
247 cat ${.ALLSRC} > ${.TARGET}
248 STD+= ${CONFIG_HEADER}
249 CLEANFILES+= ${CONFIG_HEADER}
251 MEM_HEADERS+= allocator_traits.h
253 MEM_HEADERS+= pointer_traits.h
254 MEM_HEADERS+= utilities.h
256 .for hdr in ${MEM_HEADERS}
257 MEM+= ${HDRDIR}/__memory/${hdr}
259 MEMDIR= ${CXXINCLUDEDIR}/__memory
261 EXP_HEADERS+= __config
262 EXP_HEADERS+= __memory
263 EXP_HEADERS+= algorithm
264 EXP_HEADERS+= coroutine
266 EXP_HEADERS+= filesystem
267 EXP_HEADERS+= forward_list
268 EXP_HEADERS+= functional
269 EXP_HEADERS+= iterator
272 EXP_HEADERS+= memory_resource
273 EXP_HEADERS+= propagate_const
278 EXP_HEADERS+= type_traits
279 EXP_HEADERS+= unordered_map
280 EXP_HEADERS+= unordered_set
281 EXP_HEADERS+= utility
284 .for hdr in ${EXP_HEADERS}
285 EXP+= ${HDRDIR}/experimental/${hdr}
287 EXPDIR= ${CXXINCLUDEDIR}/experimental
290 EXT_HEADERS+= hash_map
291 EXT_HEADERS+= hash_set
293 .for hdr in ${EXT_HEADERS}
294 EXT+= ${HDRDIR}/ext/${hdr}
296 EXTDIR= ${CXXINCLUDEDIR}/ext
298 .include <bsd.lib.mk>