Makefile revision 1.66 1 1.66 christos # $NetBSD: Makefile,v 1.66 2025/11/06 00:57:05 christos 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.65 mrg GLIBCXX_SRCDIR= ${DIST}/libstdc++-v3
23 1.65 mrg GNUVER= ${GLIBCXX_SRCDIR}/config/abi/pre/gnu.ver
24 1.42 mrg SYMBOLS= libstdc++-symbols.ver
25 1.29 mrg .if ${MKPIC} != "no"
26 1.45 mrg ${SYMBOLS}: Makefile ${GNUVER}
27 1.45 mrg cat ${GNUVER} ${G_port_specific_symbol_files} | \
28 1.33 mrg ${TOOL_GREP} -E -v '^[ ]*#(#| |$$)' | \
29 1.45 mrg ${CXX} -I${DESTDIR}/usr/include/g++ -E -P -include ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/symver-config.h - > \
30 1.29 mrg ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} && rm -f ${.TARGET}.tmp
31 1.29 mrg
32 1.45 mrg CLEANFILES+= ${SYMBOLS} ${SYMBOLS}.tmp
33 1.45 mrg
34 1.45 mrg DPADD+= ${SYMBOLS}
35 1.42 mrg
36 1.32 mrg .if ${MKPICLIB} != "no"
37 1.42 mrg libstdc++_pic.a:: ${SYMBOLS}
38 1.32 mrg .else
39 1.42 mrg libstdc++.a:: ${SYMBOLS}
40 1.32 mrg .endif
41 1.29 mrg
42 1.29 mrg LDFLAGS+= -Wl,-O1 \
43 1.29 mrg -Wl,--gc-sections \
44 1.42 mrg -Wl,--version-script=${SYMBOLS}
45 1.29 mrg .endif
46 1.29 mrg
47 1.18 joerg CXXFLAGS.clang+= -stdlib=libstdc++ -std=c++11 -D_GLIBCXX_ABI_TAG_CXX11=
48 1.18 joerg CXXFLAGS+= ${CXXFLAGS.${ACTIVE_CC}}
49 1.1 mrg CWARNFLAGS.clang+= -Wno-logical-op-parentheses \
50 1.1 mrg -Wno-deprecated-writable-strings -Wno-parentheses
51 1.1 mrg
52 1.9 mrg .include "${.CURDIR}/../libsupc++/Makefile.common"
53 1.9 mrg
54 1.9 mrg .if exists(${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk) && ${MKGCC} != "no"
55 1.9 mrg .include "${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk"
56 1.1 mrg
57 1.46 mrg SHLIB_MAJOR= 9
58 1.58 mrg SHLIB_MINOR= 2
59 1.1 mrg
60 1.1 mrg SUBDIR= include
61 1.1 mrg
62 1.3 mrg SRCS= ${LIBSUPCXXSRCS} ${LIBSTDCXXSRCS}
63 1.36 mrg
64 1.50 mrg GCC_MACHINE_SUBDIR=${MACHINE_CPU:C/powerpc.*/rs6000/:C/x86_64/i386/}
65 1.50 mrg
66 1.62 mrg # Only the shared library is build with -D_GLIBCXX_SHARED, and the
67 1.62 mrg # static library shouldn't need to provide old symbols.
68 1.62 mrg CSHLIBFLAGS+= -D_GLIBCXX_SHARED
69 1.59 mrg
70 1.36 mrg CXXFLAGS+= -fno-implicit-templates
71 1.65 mrg CPPFLAGS+= -I${GLIBCXX_SRCDIR}/include
72 1.50 mrg CPPFLAGS+= -I${DIST}/gcc/config/${GCC_MACHINE_SUBDIR}
73 1.36 mrg CPPFLAGS+= -I${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}
74 1.59 mrg CPPFLAGS+= -DGTHREAD_USE_WEAK -DSUPPORTS_WEAK
75 1.48 christos .if ${G_CLOCALE_CC:M*dragonfly*} != ""
76 1.48 christos CPPFLAGS+= -I${CONF}/locale/dragonfly
77 1.48 christos LOCALETYPE= dragonfly
78 1.48 christos .else
79 1.48 christos LOCALETYPE= generic
80 1.48 christos .endif
81 1.36 mrg
82 1.1 mrg # affects profiling; can't switch it off just for profiling easily.
83 1.1 mrg #CXXFLAGS+= ${G_SECTION_FLAGS}
84 1.1 mrg #CXXFLAGS+= -ffunction-sections -fdata-sections
85 1.36 mrg COPTS.bitmap_allocator.cc+= -ffunction-sections -fdata-sections
86 1.37 mrg COPTS.pool_allocator.cc+= -ffunction-sections -fdata-sections
87 1.1 mrg
88 1.65 mrg CONF= ${GLIBCXX_SRCDIR}/config
89 1.1 mrg
90 1.1 mrg GLIBCPP_INCLUDE_DIR= ${DESTDIR}/usr/include/g++
91 1.1 mrg
92 1.11 mrg # Template instantiation bug workaround for -O<2/s
93 1.54 mrg COPTS.cp-demangle.cc += -Wno-stack-protector
94 1.24 christos COPTS.fstream-inst.cc += -Wno-stack-protector
95 1.24 christos COPTS.locale-inst.cc += -Wno-stack-protector
96 1.24 christos COPTS.misc-inst.cc += -Wno-stack-protector
97 1.24 christos COPTS.ostream-inst.cc += -Wno-stack-protector
98 1.24 christos COPTS.functexcept.cc += -Wno-stack-protector
99 1.24 christos COPTS.valarray-inst.cc += -Wno-stack-protector
100 1.24 christos COPTS.wlocale-inst.cc += -Wno-stack-protector
101 1.24 christos COPTS.snprintf_lite.cc += -Wno-stack-protector
102 1.66 christos COPTS.std_stacktrace-cp-demangle.c += -Wno-stack-protector
103 1.25 christos # From system headers.
104 1.25 christos COPTS.cxx11-wlocale-inst.cc +=-Wno-stack-protector
105 1.25 christos COPTS.cxx11-locale-inst.cc +=-Wno-stack-protector
106 1.25 christos COPTS.cxx11-wlocale-inst.cc +=-Wno-stack-protector
107 1.48 christos COPTS.codecvt_members.cc +=-Wno-stack-protector
108 1.25 christos COPTS.compatibility-thread-c++0x.cc += -Wno-deprecated-declarations
109 1.24 christos COPTS.concept-inst.cc += -fimplicit-templates
110 1.36 mrg COPTS.collate_members_cow.cc += -fimplicit-templates
111 1.36 mrg COPTS.messages_members_cow.cc += -fimplicit-templates
112 1.36 mrg COPTS.monetary_members_cow.cc += -fimplicit-templates
113 1.36 mrg COPTS.numeric_members_cow.cc += -fimplicit-templates
114 1.24 christos COPTS.hashtable_c++0x.cc += -fimplicit-templates
115 1.36 mrg COPTS.c++locale.cc += -fimplicit-templates
116 1.25 christos COPTS.functexcept.cc += -Wno-deprecated-declarations
117 1.25 christos COPTS.future.cc += -Wno-deprecated-declarations
118 1.25 christos COPTS.shared_ptr.cc += -Wno-deprecated-declarations
119 1.25 christos COPTS.thread.cc += -Wno-deprecated-declarations
120 1.24 christos CPPFLAGS.strstream.cc += -I$(GLIBCPP_INCLUDE_DIR)/backward -Wno-deprecated
121 1.1 mrg
122 1.3 mrg CPPFLAGS.cp-demangle.cc += -DIN_GLIBCPP_V3
123 1.3 mrg CPPFLAGS.concept-inst.cc += -D_GLIBCXX_CONCEPT_CHECKS
124 1.3 mrg CPPFLAGS.parallel_list.cc += -D_GLIBCXX_PARALLEL
125 1.3 mrg CPPFLAGS.parallel_settings.cc += -D_GLIBCXX_PARALLEL
126 1.3 mrg CPPFLAGS.compatibility-parallel_list.cc += -D_GLIBCXX_PARALLEL
127 1.65 mrg CPPFLAGS.compatibility.cc+= -I${GLIBCXX_SRCDIR}/config
128 1.65 mrg CPPFLAGS.c11-cow-string-inst.cc+= -I${GLIBCXX_SRCDIR}/src/c++11
129 1.65 mrg CPPFLAGS.c17-cow-string-inst.cc+= -I${GLIBCXX_SRCDIR}/src/c++17
130 1.3 mrg
131 1.9 mrg cp-demangle.d cp-demangle.o: cp-demangle.h
132 1.9 mrg
133 1.26 christos .if ${MACHINE_ARCH} == "i386"
134 1.26 christos COPTS.random.cc += -Wno-error=psabi
135 1.26 christos COPTS.cow-string-inst.cc += -Wno-error=psabi
136 1.26 christos .endif
137 1.26 christos
138 1.1 mrg # XXX
139 1.1 mrg MKDEPFLAGS+= -I$(GLIBCPP_INCLUDE_DIR)/backward
140 1.1 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.65 mrg tzdata.zi.h: ${GLIBCXX_SRCDIR}/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.64 mrg CPPFLAGS.std_stacktrace-${f}+= \
240 1.64 mrg -include ${GLIBCXX_SRCDIR}/src/libbacktrace/backtrace-rename.h
241 1.63 mrg .endfor
242 1.63 mrg
243 1.57 mrg tzdb.cc: tzdata.zi.h
244 1.57 mrg
245 1.1 mrg .include <bsd.lib.mk>
246 1.1 mrg .include <bsd.subdir.mk>
247 1.1 mrg .include <bsd.info.mk>
248 1.1 mrg
249 1.65 mrg .PATH: ${GLIBCXX_SRCDIR}/src \
250 1.65 mrg ${GLIBCXX_SRCDIR}/src/c++98 \
251 1.65 mrg ${GLIBCXX_SRCDIR}/src/c++11 \
252 1.65 mrg ${GLIBCXX_SRCDIR}/src/c++17 \
253 1.65 mrg ${GLIBCXX_SRCDIR}/src/c++20 \
254 1.65 mrg ${GLIBCXX_SRCDIR}/src/c++23 \
255 1.65 mrg ${GLIBCXX_SRCDIR}/src/c++26 \
256 1.65 mrg ${GLIBCXX_SRCDIR}/src/filesystem \
257 1.65 mrg ${GLIBCXX_SRCDIR}/libsupc++ \
258 1.65 mrg ${GLIBCXX_SRCDIR}/config/os/bsd/netbsd \
259 1.48 christos ${CONF}/locale/${LOCALETYPE} \
260 1.9 mrg ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}
261 1.1 mrg
262 1.9 mrg ${OBJS}: ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk
263 1.29 mrg
264 1.1 mrg .else
265 1.1 mrg .include <bsd.prog.mk> # do nothing
266 1.1 mrg .endif
267