# $NetBSD: Makefile,v 1.14 2023/02/20 02:12:20 mrg Exp $
REQUIRETOOLS= yes
NOLINT= # defined
UNSUPPORTED_COMPILER.clang= # defined
.include <bsd.init.mk>
.include "Makefile.inc"
LIB= stdc++
LIBDPLIBS+= m ${.CURDIR}/../../../../../lib/libm
#COPTS+= -pthread
#LDFLAGS+= -pthread
.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
COPTS.random.cc+= ${${ACTIVE_CC} == "clang":? -mrdrnd :}
.endif
CSHLIBFLAGS+= -D_GLIBCXX_COMPAT_
DIST= ${GCCDIST}
GNUVER= ${DIST}/libstdc++-v3/config/abi/pre/gnu.ver
SYMBOLS= libstdc++-symbols.ver
.if ${MKPIC} != "no"
${SYMBOLS}: Makefile ${GNUVER}
cat ${GNUVER} ${G_port_specific_symbol_files} | \
${TOOL_GREP} -E -v '^[ ]*#(#| |$$)' | \
${CXX} -I${DESTDIR}/usr/include/g++ -E -P -include ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/symver-config.h - > \
${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} && rm -f ${.TARGET}.tmp
CLEANFILES+= ${SYMBOLS} ${SYMBOLS}.tmp
DPADD+= ${SYMBOLS}
.if ${MKPICLIB} != "no"
libstdc++_pic.a:: ${SYMBOLS}
.else
libstdc++.a:: ${SYMBOLS}
.endif
LDFLAGS+= -Wl,-O1 \
-Wl,--gc-sections \
-Wl,--version-script=${SYMBOLS}
.endif
CXXFLAGS.clang+= -stdlib=libstdc++ -std=c++11 -D_GLIBCXX_ABI_TAG_CXX11=
CXXFLAGS+= ${CXXFLAGS.${ACTIVE_CC}}
CWARNFLAGS.clang+= -Wno-logical-op-parentheses \
-Wno-deprecated-writable-strings -Wno-parentheses
.include "${.CURDIR}/../libsupc++/Makefile.common"
.if exists(${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk) && ${MKGCC} != "no"
.include "${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk"
SHLIB_MAJOR= 9
SHLIB_MINOR= 0
SUBDIR= include
SRCS= ${LIBSUPCXXSRCS} ${LIBSTDCXXSRCS}
GCC_MACHINE_SUBDIR=${MACHINE_CPU:C/powerpc.*/rs6000/:C/x86_64/i386/}
CXXFLAGS+= -fno-implicit-templates
CPPFLAGS+= -I${DIST}/libstdc++-v3/include
CPPFLAGS+= -I${DIST}/gcc/config/${GCC_MACHINE_SUBDIR}
CPPFLAGS+= -I${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}
CPPFLAGS+= -D_GLIBCXX_SHARED -DGTHREAD_USE_WEAK -DSUPPORTS_WEAK
.if ${G_CLOCALE_CC:M*dragonfly*} != ""
CPPFLAGS+= -I${CONF}/locale/dragonfly
LOCALETYPE= dragonfly
.else
LOCALETYPE= generic
.endif
# affects profiling; can't switch it off just for profiling easily.
#CXXFLAGS+= ${G_SECTION_FLAGS}
#CXXFLAGS+= -ffunction-sections -fdata-sections
COPTS.bitmap_allocator.cc+= -ffunction-sections -fdata-sections
COPTS.pool_allocator.cc+= -ffunction-sections -fdata-sections
CONF= ${DIST}/libstdc++-v3/config
GLIBCPP_INCLUDE_DIR= ${DESTDIR}/usr/include/g++
# Template instantiation bug workaround for -O<2/s
COPTS.cp-demangle.c += -Wno-stack-protector
COPTS.cp-demangle.c += -Wno-stack-protector
COPTS.fstream-inst.cc += -Wno-stack-protector
COPTS.locale-inst.cc += -Wno-stack-protector
COPTS.misc-inst.cc += -Wno-stack-protector
COPTS.ostream-inst.cc += -Wno-stack-protector
COPTS.functexcept.cc += -Wno-stack-protector
COPTS.valarray-inst.cc += -Wno-stack-protector
COPTS.wlocale-inst.cc += -Wno-stack-protector
COPTS.snprintf_lite.cc += -Wno-stack-protector
# From system headers.
COPTS.cxx11-wlocale-inst.cc +=-Wno-stack-protector
COPTS.cxx11-locale-inst.cc +=-Wno-stack-protector
COPTS.cxx11-wlocale-inst.cc +=-Wno-stack-protector
COPTS.codecvt_members.cc +=-Wno-stack-protector
COPTS.compatibility-thread-c++0x.cc += -Wno-deprecated-declarations
COPTS.concept-inst.cc += -fimplicit-templates
COPTS.collate_members_cow.cc += -fimplicit-templates
COPTS.messages_members_cow.cc += -fimplicit-templates
COPTS.monetary_members_cow.cc += -fimplicit-templates
COPTS.numeric_members_cow.cc += -fimplicit-templates
COPTS.hashtable_c++0x.cc += -fimplicit-templates
COPTS.c++locale.cc += -fimplicit-templates
COPTS.functexcept.cc += -Wno-deprecated-declarations
COPTS.future.cc += -Wno-deprecated-declarations
COPTS.shared_ptr.cc += -Wno-deprecated-declarations
COPTS.thread.cc += -Wno-deprecated-declarations
CPPFLAGS.strstream.cc += -I$(GLIBCPP_INCLUDE_DIR)/backward -Wno-deprecated
CPPFLAGS.cp-demangle.cc += -DIN_GLIBCPP_V3
CPPFLAGS.concept-inst.cc += -D_GLIBCXX_CONCEPT_CHECKS
CPPFLAGS.parallel_list.cc += -D_GLIBCXX_PARALLEL
CPPFLAGS.parallel_settings.cc += -D_GLIBCXX_PARALLEL
CPPFLAGS.compatibility-parallel_list.cc += -D_GLIBCXX_PARALLEL
CPPFLAGS.compatibility.cc+= -I${DIST}/libstdc++-v3/config
CPPFLAGS.c11-cow-string-inst.cc+= -I${DIST}/libstdc++-v3/src/c++11
CPPFLAGS.c17-cow-string-inst.cc+= -I${DIST}/libstdc++-v3/src/c++17
cp-demangle.d cp-demangle.o: cp-demangle.h
.if ${MACHINE_ARCH} == "i386"
COPTS.random.cc += -Wno-error=psabi
COPTS.cow-string-inst.cc += -Wno-error=psabi
.endif
# XXX
MKDEPFLAGS+= -I$(GLIBCPP_INCLUDE_DIR)/backward
GLIBCXX_SRCDIR= ${DIST}/libstdc++-v3
BUILDSYMLINKS+= \
${GLIBCXX_SRCDIR}/${G_CCODECVT_CC} codecvt_members.cc \
${GLIBCXX_SRCDIR}/${G_CCOLLATE_CC} collate_members.cc \
${GLIBCXX_SRCDIR}/${G_CCTYPE_CC} ctype_members.cc \
${GLIBCXX_SRCDIR}/${G_CMESSAGES_CC} messages_members.cc \
${GLIBCXX_SRCDIR}/${G_CMONEY_CC} monetary_members.cc \
${GLIBCXX_SRCDIR}/${G_CNUMERIC_CC} numeric_members.cc \
${GLIBCXX_SRCDIR}/${G_CTIME_CC} time_members.cc \
${GLIBCXX_SRCDIR}/${G_ATOMICITY_SRCDIR}/atomicity.h atomicity.cc \
${GLIBCXX_SRCDIR}/${G_CLOCALE_CC} c++locale.cc \
${GLIBCXX_SRCDIR}/${G_BASIC_FILE_CC} basic_file.cc \
${DIST}/libiberty/cp-demangle.c cp-demangle.c \
${DIST}/libiberty/cp-demangle.h cp-demangle.h \
${GLIBCXX_SRCDIR}/${G_CCOLLATE_CC} collate_members_cow.cc \
${GLIBCXX_SRCDIR}/${G_CMESSAGES_CC} messages_members_cow.cc \
${GLIBCXX_SRCDIR}/${G_CMONEY_CC} monetary_members_cow.cc \
${GLIBCXX_SRCDIR}/${G_CNUMERIC_CC} numeric_members_cow.cc
# both c++98 and c++11 have codecvt.cc files.
# both c++11 and c++17 have cow-string-inst.cc, ostream-inst.cc,
# and string-inst.cc.
.for _N _V1 _V2 in \
codecvt 98 11 \
cow-string-inst 11 17 \
ostream-inst 11 17 \
string-inst 11 17
BUILDSYMLINKS+= \
${GLIBCXX_SRCDIR}/src/c++${_V1}/${_N}.cc c${_V1}-${_N}.cc
BUILDSYMLINKS+= \
${GLIBCXX_SRCDIR}/src/c++${_V2}/${_N}.cc c${_V2}-${_N}.cc
.endfor
#BUILDSYMLINKS+= \
# ${GLIBCXX_SRCDIR}/src/c++98/codecvt.cc c98-codecvt.cc
#BUILDSYMLINKS+= \
# ${GLIBCXX_SRCDIR}/src/c++11/codecvt.cc c11-codecvt.cc
.include "../Makefile.gthr"
# XXX Special rules in c++98/Makefile; may move into c++11 in future GCC.
CXX11_ALWAYS= localename.cc \
locale_init.cc
FCHAR8_SRCS+= localename.cc \
locale_init.cc \
c11-codecvt.cc \
limits.cc
.for _s in ${G_cxx11_sources} ${CXX11_ALWAYS}
COPTS.${_s}+= -std=gnu++11
.endfor
.for _s in ${G_cxx98_sources}
COPTS.${_s}+= -std=gnu++98
.endfor
.for _s in ${FCHAR8_SRCS}
COPTS.${_s}+= -fchar8_t
.endfor
COPTS.cp-demangle.c += -Wno-unused-function
COPTS.ext-inst.cc+= -Wno-error
.for f in collate_members_cow \
messages_members_cow \
monetary_members_cow \
numeric_members_cow \
c++locale
COPTS.${f}.cc+= -fimplicit-templates ${G_GLIBCXX_ABI_FLAGS}
.endfor
.include <bsd.lib.mk>
.include <bsd.subdir.mk>
.include <bsd.info.mk>
.PATH: ${DIST}/libstdc++-v3/src \
${DIST}/libstdc++-v3/src/c++98 \
${DIST}/libstdc++-v3/src/c++11 \
${DIST}/libstdc++-v3/src/c++17 \
${DIST}/libstdc++-v3/src/filesystem \
${DIST}/libstdc++-v3/libsupc++ \
${DIST}/libstdc++-v3/config/os/bsd/netbsd \
${CONF}/locale/${LOCALETYPE} \
${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}
${OBJS}: ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk
.else
.include <bsd.prog.mk> # do nothing
.endif