100db7afdSDavid E. O'Brien## Makefile for the src subdirectory of the GNU C++ Standard library. 200db7afdSDavid E. O'Brien## 3*f8a1b7d9SAlexander Kabaev## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 400db7afdSDavid E. O'Brien## Free Software Foundation, Inc. 500db7afdSDavid E. O'Brien## 600db7afdSDavid E. O'Brien## This file is part of the libstdc++ version 3 distribution. 700db7afdSDavid E. O'Brien## Process this file with automake to produce Makefile.in. 800db7afdSDavid E. O'Brien 900db7afdSDavid E. O'Brien## This file is part of the GNU ISO C++ Library. This library is free 1000db7afdSDavid E. O'Brien## software; you can redistribute it and/or modify it under the 1100db7afdSDavid E. O'Brien## terms of the GNU General Public License as published by the 1200db7afdSDavid E. O'Brien## Free Software Foundation; either version 2, or (at your option) 1300db7afdSDavid E. O'Brien## any later version. 1400db7afdSDavid E. O'Brien 1500db7afdSDavid E. O'Brien## This library is distributed in the hope that it will be useful, 1600db7afdSDavid E. O'Brien## but WITHOUT ANY WARRANTY; without even the implied warranty of 1700db7afdSDavid E. O'Brien## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1800db7afdSDavid E. O'Brien## GNU General Public License for more details. 1900db7afdSDavid E. O'Brien 2000db7afdSDavid E. O'Brien## You should have received a copy of the GNU General Public License along 2100db7afdSDavid E. O'Brien## with this library; see the file COPYING. If not, write to the Free 22*f8a1b7d9SAlexander Kabaev## Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 2300db7afdSDavid E. O'Brien## USA. 2400db7afdSDavid E. O'Brien 25ffeaf689SAlexander Kabaevinclude $(top_srcdir)/fragment.am 2600db7afdSDavid E. O'Brien 2720250742SAlexander Kabaev# Cross compiler support. 2800db7afdSDavid E. O'Brientoolexeclib_LTLIBRARIES = libstdc++.la 2900db7afdSDavid E. O'Brien 301b86b14eSAlexander Kabaev# Symbol versioning for shared libraries. 31*f8a1b7d9SAlexander Kabaevif ENABLE_SYMVERS 32*f8a1b7d9SAlexander Kabaevlibstdc++-symbols.ver: ${glibcxx_srcdir}/$(SYMVER_FILE) \ 33*f8a1b7d9SAlexander Kabaev $(port_specific_symbol_files) 34*f8a1b7d9SAlexander Kabaev cp ${glibcxx_srcdir}/$(SYMVER_FILE) ./libstdc++-symbols.ver 35ffeaf689SAlexander Kabaev if test "x$(port_specific_symbol_files)" != x; then \ 36*f8a1b7d9SAlexander Kabaev if grep '^# Appended to version file.' \ 37*f8a1b7d9SAlexander Kabaev $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \ 38*f8a1b7d9SAlexander Kabaev cat $(port_specific_symbol_files) >> $@; \ 39*f8a1b7d9SAlexander Kabaev else \ 40ffeaf689SAlexander Kabaev sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \ 41ffeaf689SAlexander Kabaev sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \ 42ffeaf689SAlexander Kabaev cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \ 43ffeaf689SAlexander Kabaev rm tmp.top tmp.bottom; \ 44*f8a1b7d9SAlexander Kabaev fi; \ 45ffeaf689SAlexander Kabaev fi 46*f8a1b7d9SAlexander Kabaev 47*f8a1b7d9SAlexander Kabaevif ENABLE_SYMVERS_GNU 48*f8a1b7d9SAlexander Kabaevversion_arg = -Wl,--version-script=libstdc++-symbols.ver 49*f8a1b7d9SAlexander Kabaevversion_dep = libstdc++-symbols.ver 50*f8a1b7d9SAlexander Kabaevendif 51*f8a1b7d9SAlexander Kabaevif ENABLE_SYMVERS_GNU_NAMESPACE 52*f8a1b7d9SAlexander Kabaevversion_arg = -Wl,--version-script=libstdc++-symbols.ver 53*f8a1b7d9SAlexander Kabaevversion_dep = libstdc++-symbols.ver 54*f8a1b7d9SAlexander Kabaevendif 55*f8a1b7d9SAlexander Kabaevif ENABLE_SYMVERS_DARWIN 56*f8a1b7d9SAlexander Kabaevversion_arg = -Wl,-exported_symbols_list,libstdc++-symbols.explist 57*f8a1b7d9SAlexander Kabaevversion_dep = libstdc++-symbols.explist 58*f8a1b7d9SAlexander Kabaevlibstdc++-symbols.explist : libstdc++-symbols.ver \ 59*f8a1b7d9SAlexander Kabaev ${glibcxx_srcdir}/scripts/make_exports.pl \ 60*f8a1b7d9SAlexander Kabaev $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD) 61*f8a1b7d9SAlexander Kabaev perl ${glibcxx_srcdir}/scripts/make_exports.pl \ 62*f8a1b7d9SAlexander Kabaev libstdc++-symbols.ver \ 63*f8a1b7d9SAlexander Kabaev $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \ 64*f8a1b7d9SAlexander Kabaev `echo $(libstdc___la_LIBADD) | \ 65*f8a1b7d9SAlexander Kabaev sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \ 66*f8a1b7d9SAlexander Kabaev > $@ || (rm -f $@ ; exit 1) 67*f8a1b7d9SAlexander Kabaevendif 681b86b14eSAlexander Kabaevelse 691b86b14eSAlexander Kabaevversion_arg = 70ffeaf689SAlexander Kabaevversion_dep = 711b86b14eSAlexander Kabaevendif 721b86b14eSAlexander Kabaev 7300db7afdSDavid E. O'Brien 741b86b14eSAlexander Kabaev# Source files linked in via configuration/make substitution for a 75ffeaf689SAlexander Kabaev# particular host. 76ffeaf689SAlexander Kabaevhost_sources = \ 77ffeaf689SAlexander Kabaev atomicity.cc \ 7820250742SAlexander Kabaev codecvt_members.cc \ 7920250742SAlexander Kabaev collate_members.cc \ 8020250742SAlexander Kabaev ctype_members.cc \ 8120250742SAlexander Kabaev messages_members.cc \ 8220250742SAlexander Kabaev monetary_members.cc \ 8320250742SAlexander Kabaev numeric_members.cc \ 8420250742SAlexander Kabaev time_members.cc 8520250742SAlexander Kabaev 86ffeaf689SAlexander Kabaevcodecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC) 87ffeaf689SAlexander Kabaev $(LN_S) ${glibcxx_srcdir}/$(CCODECVT_CC) . || true 881b86b14eSAlexander Kabaev 89ffeaf689SAlexander Kabaevcollate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC) 90ffeaf689SAlexander Kabaev $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true 911b86b14eSAlexander Kabaev 92ffeaf689SAlexander Kabaevctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC) 93ffeaf689SAlexander Kabaev $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true 941b86b14eSAlexander Kabaev 95ffeaf689SAlexander Kabaevmessages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC) 96ffeaf689SAlexander Kabaev $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true 971b86b14eSAlexander Kabaev 98ffeaf689SAlexander Kabaevmonetary_members.cc: ${glibcxx_srcdir}/$(CMONEY_CC) 99ffeaf689SAlexander Kabaev $(LN_S) ${glibcxx_srcdir}/$(CMONEY_CC) . || true 1001b86b14eSAlexander Kabaev 101ffeaf689SAlexander Kabaevnumeric_members.cc: ${glibcxx_srcdir}/$(CNUMERIC_CC) 102ffeaf689SAlexander Kabaev $(LN_S) ${glibcxx_srcdir}/$(CNUMERIC_CC) . || true 1031b86b14eSAlexander Kabaev 104ffeaf689SAlexander Kabaevtime_members.cc: ${glibcxx_srcdir}/$(CTIME_CC) 105ffeaf689SAlexander Kabaev $(LN_S) ${glibcxx_srcdir}/$(CTIME_CC) . || true 106ffeaf689SAlexander Kabaev 107ffeaf689SAlexander Kabaevatomicity_file = ${glibcxx_srcdir}/$(ATOMICITY_SRCDIR)/atomicity.h 108ffeaf689SAlexander Kabaevatomicity.cc: ${atomicity_file} 109ffeaf689SAlexander Kabaev $(LN_S) ${atomicity_file} ./atomicity.cc || true 1101b86b14eSAlexander Kabaev 1111b86b14eSAlexander Kabaev# Source files linked in via configuration/make substitution for a 112ffeaf689SAlexander Kabaev# particular host, but with ad hoc naming rules. 113ffeaf689SAlexander Kabaevhost_sources_extra = \ 11420250742SAlexander Kabaev basic_file.cc \ 11520250742SAlexander Kabaev c++locale.cc 11620250742SAlexander Kabaev 117ffeaf689SAlexander Kabaevc++locale.cc: ${glibcxx_srcdir}/$(CLOCALE_CC) 118ffeaf689SAlexander Kabaev $(LN_S) ${glibcxx_srcdir}/$(CLOCALE_CC) ./$@ || true 1191b86b14eSAlexander Kabaev 120ffeaf689SAlexander Kabaevbasic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC) 121ffeaf689SAlexander Kabaev $(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true 1221b86b14eSAlexander Kabaev 123*f8a1b7d9SAlexander Kabaevif GLIBCXX_LDBL_COMPAT 124*f8a1b7d9SAlexander Kabaevldbl_compat_sources = compatibility-ldbl.cc 125*f8a1b7d9SAlexander Kabaevelse 126*f8a1b7d9SAlexander Kabaevldbl_compat_sources = 127*f8a1b7d9SAlexander Kabaevendif 128*f8a1b7d9SAlexander Kabaev 12920250742SAlexander Kabaev# Sources present in the src directory. 13000db7afdSDavid E. O'Briensources = \ 131*f8a1b7d9SAlexander Kabaev bitmap_allocator.cc \ 132*f8a1b7d9SAlexander Kabaev pool_allocator.cc \ 133*f8a1b7d9SAlexander Kabaev mt_allocator.cc \ 13420250742SAlexander Kabaev codecvt.cc \ 135*f8a1b7d9SAlexander Kabaev compatibility.cc \ 13620250742SAlexander Kabaev complex_io.cc \ 13720250742SAlexander Kabaev ctype.cc \ 138ffeaf689SAlexander Kabaev debug.cc \ 139ffeaf689SAlexander Kabaev debug_list.cc \ 14020250742SAlexander Kabaev functexcept.cc \ 141ffeaf689SAlexander Kabaev globals_io.cc \ 14220250742SAlexander Kabaev ios.cc \ 143ffeaf689SAlexander Kabaev ios_failure.cc \ 144ffeaf689SAlexander Kabaev ios_init.cc \ 145ffeaf689SAlexander Kabaev ios_locale.cc \ 14620250742SAlexander Kabaev limits.cc \ 147ffeaf689SAlexander Kabaev list.cc \ 14820250742SAlexander Kabaev locale.cc \ 149ffeaf689SAlexander Kabaev locale_init.cc \ 150ffeaf689SAlexander Kabaev locale_facets.cc \ 15120250742SAlexander Kabaev localename.cc \ 152ffeaf689SAlexander Kabaev stdexcept.cc \ 153ffeaf689SAlexander Kabaev strstream.cc \ 154ffeaf689SAlexander Kabaev tree.cc \ 155ffeaf689SAlexander Kabaev allocator-inst.cc \ 156ffeaf689SAlexander Kabaev concept-inst.cc \ 157ffeaf689SAlexander Kabaev fstream-inst.cc \ 158ffeaf689SAlexander Kabaev ext-inst.cc \ 159*f8a1b7d9SAlexander Kabaev ios-inst.cc \ 160*f8a1b7d9SAlexander Kabaev iostream-inst.cc \ 161ffeaf689SAlexander Kabaev istream-inst.cc \ 162*f8a1b7d9SAlexander Kabaev istream.cc \ 163ffeaf689SAlexander Kabaev locale-inst.cc \ 16420250742SAlexander Kabaev misc-inst.cc \ 16520250742SAlexander Kabaev ostream-inst.cc \ 16620250742SAlexander Kabaev sstream-inst.cc \ 16720250742SAlexander Kabaev streambuf-inst.cc \ 168*f8a1b7d9SAlexander Kabaev streambuf.cc \ 16920250742SAlexander Kabaev string-inst.cc \ 17020250742SAlexander Kabaev valarray-inst.cc \ 171ffeaf689SAlexander Kabaev wlocale-inst.cc \ 17220250742SAlexander Kabaev wstring-inst.cc \ 173ffeaf689SAlexander Kabaev ${host_sources} \ 174*f8a1b7d9SAlexander Kabaev ${host_sources_extra} \ 175*f8a1b7d9SAlexander Kabaev ${ldbl_compat_sources} 17600db7afdSDavid E. O'Brien 17700db7afdSDavid E. O'BrienVPATH = $(top_srcdir)/src:$(top_srcdir) 17800db7afdSDavid E. O'Brien 17900db7afdSDavid E. O'Brienlibstdc___la_SOURCES = $(sources) 18000db7afdSDavid E. O'Brien 18100db7afdSDavid E. O'Brienlibstdc___la_LIBADD = \ 182ffeaf689SAlexander Kabaev $(top_builddir)/libmath/libmath.la \ 1831b86b14eSAlexander Kabaev $(top_builddir)/libsupc++/libsupc++convenience.la 18400db7afdSDavid E. O'Brien 185ffeaf689SAlexander Kabaevlibstdc___la_DEPENDENCIES = ${version_dep} $(libstdc___la_LIBADD) 18600db7afdSDavid E. O'Brien 18700db7afdSDavid E. O'Brienlibstdc___la_LDFLAGS = \ 188ffeaf689SAlexander Kabaev -version-info $(libtool_VERSION) ${version_arg} -lm 18900db7afdSDavid E. O'Brien 19000db7afdSDavid E. O'Brien# Use special rules for the deprecated source files so that they find 19100db7afdSDavid E. O'Brien# deprecated include files. 192ffeaf689SAlexander KabaevGLIBCXX_INCLUDE_DIR=$(glibcxx_builddir)/include 19300db7afdSDavid E. O'Brienstrstream.lo: strstream.cc 194ffeaf689SAlexander Kabaev $(LTCXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $< 19500db7afdSDavid E. O'Brienstrstream.o: strstream.cc 196ffeaf689SAlexander Kabaev $(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $< 19700db7afdSDavid E. O'Brien 19800db7afdSDavid E. O'Brien# Use special rules for the concept-checking instantiations so that all 19900db7afdSDavid E. O'Brien# the generated template functions are also instantiated. Force the checks 20000db7afdSDavid E. O'Brien# to be on so that the instantiations are actually seen. 20100db7afdSDavid E. O'Brienconcept-inst.lo: concept-inst.cc 202ffeaf689SAlexander Kabaev $(LTCXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $< 20300db7afdSDavid E. O'Brienconcept-inst.o: concept-inst.cc 204ffeaf689SAlexander Kabaev $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $< 20500db7afdSDavid E. O'Brien 206*f8a1b7d9SAlexander Kabaevif GLIBCXX_LDBL_COMPAT 207*f8a1b7d9SAlexander Kabaev# Use special rules for compatibility-ldbl.cc compilation, as we need to 208*f8a1b7d9SAlexander Kabaev# pass -mlong-double-64. 209*f8a1b7d9SAlexander Kabaevcompatibility-ldbl.lo: compatibility-ldbl.cc 210*f8a1b7d9SAlexander Kabaev $(LTCXXCOMPILE) -mlong-double-64 -c $< 211*f8a1b7d9SAlexander Kabaevcompatibility-ldbl.o: compatibility-ldbl.cc 212*f8a1b7d9SAlexander Kabaev $(CXXCOMPILE) -mlong-double-64 -c $< 213*f8a1b7d9SAlexander Kabaevendif 214*f8a1b7d9SAlexander Kabaev 21500db7afdSDavid E. O'Brien# AM_CXXFLAGS needs to be in each subdirectory so that it can be 21600db7afdSDavid E. O'Brien# modified in a per-library or per-sub-library way. Need to manually 21700db7afdSDavid E. O'Brien# set this option because CONFIG_CXXFLAGS has to be after 21800db7afdSDavid E. O'Brien# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden 219ffeaf689SAlexander Kabaev# as the occasion calls for it. 22000db7afdSDavid E. O'BrienAM_CXXFLAGS = \ 22100db7afdSDavid E. O'Brien -fno-implicit-templates \ 22200db7afdSDavid E. O'Brien $(WARN_CXXFLAGS) \ 22300db7afdSDavid E. O'Brien $(OPTIMIZE_CXXFLAGS) \ 22400db7afdSDavid E. O'Brien $(CONFIG_CXXFLAGS) 22500db7afdSDavid E. O'Brien 22600db7afdSDavid E. O'Brien 22700db7afdSDavid E. O'Brien# libstdc++ libtool notes 22800db7afdSDavid E. O'Brien 22900db7afdSDavid E. O'Brien# 1) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is 23000db7afdSDavid E. O'Brien# last. (That way, things like -O2 passed down from the toplevel can 23100db7afdSDavid E. O'Brien# be overridden by --enable-debug.) 23200db7afdSDavid E. O'Brien 23300db7afdSDavid E. O'Brien# 2) In general, libtool expects an argument such as `--tag=CXX' when 23400db7afdSDavid E. O'Brien# using the C++ compiler, because that will enable the settings 23500db7afdSDavid E. O'Brien# detected when C++ support was being configured. However, when no 23600db7afdSDavid E. O'Brien# such flag is given in the command line, libtool attempts to figure 23700db7afdSDavid E. O'Brien# it out by matching the compiler name in each configuration section 23800db7afdSDavid E. O'Brien# against a prefix of the command line. The problem is that, if the 23900db7afdSDavid E. O'Brien# compiler name and its initial flags stored in the libtool 24000db7afdSDavid E. O'Brien# configuration file don't match those in the command line, libtool 24100db7afdSDavid E. O'Brien# can't decide which configuration to use, and it gives up. The 24200db7afdSDavid E. O'Brien# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe 24300db7afdSDavid E. O'Brien# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to 24400db7afdSDavid E. O'Brien# attempt to infer which configuration to use 24500db7afdSDavid E. O'BrienLTCXXCOMPILE = $(LIBTOOL) --tag CXX --mode=compile $(CXX) $(INCLUDES) \ 246*f8a1b7d9SAlexander Kabaev $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) 247*f8a1b7d9SAlexander Kabaev 248*f8a1b7d9SAlexander KabaevLTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) 24900db7afdSDavid E. O'Brien 25000db7afdSDavid E. O'Brien# 3) We'd have a problem when building the shared libstdc++ object if 25100db7afdSDavid E. O'Brien# the rules automake generates would be used. We cannot allow g++ to 25200db7afdSDavid E. O'Brien# be used since this would add -lstdc++ to the link line which of 25300db7afdSDavid E. O'Brien# course is problematic at this point. So, we get the top-level 25400db7afdSDavid E. O'Brien# directory to configure libstdc++-v3 to use gcc as the C++ 25500db7afdSDavid E. O'Brien# compilation driver. 25600db7afdSDavid E. O'BrienCXXLINK = $(LIBTOOL) --tag CXX --mode=link $(CXX) \ 257*f8a1b7d9SAlexander Kabaev $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@ 2581b86b14eSAlexander Kabaev 2591b86b14eSAlexander Kabaev 2601b86b14eSAlexander Kabaev# Added bits to build debug library. 261ffeaf689SAlexander Kabaevif GLIBCXX_BUILD_DEBUG 2621b86b14eSAlexander Kabaevall-local: build_debug 2631b86b14eSAlexander Kabaevinstall-data-local: install_debug 2641b86b14eSAlexander Kabaevelse 2651b86b14eSAlexander Kabaevall-local: 2661b86b14eSAlexander Kabaevinstall-data-local: 2671b86b14eSAlexander Kabaevendif 2681b86b14eSAlexander Kabaev 2691b86b14eSAlexander Kabaevdebugdir = debug 2701b86b14eSAlexander Kabaev 2711b86b14eSAlexander Kabaev# Build parallel set of debug objects here. 2721b86b14eSAlexander Kabaevstamp-debug: 2731b86b14eSAlexander Kabaev if test ! -d ${debugdir}; then \ 2741b86b14eSAlexander Kabaev mkdir -p ${debugdir}; \ 2751b86b14eSAlexander Kabaev (cd ${debugdir}; \ 2761b86b14eSAlexander Kabaev sed -e 's/top_builddir = \.\./top_builddir = ..\/../' \ 2771b86b14eSAlexander Kabaev -e 's/srcdir = \.\./srcdir = ..\/../' \ 278ffeaf689SAlexander Kabaev -e 's/glibcxx_basedir = \.\./glibcxx_basedir = ..\/../' \ 2791b86b14eSAlexander Kabaev -e 's/all-local: build_debug/all-local:/' \ 2801b86b14eSAlexander Kabaev -e 's/install-data-local: install_debug/install-data-local:/' \ 2811b86b14eSAlexander Kabaev < ../Makefile > Makefile) ; \ 2821b86b14eSAlexander Kabaev fi; \ 2831b86b14eSAlexander Kabaev echo `date` > stamp-debug; 2841b86b14eSAlexander Kabaev 2851b86b14eSAlexander Kabaevbuild_debug: stamp-debug 286ffeaf689SAlexander Kabaev (cd ${debugdir} && $(MAKE) CXXFLAGS='$(DEBUG_FLAGS)' all) 2871b86b14eSAlexander Kabaev 2881b86b14eSAlexander Kabaev# Install debug library here. 2891b86b14eSAlexander Kabaevinstall_debug: 2901b86b14eSAlexander Kabaev (cd ${debugdir} && $(MAKE) \ 291ffeaf689SAlexander Kabaev toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install) 292