1## Makefile for the src subdirectory of the GNU C++ Standard library. 2## 3## Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 4## Free Software Foundation, Inc. 5## 6## This file is part of the libstdc++ version 3 distribution. 7## Process this file with automake to produce Makefile.in. 8 9## This file is part of the GNU ISO C++ Library. This library is free 10## software; you can redistribute it and/or modify it under the 11## terms of the GNU General Public License as published by the 12## Free Software Foundation; either version 2, or (at your option) 13## any later version. 14 15## This library is distributed in the hope that it will be useful, 16## but WITHOUT ANY WARRANTY; without even the implied warranty of 17## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18## GNU General Public License for more details. 19 20## You should have received a copy of the GNU General Public License along 21## with this library; see the file COPYING. If not, write to the Free 22## Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 23## USA. 24 25include $(top_srcdir)/fragment.am 26 27# Cross compiler support. 28toolexeclib_LTLIBRARIES = libstdc++.la 29 30# Symbol versioning for shared libraries. 31if ENABLE_SYMVERS 32libstdc++-symbols.ver: ${glibcxx_srcdir}/$(SYMVER_FILE) \ 33 $(port_specific_symbol_files) 34 cp ${glibcxx_srcdir}/$(SYMVER_FILE) ./libstdc++-symbols.ver 35 if test "x$(port_specific_symbol_files)" != x; then \ 36 if grep '^# Appended to version file.' \ 37 $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \ 38 cat $(port_specific_symbol_files) >> $@; \ 39 else \ 40 sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \ 41 sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \ 42 cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \ 43 rm tmp.top tmp.bottom; \ 44 fi; \ 45 fi 46 47if ENABLE_SYMVERS_GNU 48version_arg = -Wl,--version-script=libstdc++-symbols.ver 49version_dep = libstdc++-symbols.ver 50endif 51if ENABLE_SYMVERS_GNU_NAMESPACE 52version_arg = -Wl,--version-script=libstdc++-symbols.ver 53version_dep = libstdc++-symbols.ver 54endif 55if ENABLE_SYMVERS_DARWIN 56version_arg = -Wl,-exported_symbols_list,libstdc++-symbols.explist 57version_dep = libstdc++-symbols.explist 58libstdc++-symbols.explist : libstdc++-symbols.ver \ 59 ${glibcxx_srcdir}/scripts/make_exports.pl \ 60 $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD) 61 perl ${glibcxx_srcdir}/scripts/make_exports.pl \ 62 libstdc++-symbols.ver \ 63 $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \ 64 `echo $(libstdc___la_LIBADD) | \ 65 sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \ 66 > $@ || (rm -f $@ ; exit 1) 67endif 68else 69version_arg = 70version_dep = 71endif 72 73 74# Source files linked in via configuration/make substitution for a 75# particular host. 76host_sources = \ 77 atomicity.cc \ 78 codecvt_members.cc \ 79 collate_members.cc \ 80 ctype_members.cc \ 81 messages_members.cc \ 82 monetary_members.cc \ 83 numeric_members.cc \ 84 time_members.cc 85 86codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC) 87 $(LN_S) ${glibcxx_srcdir}/$(CCODECVT_CC) . || true 88 89collate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC) 90 $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true 91 92ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC) 93 $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true 94 95messages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC) 96 $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true 97 98monetary_members.cc: ${glibcxx_srcdir}/$(CMONEY_CC) 99 $(LN_S) ${glibcxx_srcdir}/$(CMONEY_CC) . || true 100 101numeric_members.cc: ${glibcxx_srcdir}/$(CNUMERIC_CC) 102 $(LN_S) ${glibcxx_srcdir}/$(CNUMERIC_CC) . || true 103 104time_members.cc: ${glibcxx_srcdir}/$(CTIME_CC) 105 $(LN_S) ${glibcxx_srcdir}/$(CTIME_CC) . || true 106 107atomicity_file = ${glibcxx_srcdir}/$(ATOMICITY_SRCDIR)/atomicity.h 108atomicity.cc: ${atomicity_file} 109 $(LN_S) ${atomicity_file} ./atomicity.cc || true 110 111# Source files linked in via configuration/make substitution for a 112# particular host, but with ad hoc naming rules. 113host_sources_extra = \ 114 basic_file.cc \ 115 c++locale.cc 116 117c++locale.cc: ${glibcxx_srcdir}/$(CLOCALE_CC) 118 $(LN_S) ${glibcxx_srcdir}/$(CLOCALE_CC) ./$@ || true 119 120basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC) 121 $(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true 122 123if GLIBCXX_LDBL_COMPAT 124ldbl_compat_sources = compatibility-ldbl.cc 125else 126ldbl_compat_sources = 127endif 128 129# Sources present in the src directory. 130sources = \ 131 bitmap_allocator.cc \ 132 pool_allocator.cc \ 133 mt_allocator.cc \ 134 codecvt.cc \ 135 compatibility.cc \ 136 complex_io.cc \ 137 ctype.cc \ 138 debug.cc \ 139 debug_list.cc \ 140 functexcept.cc \ 141 globals_io.cc \ 142 ios.cc \ 143 ios_failure.cc \ 144 ios_init.cc \ 145 ios_locale.cc \ 146 limits.cc \ 147 list.cc \ 148 locale.cc \ 149 locale_init.cc \ 150 locale_facets.cc \ 151 localename.cc \ 152 stdexcept.cc \ 153 strstream.cc \ 154 tree.cc \ 155 allocator-inst.cc \ 156 concept-inst.cc \ 157 fstream-inst.cc \ 158 ext-inst.cc \ 159 ios-inst.cc \ 160 iostream-inst.cc \ 161 istream-inst.cc \ 162 istream.cc \ 163 locale-inst.cc \ 164 misc-inst.cc \ 165 ostream-inst.cc \ 166 sstream-inst.cc \ 167 streambuf-inst.cc \ 168 streambuf.cc \ 169 string-inst.cc \ 170 valarray-inst.cc \ 171 wlocale-inst.cc \ 172 wstring-inst.cc \ 173 ${host_sources} \ 174 ${host_sources_extra} \ 175 ${ldbl_compat_sources} 176 177VPATH = $(top_srcdir)/src:$(top_srcdir) 178 179libstdc___la_SOURCES = $(sources) 180 181libstdc___la_LIBADD = \ 182 $(top_builddir)/libmath/libmath.la \ 183 $(top_builddir)/libsupc++/libsupc++convenience.la 184 185libstdc___la_DEPENDENCIES = ${version_dep} $(libstdc___la_LIBADD) 186 187libstdc___la_LDFLAGS = \ 188 -version-info $(libtool_VERSION) ${version_arg} -lm 189 190# Use special rules for the deprecated source files so that they find 191# deprecated include files. 192GLIBCXX_INCLUDE_DIR=$(glibcxx_builddir)/include 193strstream.lo: strstream.cc 194 $(LTCXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $< 195strstream.o: strstream.cc 196 $(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $< 197 198# Use special rules for the concept-checking instantiations so that all 199# the generated template functions are also instantiated. Force the checks 200# to be on so that the instantiations are actually seen. 201concept-inst.lo: concept-inst.cc 202 $(LTCXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $< 203concept-inst.o: concept-inst.cc 204 $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $< 205 206if GLIBCXX_LDBL_COMPAT 207# Use special rules for compatibility-ldbl.cc compilation, as we need to 208# pass -mlong-double-64. 209compatibility-ldbl.lo: compatibility-ldbl.cc 210 $(LTCXXCOMPILE) -mlong-double-64 -c $< 211compatibility-ldbl.o: compatibility-ldbl.cc 212 $(CXXCOMPILE) -mlong-double-64 -c $< 213endif 214 215# AM_CXXFLAGS needs to be in each subdirectory so that it can be 216# modified in a per-library or per-sub-library way. Need to manually 217# set this option because CONFIG_CXXFLAGS has to be after 218# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden 219# as the occasion calls for it. 220AM_CXXFLAGS = \ 221 -fno-implicit-templates \ 222 $(WARN_CXXFLAGS) \ 223 $(OPTIMIZE_CXXFLAGS) \ 224 $(CONFIG_CXXFLAGS) 225 226 227# libstdc++ libtool notes 228 229# 1) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is 230# last. (That way, things like -O2 passed down from the toplevel can 231# be overridden by --enable-debug.) 232 233# 2) In general, libtool expects an argument such as `--tag=CXX' when 234# using the C++ compiler, because that will enable the settings 235# detected when C++ support was being configured. However, when no 236# such flag is given in the command line, libtool attempts to figure 237# it out by matching the compiler name in each configuration section 238# against a prefix of the command line. The problem is that, if the 239# compiler name and its initial flags stored in the libtool 240# configuration file don't match those in the command line, libtool 241# can't decide which configuration to use, and it gives up. The 242# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe 243# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to 244# attempt to infer which configuration to use 245LTCXXCOMPILE = $(LIBTOOL) --tag CXX --mode=compile $(CXX) $(INCLUDES) \ 246 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) 247 248LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) 249 250# 3) We'd have a problem when building the shared libstdc++ object if 251# the rules automake generates would be used. We cannot allow g++ to 252# be used since this would add -lstdc++ to the link line which of 253# course is problematic at this point. So, we get the top-level 254# directory to configure libstdc++-v3 to use gcc as the C++ 255# compilation driver. 256CXXLINK = $(LIBTOOL) --tag CXX --mode=link $(CXX) \ 257 $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@ 258 259 260# Added bits to build debug library. 261if GLIBCXX_BUILD_DEBUG 262all-local: build_debug 263install-data-local: install_debug 264else 265all-local: 266install-data-local: 267endif 268 269debugdir = debug 270 271# Build parallel set of debug objects here. 272stamp-debug: 273 if test ! -d ${debugdir}; then \ 274 mkdir -p ${debugdir}; \ 275 (cd ${debugdir}; \ 276 sed -e 's/top_builddir = \.\./top_builddir = ..\/../' \ 277 -e 's/srcdir = \.\./srcdir = ..\/../' \ 278 -e 's/glibcxx_basedir = \.\./glibcxx_basedir = ..\/../' \ 279 -e 's/all-local: build_debug/all-local:/' \ 280 -e 's/install-data-local: install_debug/install-data-local:/' \ 281 < ../Makefile > Makefile) ; \ 282 fi; \ 283 echo `date` > stamp-debug; 284 285build_debug: stamp-debug 286 (cd ${debugdir} && $(MAKE) CXXFLAGS='$(DEBUG_FLAGS)' all) 287 288# Install debug library here. 289install_debug: 290 (cd ${debugdir} && $(MAKE) \ 291 toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install) 292