2 .include "../../Makefile.inc"
3 SRCDIR= ${GCCDIR}/libstdc++-v3
4 PREDIR= ${SRCDIR}/config/abi/pre
5 .include "Makefile.src"
10 .PATH: ${SRCDIR}/src/c++98
11 .PATH: ${SRCDIR}/src/c++11
14 CXXFLAGS+= -fno-implicit-templates
15 CXXFLAGS+= -fdiagnostics-show-location=once
16 CXXFLAGS+= -ffunction-sections -fdata-sections
17 LDFLAGS+= -Wl,-z -Wl,relro -Wl,--gc-sections
18 VERSION_MAP= ${.OBJDIR}/libstdcxx.map
21 gnu11_FLAGS= -std=gnu++11
22 gnu11_FLAGS_FILES= ${cxx11_sources:S|++|xx|}
24 CONVARCS= ../components/libconv_supc/libsupcxxconvenience.a
25 CONVARCS+= ../components/libconv_1998/libcxx98convenience.a
26 CONVARCS+= ../components/libconv_2011/libcxx11convenience.a
27 LDADD= -Wl,--whole-archive ${CONVARCS:.a=_pic.a} -lm
28 LDADD+= -Wl,--no-whole-archive
29 ARADD= ${CONVARCS} ${LIBM}
31 # The AR script is a nice trick, but it *cannot* handle "++" on any line
32 # To work around this incredible limitation, copy files with "++" in
33 # their names to a new file name (transform ++ => xx)
35 SRCS= ${libstdc___la_SOURCES:S|++|xx|}
36 PROBLEMS= ${libstdc___la_SOURCES:M*++*}
37 PROBLEMSXX= ${PROBLEMS:S|++|xx|}
39 libstdc++.a: ${SRCS:.cc=.o} script.ar
40 @${ECHO} building static ${LIB} library via script
43 mv libstdcxx.a ${.TARGET}
45 ${PROBLEMSXX}: ${PROBLEMS}
46 cp ${SRCDIR}/src/c++11/${.TARGET:S|xx|++|} ${.TARGET}
49 @echo "#include <stdint.h>" > ${.TARGET}
52 @echo "CREATE libstdcxx.a" > ${.TARGET}
53 .for arc in ${CONVARCS}
54 @echo "ADDLIB ${arc}" >> ${.TARGET}
56 .for obj in ${SRCS:.cc=.o}
57 @echo "ADDMOD ${obj}" >> ${.TARGET}
59 @echo "SAVE" >> ${.TARGET}
60 @echo "END" >> ${.TARGET}
62 libstdcxx.map: ${PREDIR}/gnu.ver ${PREDIR}/float128.ver
63 cat ${.ALLSRC} | grep -E -v '^[ ]*#(#| |$)' | \
64 ${CC} -E -P -include ${.CURDIR}/../headers/config.h - > ${.TARGET}
66 GENFILES= gstdint.h script.ar ${PROBLEMSXX} libstdcxx.map
67 CLEANFILES= ${GENFILES}
68 beforedepend: ${GENFILES}