Makefile revision 360784
1# $FreeBSD: stable/11/lib/libc++/Makefile 360784 2020-05-07 16:34:01Z dim $
2
3.include <src.opts.mk>
4
5PACKAGE=	clibs
6_LIBCXXRTDIR=	${SRCTOP}/contrib/libcxxrt
7HDRDIR=		${SRCTOP}/contrib/llvm-project/libcxx/include
8SRCDIR=		${SRCTOP}/contrib/llvm-project/libcxx/src
9CXXINCLUDEDIR=	${INCLUDEDIR}/c++/v${SHLIB_MAJOR}
10.if ${MACHINE_CPUARCH} == "arm"
11STATIC_CXXFLAGS+= -mlong-calls
12.endif
13
14.PATH: ${SRCDIR}
15
16LIB=		c++
17SHLIB_MAJOR=	1
18SHLIB_LDSCRIPT=	libc++.ldscript
19
20SRCS+=		algorithm.cpp
21SRCS+=		any.cpp
22SRCS+=		bind.cpp
23SRCS+=		charconv.cpp
24SRCS+=		chrono.cpp
25SRCS+=		condition_variable.cpp
26SRCS+=		condition_variable_destructor.cpp
27SRCS+=		debug.cpp
28SRCS+=		exception.cpp
29SRCS+=		filesystem/directory_iterator.cpp
30SRCS+=		filesystem/int128_builtins.cpp
31SRCS+=		filesystem/operations.cpp
32SRCS+=		functional.cpp
33SRCS+=		future.cpp
34SRCS+=		hash.cpp
35SRCS+=		ios.cpp
36SRCS+=		iostream.cpp
37SRCS+=		locale.cpp
38SRCS+=		memory.cpp
39SRCS+=		mutex.cpp
40SRCS+=		mutex_destructor.cpp
41SRCS+=		new.cpp
42SRCS+=		optional.cpp
43SRCS+=		random.cpp
44SRCS+=		regex.cpp
45SRCS+=		shared_mutex.cpp
46SRCS+=		stdexcept.cpp
47SRCS+=		string.cpp
48SRCS+=		strstream.cpp
49SRCS+=		system_error.cpp
50SRCS+=		thread.cpp
51SRCS+=		typeinfo.cpp
52SRCS+=		utility.cpp
53SRCS+=		valarray.cpp
54SRCS+=		variant.cpp
55SRCS+=		vector.cpp
56
57CXXRT_SRCS+=	auxhelper.cc
58CXXRT_SRCS+=	dynamic_cast.cc
59CXXRT_SRCS+=	exception.cc
60CXXRT_SRCS+=	guard.cc
61CXXRT_SRCS+=	libelftc_dem_gnu3.c
62CXXRT_SRCS+=	memory.cc
63CXXRT_SRCS+=	stdexcept.cc
64CXXRT_SRCS+=	terminate.cc
65CXXRT_SRCS+=	typeinfo.cc
66
67.for _S in ${CXXRT_SRCS}
68CLEANFILES+=	cxxrt_${_S}
69STATICOBJS+=	cxxrt_${_S:R}.o
70cxxrt_${_S}: ${_LIBCXXRTDIR}/${_S} .NOMETA
71	ln -sf ${.ALLSRC} ${.TARGET}
72.endfor
73
74WARNS=		0
75CFLAGS+=	-isystem ${HDRDIR}
76CFLAGS+=	-isystem ${_LIBCXXRTDIR}
77CFLAGS+=	-nostdinc++
78CFLAGS+=	-nostdlib
79CFLAGS+=	-D_LIBCPP_BUILDING_LIBRARY
80CFLAGS+=	-DLIBCXXRT
81CFLAGS+=	-ffunction-sections
82CFLAGS+=	-fdata-sections
83.if empty(CXXFLAGS:M-std=*)
84CXXFLAGS+=	-std=c++14
85.endif
86
87LIBADD+=	cxxrt
88INCSGROUPS=	STD EXP EXT
89
90STD_HEADERS+=	__bit_reference
91STD_HEADERS+=	__bsd_locale_defaults.h
92STD_HEADERS+=	__bsd_locale_fallbacks.h
93STD_HEADERS+=	__config
94STD_HEADERS+=	__debug
95STD_HEADERS+=	__errc
96STD_HEADERS+=	__functional_03
97STD_HEADERS+=	__functional_base
98STD_HEADERS+=	__functional_base_03
99STD_HEADERS+=	__hash_table
100STD_HEADERS+=	__libcpp_version
101STD_HEADERS+=	__locale
102STD_HEADERS+=	__mutex_base
103STD_HEADERS+=	__node_handle
104STD_HEADERS+=	__nullptr
105STD_HEADERS+=	__split_buffer
106STD_HEADERS+=	__sso_allocator
107STD_HEADERS+=	__std_stream
108STD_HEADERS+=	__string
109STD_HEADERS+=	__threading_support
110STD_HEADERS+=	__tree
111STD_HEADERS+=	__tuple
112STD_HEADERS+=	__undef_macros
113STD_HEADERS+=	algorithm
114STD_HEADERS+=	any
115STD_HEADERS+=	array
116STD_HEADERS+=	atomic
117STD_HEADERS+=	bit
118STD_HEADERS+=	bitset
119STD_HEADERS+=	cassert
120STD_HEADERS+=	ccomplex
121STD_HEADERS+=	cctype
122STD_HEADERS+=	cerrno
123STD_HEADERS+=	cfenv
124STD_HEADERS+=	cfloat
125STD_HEADERS+=	charconv
126STD_HEADERS+=	chrono
127STD_HEADERS+=	cinttypes
128STD_HEADERS+=	ciso646
129STD_HEADERS+=	climits
130STD_HEADERS+=	clocale
131STD_HEADERS+=	cmath
132STD_HEADERS+=	codecvt
133STD_HEADERS+=	compare
134STD_HEADERS+=	complex
135STD_HEADERS+=	complex.h
136STD_HEADERS+=	condition_variable
137STD_HEADERS+=	csetjmp
138STD_HEADERS+=	csignal
139STD_HEADERS+=	cstdarg
140STD_HEADERS+=	cstdbool
141STD_HEADERS+=	cstddef
142STD_HEADERS+=	cstdint
143STD_HEADERS+=	cstdio
144STD_HEADERS+=	cstdlib
145STD_HEADERS+=	cstring
146STD_HEADERS+=	ctgmath
147STD_HEADERS+=	ctime
148STD_HEADERS+=	ctype.h
149STD_HEADERS+=	cwchar
150STD_HEADERS+=	cwctype
151STD_HEADERS+=	deque
152STD_HEADERS+=	errno.h
153STD_HEADERS+=	exception
154STD_HEADERS+=	fenv.h
155STD_HEADERS+=	filesystem
156STD_HEADERS+=	float.h
157STD_HEADERS+=	forward_list
158STD_HEADERS+=	fstream
159STD_HEADERS+=	functional
160STD_HEADERS+=	future
161STD_HEADERS+=	initializer_list
162STD_HEADERS+=	inttypes.h
163STD_HEADERS+=	iomanip
164STD_HEADERS+=	ios
165STD_HEADERS+=	iosfwd
166STD_HEADERS+=	iostream
167STD_HEADERS+=	istream
168STD_HEADERS+=	iterator
169STD_HEADERS+=	limits
170STD_HEADERS+=	limits.h
171STD_HEADERS+=	list
172STD_HEADERS+=	locale
173STD_HEADERS+=	locale.h
174STD_HEADERS+=	map
175STD_HEADERS+=	math.h
176STD_HEADERS+=	memory
177STD_HEADERS+=	mutex
178STD_HEADERS+=	new
179STD_HEADERS+=	numeric
180STD_HEADERS+=	optional
181STD_HEADERS+=	ostream
182STD_HEADERS+=	queue
183STD_HEADERS+=	random
184STD_HEADERS+=	ratio
185STD_HEADERS+=	regex
186STD_HEADERS+=	scoped_allocator
187STD_HEADERS+=	set
188STD_HEADERS+=	setjmp.h
189STD_HEADERS+=	shared_mutex
190STD_HEADERS+=	span
191STD_HEADERS+=	sstream
192STD_HEADERS+=	stack
193STD_HEADERS+=	stdbool.h
194STD_HEADERS+=	stddef.h
195STD_HEADERS+=	stdexcept
196STD_HEADERS+=	stdint.h
197STD_HEADERS+=	stdio.h
198STD_HEADERS+=	stdlib.h
199STD_HEADERS+=	streambuf
200STD_HEADERS+=	string
201STD_HEADERS+=	string.h
202STD_HEADERS+=	string_view
203STD_HEADERS+=	strstream
204STD_HEADERS+=	system_error
205STD_HEADERS+=	tgmath.h
206STD_HEADERS+=	thread
207STD_HEADERS+=	tuple
208STD_HEADERS+=	type_traits
209STD_HEADERS+=	typeindex
210STD_HEADERS+=	typeinfo
211STD_HEADERS+=	unordered_map
212STD_HEADERS+=	unordered_set
213STD_HEADERS+=	utility
214STD_HEADERS+=	valarray
215STD_HEADERS+=	variant
216STD_HEADERS+=	vector
217STD_HEADERS+=	version
218STD_HEADERS+=	wchar.h
219STD_HEADERS+=	wctype.h
220
221RT_HEADERS+=	cxxabi.h
222RT_HEADERS+=	unwind-arm.h
223RT_HEADERS+=	unwind-itanium.h
224RT_HEADERS+=	unwind.h
225
226.for hdr in ${STD_HEADERS}
227STD+=		${HDRDIR}/${hdr}
228INCSLINKS+=	../${hdr} ${CXXINCLUDEDIR}/tr1/${hdr}
229.endfor
230.for hdr in ${RT_HEADERS}
231STD+=		${_LIBCXXRTDIR}/${hdr}
232.endfor
233STDDIR=		${CXXINCLUDEDIR}
234
235EXP_HEADERS+=	__config
236EXP_HEADERS+=	__memory
237EXP_HEADERS+=	algorithm
238EXP_HEADERS+=	coroutine
239EXP_HEADERS+=	deque
240EXP_HEADERS+=	filesystem
241EXP_HEADERS+=	forward_list
242EXP_HEADERS+=	functional
243EXP_HEADERS+=	iterator
244EXP_HEADERS+=	list
245EXP_HEADERS+=	map
246EXP_HEADERS+=	memory_resource
247EXP_HEADERS+=	propagate_const
248EXP_HEADERS+=	regex
249EXP_HEADERS+=	set
250EXP_HEADERS+=	simd
251EXP_HEADERS+=	string
252EXP_HEADERS+=	type_traits
253EXP_HEADERS+=	unordered_map
254EXP_HEADERS+=	unordered_set
255EXP_HEADERS+=	utility
256EXP_HEADERS+=	vector
257
258.for hdr in ${EXP_HEADERS}
259EXP+=		${HDRDIR}/experimental/${hdr}
260.endfor
261EXPDIR=		${CXXINCLUDEDIR}/experimental
262
263EXT_HEADERS+=	__hash
264EXT_HEADERS+=	hash_map
265EXT_HEADERS+=	hash_set
266
267.for hdr in ${EXT_HEADERS}
268EXT+=		${HDRDIR}/ext/${hdr}
269.endfor
270EXTDIR=		${CXXINCLUDEDIR}/ext
271
272.if ${MK_GNUCXX} == "no" && ${COMPILER_TYPE} == "gcc"
273CLEANFILES+=	libstdc++.so libstdc++.a
274
275afterinstall:
276	${INSTALL_SYMLINK} ${DESTDIR}${LIBDIR}/lib${LIB}.so \
277		${.OBJDIR}/libstdc++.so
278	${INSTALL_SYMLINK} ${DESTDIR}${LIBDIR}/lib${LIB}.a \
279		${.OBJDIR}/libstdc++.a
280.endif
281
282.include <bsd.lib.mk>
283