Makefile revision 1.63 1 1.63 mrg # $NetBSD: Makefile,v 1.63 2025/10/29 06:08:35 mrg Exp $
2 1.1 mrg
3 1.1 mrg REQUIRETOOLS= yes
4 1.1 mrg NOLINT= # defined
5 1.27 joerg UNSUPPORTED_COMPILER.clang= # defined
6 1.1 mrg
7 1.15 mrg .include <bsd.init.mk>
8 1.1 mrg
9 1.6 matt .include "Makefile.inc"
10 1.6 matt
11 1.1 mrg LIB= stdc++
12 1.1 mrg
13 1.2 mrg LIBDPLIBS+= m ${.CURDIR}/../../../../../lib/libm
14 1.1 mrg
15 1.13 christos #COPTS+= -pthread
16 1.13 christos #LDFLAGS+= -pthread
17 1.17 joerg .if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
18 1.17 joerg COPTS.random.cc+= ${${ACTIVE_CC} == "clang":? -mrdrnd :}
19 1.17 joerg .endif
20 1.12 mrg
21 1.45 mrg DIST= ${GCCDIST}
22 1.45 mrg GNUVER= ${DIST}/libstdc++-v3/config/abi/pre/gnu.ver
23 1.42 mrg SYMBOLS= libstdc++-symbols.ver
24 1.29 mrg .if ${MKPIC} != "no"
25 1.45 mrg ${SYMBOLS}: Makefile ${GNUVER}
26 1.45 mrg cat ${GNUVER} ${G_port_specific_symbol_files} | \
27 1.33 mrg ${TOOL_GREP} -E -v '^[ ]*#(#| |$$)' | \
28 1.45 mrg ${CXX} -I${DESTDIR}/usr/include/g++ -E -P -include ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/symver-config.h - > \
29 1.29 mrg ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} && rm -f ${.TARGET}.tmp
30 1.29 mrg
31 1.45 mrg CLEANFILES+= ${SYMBOLS} ${SYMBOLS}.tmp
32 1.45 mrg
33 1.45 mrg DPADD+= ${SYMBOLS}
34 1.42 mrg
35 1.32 mrg .if ${MKPICLIB} != "no"
36 1.42 mrg libstdc++_pic.a:: ${SYMBOLS}
37 1.32 mrg .else
38 1.42 mrg libstdc++.a:: ${SYMBOLS}
39 1.32 mrg .endif
40 1.29 mrg
41 1.29 mrg LDFLAGS+= -Wl,-O1 \
42 1.29 mrg -Wl,--gc-sections \
43 1.42 mrg -Wl,--version-script=${SYMBOLS}
44 1.29 mrg .endif
45 1.29 mrg
46 1.18 joerg CXXFLAGS.clang+= -stdlib=libstdc++ -std=c++11 -D_GLIBCXX_ABI_TAG_CXX11=
47 1.18 joerg CXXFLAGS+= ${CXXFLAGS.${ACTIVE_CC}}
48 1.1 mrg CWARNFLAGS.clang+= -Wno-logical-op-parentheses \
49 1.1 mrg -Wno-deprecated-writable-strings -Wno-parentheses
50 1.1 mrg
51 1.9 mrg .include "${.CURDIR}/../libsupc++/Makefile.common"
52 1.9 mrg
53 1.9 mrg .if exists(${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk) && ${MKGCC} != "no"
54 1.9 mrg .include "${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk"
55 1.1 mrg
56 1.46 mrg SHLIB_MAJOR= 9
57 1.58 mrg SHLIB_MINOR= 2
58 1.1 mrg
59 1.1 mrg SUBDIR= include
60 1.1 mrg
61 1.3 mrg SRCS= ${LIBSUPCXXSRCS} ${LIBSTDCXXSRCS}
62 1.36 mrg
63 1.50 mrg GCC_MACHINE_SUBDIR=${MACHINE_CPU:C/powerpc.*/rs6000/:C/x86_64/i386/}
64 1.50 mrg
65 1.62 mrg # Only the shared library is build with -D_GLIBCXX_SHARED, and the
66 1.62 mrg # static library shouldn't need to provide old symbols.
67 1.62 mrg CSHLIBFLAGS+= -D_GLIBCXX_SHARED
68 1.59 mrg
69 1.36 mrg CXXFLAGS+= -fno-implicit-templates
70 1.36 mrg CPPFLAGS+= -I${DIST}/libstdc++-v3/include
71 1.50 mrg CPPFLAGS+= -I${DIST}/gcc/config/${GCC_MACHINE_SUBDIR}
72 1.36 mrg CPPFLAGS+= -I${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}
73 1.59 mrg CPPFLAGS+= -DGTHREAD_USE_WEAK -DSUPPORTS_WEAK
74 1.48 christos .if ${G_CLOCALE_CC:M*dragonfly*} != ""
75 1.48 christos CPPFLAGS+= -I${CONF}/locale/dragonfly
76 1.48 christos LOCALETYPE= dragonfly
77 1.48 christos .else
78 1.48 christos LOCALETYPE= generic
79 1.48 christos .endif
80 1.36 mrg
81 1.1 mrg # affects profiling; can't switch it off just for profiling easily.
82 1.1 mrg #CXXFLAGS+= ${G_SECTION_FLAGS}
83 1.1 mrg #CXXFLAGS+= -ffunction-sections -fdata-sections
84 1.36 mrg COPTS.bitmap_allocator.cc+= -ffunction-sections -fdata-sections
85 1.37 mrg COPTS.pool_allocator.cc+= -ffunction-sections -fdata-sections
86 1.1 mrg
87 1.1 mrg CONF= ${DIST}/libstdc++-v3/config
88 1.1 mrg
89 1.1 mrg GLIBCPP_INCLUDE_DIR= ${DESTDIR}/usr/include/g++
90 1.1 mrg
91 1.11 mrg # Template instantiation bug workaround for -O<2/s
92 1.54 mrg COPTS.cp-demangle.cc += -Wno-stack-protector
93 1.24 christos COPTS.fstream-inst.cc += -Wno-stack-protector
94 1.24 christos COPTS.locale-inst.cc += -Wno-stack-protector
95 1.24 christos COPTS.misc-inst.cc += -Wno-stack-protector
96 1.24 christos COPTS.ostream-inst.cc += -Wno-stack-protector
97 1.24 christos COPTS.functexcept.cc += -Wno-stack-protector
98 1.24 christos COPTS.valarray-inst.cc += -Wno-stack-protector
99 1.24 christos COPTS.wlocale-inst.cc += -Wno-stack-protector
100 1.24 christos COPTS.snprintf_lite.cc += -Wno-stack-protector
101 1.25 christos # From system headers.
102 1.25 christos COPTS.cxx11-wlocale-inst.cc +=-Wno-stack-protector
103 1.25 christos COPTS.cxx11-locale-inst.cc +=-Wno-stack-protector
104 1.25 christos COPTS.cxx11-wlocale-inst.cc +=-Wno-stack-protector
105 1.48 christos COPTS.codecvt_members.cc +=-Wno-stack-protector
106 1.25 christos COPTS.compatibility-thread-c++0x.cc += -Wno-deprecated-declarations
107 1.24 christos COPTS.concept-inst.cc += -fimplicit-templates
108 1.36 mrg COPTS.collate_members_cow.cc += -fimplicit-templates
109 1.36 mrg COPTS.messages_members_cow.cc += -fimplicit-templates
110 1.36 mrg COPTS.monetary_members_cow.cc += -fimplicit-templates
111 1.36 mrg COPTS.numeric_members_cow.cc += -fimplicit-templates
112 1.24 christos COPTS.hashtable_c++0x.cc += -fimplicit-templates
113 1.36 mrg COPTS.c++locale.cc += -fimplicit-templates
114 1.25 christos COPTS.functexcept.cc += -Wno-deprecated-declarations
115 1.25 christos COPTS.future.cc += -Wno-deprecated-declarations
116 1.25 christos COPTS.shared_ptr.cc += -Wno-deprecated-declarations
117 1.25 christos COPTS.thread.cc += -Wno-deprecated-declarations
118 1.24 christos CPPFLAGS.strstream.cc += -I$(GLIBCPP_INCLUDE_DIR)/backward -Wno-deprecated
119 1.1 mrg
120 1.3 mrg CPPFLAGS.cp-demangle.cc += -DIN_GLIBCPP_V3
121 1.3 mrg CPPFLAGS.concept-inst.cc += -D_GLIBCXX_CONCEPT_CHECKS
122 1.3 mrg CPPFLAGS.parallel_list.cc += -D_GLIBCXX_PARALLEL
123 1.3 mrg CPPFLAGS.parallel_settings.cc += -D_GLIBCXX_PARALLEL
124 1.3 mrg CPPFLAGS.compatibility-parallel_list.cc += -D_GLIBCXX_PARALLEL
125 1.29 mrg CPPFLAGS.compatibility.cc+= -I${DIST}/libstdc++-v3/config
126 1.51 mrg CPPFLAGS.c11-cow-string-inst.cc+= -I${DIST}/libstdc++-v3/src/c++11
127 1.51 mrg CPPFLAGS.c17-cow-string-inst.cc+= -I${DIST}/libstdc++-v3/src/c++17
128 1.3 mrg
129 1.9 mrg cp-demangle.d cp-demangle.o: cp-demangle.h
130 1.9 mrg
131 1.26 christos .if ${MACHINE_ARCH} == "i386"
132 1.26 christos COPTS.random.cc += -Wno-error=psabi
133 1.26 christos COPTS.cow-string-inst.cc += -Wno-error=psabi
134 1.26 christos .endif
135 1.26 christos
136 1.1 mrg # XXX
137 1.1 mrg MKDEPFLAGS+= -I$(GLIBCPP_INCLUDE_DIR)/backward
138 1.1 mrg
139 1.9 mrg GLIBCXX_SRCDIR= ${DIST}/libstdc++-v3
140 1.9 mrg
141 1.9 mrg BUILDSYMLINKS+= \
142 1.9 mrg ${GLIBCXX_SRCDIR}/${G_CCODECVT_CC} codecvt_members.cc \
143 1.9 mrg ${GLIBCXX_SRCDIR}/${G_CCOLLATE_CC} collate_members.cc \
144 1.9 mrg ${GLIBCXX_SRCDIR}/${G_CCTYPE_CC} ctype_members.cc \
145 1.9 mrg ${GLIBCXX_SRCDIR}/${G_CMESSAGES_CC} messages_members.cc \
146 1.9 mrg ${GLIBCXX_SRCDIR}/${G_CMONEY_CC} monetary_members.cc \
147 1.9 mrg ${GLIBCXX_SRCDIR}/${G_CNUMERIC_CC} numeric_members.cc \
148 1.9 mrg ${GLIBCXX_SRCDIR}/${G_CTIME_CC} time_members.cc \
149 1.53 mrg ${GLIBCXX_SRCDIR}/${G_ATOMICITY_SRCDIR}/atomicity.h atomicity.cc \
150 1.9 mrg ${GLIBCXX_SRCDIR}/${G_CLOCALE_CC} c++locale.cc \
151 1.9 mrg ${GLIBCXX_SRCDIR}/${G_BASIC_FILE_CC} basic_file.cc \
152 1.9 mrg ${DIST}/libiberty/cp-demangle.c cp-demangle.c \
153 1.21 mrg ${DIST}/libiberty/cp-demangle.h cp-demangle.h \
154 1.21 mrg ${GLIBCXX_SRCDIR}/${G_CCOLLATE_CC} collate_members_cow.cc \
155 1.21 mrg ${GLIBCXX_SRCDIR}/${G_CMESSAGES_CC} messages_members_cow.cc \
156 1.21 mrg ${GLIBCXX_SRCDIR}/${G_CMONEY_CC} monetary_members_cow.cc \
157 1.21 mrg ${GLIBCXX_SRCDIR}/${G_CNUMERIC_CC} numeric_members_cow.cc
158 1.9 mrg
159 1.29 mrg # both c++98 and c++11 have codecvt.cc files.
160 1.51 mrg # both c++11 and c++17 have cow-string-inst.cc, ostream-inst.cc,
161 1.51 mrg # and string-inst.cc.
162 1.51 mrg .for _N _V1 _V2 in \
163 1.51 mrg codecvt 98 11 \
164 1.51 mrg cow-string-inst 11 17 \
165 1.51 mrg ostream-inst 11 17 \
166 1.55 mrg string-inst 11 17 \
167 1.55 mrg sstream-inst 11 20
168 1.51 mrg
169 1.22 mrg BUILDSYMLINKS+= \
170 1.51 mrg ${GLIBCXX_SRCDIR}/src/c++${_V1}/${_N}.cc c${_V1}-${_N}.cc
171 1.22 mrg BUILDSYMLINKS+= \
172 1.51 mrg ${GLIBCXX_SRCDIR}/src/c++${_V2}/${_N}.cc c${_V2}-${_N}.cc
173 1.51 mrg
174 1.51 mrg .endfor
175 1.51 mrg
176 1.35 mrg .include "../Makefile.gthr"
177 1.9 mrg
178 1.44 mrg # XXX Special rules in c++98/Makefile; may move into c++11 in future GCC.
179 1.29 mrg CXX11_ALWAYS= localename.cc \
180 1.44 mrg locale_init.cc
181 1.37 mrg
182 1.49 mrg FCHAR8_SRCS+= localename.cc \
183 1.49 mrg locale_init.cc \
184 1.49 mrg c11-codecvt.cc \
185 1.49 mrg limits.cc
186 1.49 mrg
187 1.44 mrg .for _s in ${G_cxx11_sources} ${CXX11_ALWAYS}
188 1.37 mrg COPTS.${_s}+= -std=gnu++11
189 1.37 mrg .endfor
190 1.37 mrg
191 1.44 mrg .for _s in ${G_cxx98_sources}
192 1.43 mrg COPTS.${_s}+= -std=gnu++98
193 1.43 mrg .endfor
194 1.43 mrg
195 1.49 mrg .for _s in ${FCHAR8_SRCS}
196 1.49 mrg COPTS.${_s}+= -fchar8_t
197 1.49 mrg .endfor
198 1.49 mrg
199 1.24 christos COPTS.cp-demangle.c += -Wno-unused-function
200 1.24 christos
201 1.29 mrg COPTS.ext-inst.cc+= -Wno-error
202 1.29 mrg
203 1.21 mrg .for f in collate_members_cow \
204 1.21 mrg messages_members_cow \
205 1.21 mrg monetary_members_cow \
206 1.31 mrg numeric_members_cow \
207 1.31 mrg c++locale
208 1.21 mrg COPTS.${f}.cc+= -fimplicit-templates ${G_GLIBCXX_ABI_FLAGS}
209 1.9 mrg .endfor
210 1.9 mrg
211 1.54 mrg # XXXGCC12
212 1.54 mrg # hits on sparc, sparc64, armv7 at least
213 1.54 mrg COPTS.floating_to_chars.cc+= -Wno-error=unused-function
214 1.56 christos COPTS.cp-demangle.c+= -Wno-error=stack-protector
215 1.56 christos COPTS.floating_to_chars.cc+= -Wno-error=stack-protector
216 1.54 mrg
217 1.57 mrg # GCC 14 special cases
218 1.57 mrg tzdata.zi.h: ${DIST}/libstdc++-v3/src/c++20/tzdata.zi
219 1.57 mrg echo 'static const char tzdata_chars[] = R"__libstdcxx__(' > ${.TARGET}.tmp && \
220 1.57 mrg cat $^ >> ${.TARGET}.tmp && \
221 1.57 mrg echo ')__libstdcxx__";' >> ${.TARGET}.tmp && mv ${.TARGET}.tmp $@
222 1.57 mrg
223 1.63 mrg # libbacktrace
224 1.63 mrg # XXX This is not new, but GCC 14 is the first to start demanding it properly.
225 1.63 mrg .for f in ${G_LIBBACKTRACE_SOURCES} ${G_LIBBACKTRACE_DEPS}
226 1.63 mrg . if ${f} == "cp-demangle.c"
227 1.63 mrg BUILDSYMLINKS+= \
228 1.63 mrg ${DIST}/libiberty/${f} std_stacktrace-${f}
229 1.63 mrg CPPFLAGS.std_stacktrace-${f}+= \
230 1.63 mrg -I${.CURDIR}/../libiberty/arch/${LIBSTDCXX_MACHINE_ARCH}
231 1.63 mrg . else
232 1.63 mrg BUILDSYMLINKS+= \
233 1.63 mrg ${DIST}/libbacktrace/${f} std_stacktrace-${f}
234 1.63 mrg CPPFLAGS.std_stacktrace-${f}+= \
235 1.63 mrg -I${.CURDIR}/../libbacktrace/arch/${LIBSTDCXX_MACHINE_ARCH} \
236 1.63 mrg -I${DIST}/libbacktrace
237 1.63 mrg . endif
238 1.63 mrg SRCS+= std_stacktrace-${f}
239 1.63 mrg .endfor
240 1.63 mrg
241 1.57 mrg tzdb.cc: tzdata.zi.h
242 1.57 mrg
243 1.1 mrg .include <bsd.lib.mk>
244 1.1 mrg .include <bsd.subdir.mk>
245 1.1 mrg .include <bsd.info.mk>
246 1.1 mrg
247 1.1 mrg .PATH: ${DIST}/libstdc++-v3/src \
248 1.9 mrg ${DIST}/libstdc++-v3/src/c++98 \
249 1.9 mrg ${DIST}/libstdc++-v3/src/c++11 \
250 1.49 mrg ${DIST}/libstdc++-v3/src/c++17 \
251 1.57 mrg ${DIST}/libstdc++-v3/src/c++20 \
252 1.57 mrg ${DIST}/libstdc++-v3/src/c++23 \
253 1.57 mrg ${DIST}/libstdc++-v3/src/c++26 \
254 1.37 mrg ${DIST}/libstdc++-v3/src/filesystem \
255 1.1 mrg ${DIST}/libstdc++-v3/libsupc++ \
256 1.9 mrg ${DIST}/libstdc++-v3/config/os/bsd/netbsd \
257 1.48 christos ${CONF}/locale/${LOCALETYPE} \
258 1.9 mrg ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}
259 1.1 mrg
260 1.9 mrg ${OBJS}: ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk
261 1.29 mrg
262 1.1 mrg .else
263 1.1 mrg .include <bsd.prog.mk> # do nothing
264 1.1 mrg .endif
265