1# $NetBSD: Makefile,v 1.13 2021/04/09 23:15:42 mrg Exp $ 2 3REQUIRETOOLS= yes 4NOLINT= # defined 5UNSUPPORTED_COMPILER.clang= # defined 6 7.include <bsd.init.mk> 8 9.include "Makefile.inc" 10 11LIB= stdc++ 12 13LIBDPLIBS+= m ${.CURDIR}/../../../../../lib/libm 14 15#COPTS+= -pthread 16#LDFLAGS+= -pthread 17.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64" 18COPTS.random.cc+= ${${ACTIVE_CC} == "clang":? -mrdrnd :} 19.endif 20 21CSHLIBFLAGS+= -D_GLIBCXX_COMPAT_ 22 23DIST= ${GCCDIST} 24GNUVER= ${DIST}/libstdc++-v3/config/abi/pre/gnu.ver 25SYMBOLS= libstdc++-symbols.ver 26.if ${MKPIC} != "no" 27${SYMBOLS}: Makefile ${GNUVER} 28 cat ${GNUVER} ${G_port_specific_symbol_files} | \ 29 ${TOOL_GREP} -E -v '^[ ]*#(#| |$$)' | \ 30 ${CXX} -I${DESTDIR}/usr/include/g++ -E -P -include ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/symver-config.h - > \ 31 ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} && rm -f ${.TARGET}.tmp 32 33CLEANFILES+= ${SYMBOLS} ${SYMBOLS}.tmp 34 35DPADD+= ${SYMBOLS} 36 37.if ${MKPICLIB} != "no" 38libstdc++_pic.a:: ${SYMBOLS} 39.else 40libstdc++.a:: ${SYMBOLS} 41.endif 42 43LDFLAGS+= -Wl,-O1 \ 44 -Wl,--gc-sections \ 45 -Wl,--version-script=${SYMBOLS} 46.endif 47 48CXXFLAGS.clang+= -stdlib=libstdc++ -std=c++11 -D_GLIBCXX_ABI_TAG_CXX11= 49CXXFLAGS+= ${CXXFLAGS.${ACTIVE_CC}} 50CWARNFLAGS.clang+= -Wno-logical-op-parentheses \ 51 -Wno-deprecated-writable-strings -Wno-parentheses 52 53.include "${.CURDIR}/../libsupc++/Makefile.common" 54 55.if exists(${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk) && ${MKGCC} != "no" 56.include "${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk" 57 58SHLIB_MAJOR= 9 59SHLIB_MINOR= 0 60 61SUBDIR= include 62 63SRCS= ${LIBSUPCXXSRCS} ${LIBSTDCXXSRCS} 64 65GCC_MACHINE_SUBDIR=${MACHINE_CPU:C/powerpc.*/rs6000/:C/x86_64/i386/} 66 67CXXFLAGS+= -fno-implicit-templates 68CPPFLAGS+= -I${DIST}/libstdc++-v3/include 69CPPFLAGS+= -I${DIST}/gcc/config/${GCC_MACHINE_SUBDIR} 70CPPFLAGS+= -I${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH} 71CPPFLAGS+= -D_GLIBCXX_SHARED -DGTHREAD_USE_WEAK -DSUPPORTS_WEAK 72.if ${G_CLOCALE_CC:M*dragonfly*} != "" 73CPPFLAGS+= -I${CONF}/locale/dragonfly 74LOCALETYPE= dragonfly 75.else 76LOCALETYPE= generic 77.endif 78 79# affects profiling; can't switch it off just for profiling easily. 80#CXXFLAGS+= ${G_SECTION_FLAGS} 81#CXXFLAGS+= -ffunction-sections -fdata-sections 82COPTS.bitmap_allocator.cc+= -ffunction-sections -fdata-sections 83COPTS.pool_allocator.cc+= -ffunction-sections -fdata-sections 84 85CONF= ${DIST}/libstdc++-v3/config 86 87GLIBCPP_INCLUDE_DIR= ${DESTDIR}/usr/include/g++ 88 89# Template instantiation bug workaround for -O<2/s 90COPTS.cp-demangle.c += -Wno-stack-protector 91COPTS.cp-demangle.c += -Wno-stack-protector 92COPTS.fstream-inst.cc += -Wno-stack-protector 93COPTS.locale-inst.cc += -Wno-stack-protector 94COPTS.misc-inst.cc += -Wno-stack-protector 95COPTS.ostream-inst.cc += -Wno-stack-protector 96COPTS.functexcept.cc += -Wno-stack-protector 97COPTS.valarray-inst.cc += -Wno-stack-protector 98COPTS.wlocale-inst.cc += -Wno-stack-protector 99COPTS.snprintf_lite.cc += -Wno-stack-protector 100# From system headers. 101COPTS.cxx11-wlocale-inst.cc +=-Wno-stack-protector 102COPTS.cxx11-locale-inst.cc +=-Wno-stack-protector 103COPTS.cxx11-wlocale-inst.cc +=-Wno-stack-protector 104COPTS.codecvt_members.cc +=-Wno-stack-protector 105COPTS.compatibility-thread-c++0x.cc += -Wno-deprecated-declarations 106COPTS.concept-inst.cc += -fimplicit-templates 107COPTS.collate_members_cow.cc += -fimplicit-templates 108COPTS.messages_members_cow.cc += -fimplicit-templates 109COPTS.monetary_members_cow.cc += -fimplicit-templates 110COPTS.numeric_members_cow.cc += -fimplicit-templates 111COPTS.hashtable_c++0x.cc += -fimplicit-templates 112COPTS.c++locale.cc += -fimplicit-templates 113COPTS.functexcept.cc += -Wno-deprecated-declarations 114COPTS.future.cc += -Wno-deprecated-declarations 115COPTS.shared_ptr.cc += -Wno-deprecated-declarations 116COPTS.thread.cc += -Wno-deprecated-declarations 117CPPFLAGS.strstream.cc += -I$(GLIBCPP_INCLUDE_DIR)/backward -Wno-deprecated 118 119CPPFLAGS.cp-demangle.cc += -DIN_GLIBCPP_V3 120CPPFLAGS.concept-inst.cc += -D_GLIBCXX_CONCEPT_CHECKS 121CPPFLAGS.parallel_list.cc += -D_GLIBCXX_PARALLEL 122CPPFLAGS.parallel_settings.cc += -D_GLIBCXX_PARALLEL 123CPPFLAGS.compatibility-parallel_list.cc += -D_GLIBCXX_PARALLEL 124CPPFLAGS.compatibility.cc+= -I${DIST}/libstdc++-v3/config 125 126cp-demangle.d cp-demangle.o: cp-demangle.h 127 128.if ${MACHINE_ARCH} == "i386" 129COPTS.random.cc += -Wno-error=psabi 130COPTS.cow-string-inst.cc += -Wno-error=psabi 131.endif 132 133# XXX 134MKDEPFLAGS+= -I$(GLIBCPP_INCLUDE_DIR)/backward 135 136GLIBCXX_SRCDIR= ${DIST}/libstdc++-v3 137 138BUILDSYMLINKS+= \ 139 ${GLIBCXX_SRCDIR}/${G_CCODECVT_CC} codecvt_members.cc \ 140 ${GLIBCXX_SRCDIR}/${G_CCOLLATE_CC} collate_members.cc \ 141 ${GLIBCXX_SRCDIR}/${G_CCTYPE_CC} ctype_members.cc \ 142 ${GLIBCXX_SRCDIR}/${G_CMESSAGES_CC} messages_members.cc \ 143 ${GLIBCXX_SRCDIR}/${G_CMONEY_CC} monetary_members.cc \ 144 ${GLIBCXX_SRCDIR}/${G_CNUMERIC_CC} numeric_members.cc \ 145 ${GLIBCXX_SRCDIR}/${G_CTIME_CC} time_members.cc \ 146 ${GLIBCXX_SRCDIR}/${G_ATOMICITY_SRCDIR}/atomicity.h atomicity.cc \ 147 ${GLIBCXX_SRCDIR}/${G_CLOCALE_CC} c++locale.cc \ 148 ${GLIBCXX_SRCDIR}/${G_BASIC_FILE_CC} basic_file.cc \ 149 ${DIST}/libiberty/cp-demangle.c cp-demangle.c \ 150 ${DIST}/libiberty/cp-demangle.h cp-demangle.h \ 151 ${GLIBCXX_SRCDIR}/${G_CCOLLATE_CC} collate_members_cow.cc \ 152 ${GLIBCXX_SRCDIR}/${G_CMESSAGES_CC} messages_members_cow.cc \ 153 ${GLIBCXX_SRCDIR}/${G_CMONEY_CC} monetary_members_cow.cc \ 154 ${GLIBCXX_SRCDIR}/${G_CNUMERIC_CC} numeric_members_cow.cc 155 156# both c++98 and c++11 have codecvt.cc files. 157BUILDSYMLINKS+= \ 158 ${GLIBCXX_SRCDIR}/src/c++98/codecvt.cc c98-codecvt.cc 159BUILDSYMLINKS+= \ 160 ${GLIBCXX_SRCDIR}/src/c++11/codecvt.cc c11-codecvt.cc 161SRCS+= c98-codecvt.cc c11-codecvt.cc 162 163.include "../Makefile.gthr" 164 165# XXX Special rules in c++98/Makefile; may move into c++11 in future GCC. 166CXX11_ALWAYS= localename.cc \ 167 locale_init.cc 168 169FCHAR8_SRCS+= localename.cc \ 170 locale_init.cc \ 171 c11-codecvt.cc \ 172 limits.cc 173 174.for _s in ${G_cxx11_sources} ${CXX11_ALWAYS} 175COPTS.${_s}+= -std=gnu++11 176.endfor 177 178.for _s in ${G_cxx98_sources} 179COPTS.${_s}+= -std=gnu++98 180.endfor 181 182.for _s in ${FCHAR8_SRCS} 183COPTS.${_s}+= -fchar8_t 184.endfor 185 186COPTS.cp-demangle.c += -Wno-unused-function 187 188COPTS.ext-inst.cc+= -Wno-error 189 190.for f in collate_members_cow \ 191 messages_members_cow \ 192 monetary_members_cow \ 193 numeric_members_cow \ 194 c++locale 195COPTS.${f}.cc+= -fimplicit-templates ${G_GLIBCXX_ABI_FLAGS} 196.endfor 197 198.include <bsd.lib.mk> 199.include <bsd.subdir.mk> 200.include <bsd.info.mk> 201 202.PATH: ${DIST}/libstdc++-v3/src \ 203 ${DIST}/libstdc++-v3/src/c++98 \ 204 ${DIST}/libstdc++-v3/src/c++11 \ 205 ${DIST}/libstdc++-v3/src/c++17 \ 206 ${DIST}/libstdc++-v3/src/filesystem \ 207 ${DIST}/libstdc++-v3/libsupc++ \ 208 ${DIST}/libstdc++-v3/config/os/bsd/netbsd \ 209 ${CONF}/locale/${LOCALETYPE} \ 210 ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH} 211 212${OBJS}: ${.CURDIR}/arch/${LIBSTDCXX_MACHINE_ARCH}/defs.mk 213 214.else 215.include <bsd.prog.mk> # do nothing 216.endif 217