1RELUP=	/..
2.include "../../Makefile.inc"
3SRCDIR=	${GCCDIR}/libstdc++-v3
4PREDIR=	${SRCDIR}/config/abi/pre
5.include "Makefile.src"
6
7LIB=		stdc++
8SHLIB_MAJOR=	9
9
10.PATH:	${SRCDIR}/src/c++98
11.PATH:	${SRCDIR}/src/c++11
12
13# for now do not let the use of -flto (-Wodr...)
14.if ${CFLAGS:M-flto}
15CFLAGS+=	-fno-lto
16LDFLAGS+=	-flto
17.endif
18
19CFLAGS+=	-I${.OBJDIR}
20CXXFLAGS+=	-fno-implicit-templates
21CXXFLAGS+=	-fdiagnostics-show-location=once
22CXXFLAGS+=	-ffunction-sections -fdata-sections
23LDFLAGS+=	-Wl,-z -Wl,relro -Wl,--gc-sections
24VERSION_MAP=	${.OBJDIR}/libstdcxx.map
25
26FLAGS_GROUPS=		gnu11
27gnu11_FLAGS=		-std=gnu++11
28gnu11_FLAGS_FILES=	${cxx11_sources:S|++|xx|}
29
30CONVARCS=	../components/libconv_supc/libsupcxxconvenience.a
31CONVARCS+=	../components/libconv_1998/libcxx98convenience.a
32CONVARCS+=	../components/libconv_2011/libcxx11convenience.a
33LDADD=		-Wl,--whole-archive ${CONVARCS:.a=_pic.a} -lm
34LDADD+=		-Wl,--no-whole-archive
35ARADD=		${CONVARCS} ${LIBM}
36
37# The AR script is a nice trick, but it *cannot* handle "++" on any line
38# To work around this incredible limitation, copy files with "++" in
39# their names to a new file name (transform ++ => xx)
40
41SRCS=		${libstdc___la_SOURCES:S|++|xx|}
42PROBLEMS=	${libstdc___la_SOURCES:M*++*}
43PROBLEMSXX=	${PROBLEMS:S|++|xx|}
44
45# Override bsd.lib.mk scripts
46libstdc++.a: ${SRCS:.cc=.o} script.ar
47	@${ECHO} building static ${LIB} library via script
48	rm -f ${.TARGET}
49	${AR} -M < script.ar
50	mv libstdcxx.a ${.TARGET}
51	${RANLIB} ${.TARGET}
52
53libstdc++_p.a: ${SRCS:.cc=.po} script_p.ar
54	@${ECHO} building profiled ${LIB} library via script
55	rm -f ${.TARGET}
56	${AR} -M < script_p.ar
57	mv libstdcxx_p.a ${.TARGET}
58	${RANLIB} ${.TARGET}
59
60${PROBLEMSXX}: ${PROBLEMS}
61	cp ${SRCDIR}/src/c++11/${.TARGET:S|xx|++|} ${.TARGET}
62
63gstdint.h:
64	@echo "#include <stdint.h>" > ${.TARGET}
65
66script.ar:
67	@echo "CREATE libstdcxx.a"	>  ${.TARGET}
68.for arc in ${CONVARCS}
69	@echo "ADDLIB ${arc}"		>> ${.TARGET}
70.endfor
71.for obj in ${SRCS:.cc=.o}
72	@echo "ADDMOD ${obj}"		>> ${.TARGET}
73.endfor
74	@echo "SAVE"			>> ${.TARGET}
75	@echo "END"			>> ${.TARGET}
76
77script_p.ar:
78	@echo "CREATE libstdcxx_p.a"	>  ${.TARGET}
79.for arc in ${CONVARCS:.a=_p.a}
80	@echo "ADDLIB ${arc}"		>> ${.TARGET}
81.endfor
82.for obj in ${SRCS:.cc=.po}
83	@echo "ADDMOD ${obj}"		>> ${.TARGET}
84.endfor
85	@echo "SAVE"			>> ${.TARGET}
86	@echo "END"			>> ${.TARGET}
87
88libstdcxx.map: ${PREDIR}/gnu.ver ${PREDIR}/float128.ver
89	cat ${.ALLSRC} | grep -E -v '^[	 ]*#(#| |$$)' | \
90	${CC} -E -P -include ${.CURDIR}/../headers/config.h - > ${.TARGET}
91
92GENFILES=	gstdint.h script.ar script_p.ar ${PROBLEMSXX} libstdcxx.map
93CLEANFILES=	${GENFILES}
94beforedepend:	${GENFILES}
95
96.include <bsd.lib.mk>
97