1## Makefile for the C++03 sources of the GNU C++ Standard library. 2## 3## Copyright (C) 1997-2015 Free Software Foundation, Inc. 4## 5## This file is part of the libstdc++ version 3 distribution. 6## Process this file with automake to produce Makefile.in. 7 8## This file is part of the GNU ISO C++ Library. This library is free 9## software; you can redistribute it and/or modify it under the 10## terms of the GNU General Public License as published by the 11## Free Software Foundation; either version 3, or (at your option) 12## any later version. 13 14## This library is distributed in the hope that it will be useful, 15## but WITHOUT ANY WARRANTY; without even the implied warranty of 16## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17## GNU General Public License for more details. 18 19## You should have received a copy of the GNU General Public License along 20## with this library; see the file COPYING3. If not see 21## <http://www.gnu.org/licenses/>. 22 23include $(top_srcdir)/fragment.am 24 25# Convenience library for C++98 runtime. 26noinst_LTLIBRARIES = libc++98convenience.la 27 28headers = 29 30if ENABLE_DUAL_ABI 31cow_string_host_sources = \ 32 collate_members_cow.cc \ 33 messages_members_cow.cc \ 34 monetary_members_cow.cc \ 35 numeric_members_cow.cc 36endif 37 38# Source files linked in via configuration/make substitution for a 39# particular host. 40host_sources = \ 41 $(cow_string_host_sources) \ 42 atomicity.cc \ 43 codecvt_members.cc \ 44 collate_members.cc \ 45 messages_members.cc \ 46 monetary_members.cc \ 47 numeric_members.cc \ 48 time_members.cc 49 50codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC) 51 $(LN_S) ${glibcxx_srcdir}/$(CCODECVT_CC) . || true 52 53collate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC) 54 $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true 55 56messages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC) 57 $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true 58 59monetary_members.cc: ${glibcxx_srcdir}/$(CMONEY_CC) 60 $(LN_S) ${glibcxx_srcdir}/$(CMONEY_CC) . || true 61 62numeric_members.cc: ${glibcxx_srcdir}/$(CNUMERIC_CC) 63 $(LN_S) ${glibcxx_srcdir}/$(CNUMERIC_CC) . || true 64 65time_members.cc: ${glibcxx_srcdir}/$(CTIME_CC) 66 $(LN_S) ${glibcxx_srcdir}/$(CTIME_CC) . || true 67 68atomicity_file = ${glibcxx_srcdir}/$(ATOMICITY_SRCDIR)/atomicity.h 69atomicity.cc: ${atomicity_file} 70 $(LN_S) ${atomicity_file} ./atomicity.cc || true 71 72if ENABLE_DUAL_ABI 73collate_members_cow.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC) 74 $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) ./$@ || true 75 76messages_members_cow.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC) 77 $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) ./$@ || true 78 79monetary_members_cow.cc: ${glibcxx_srcdir}/$(CMONEY_CC) 80 $(LN_S) ${glibcxx_srcdir}/$(CMONEY_CC) ./$@ || true 81 82numeric_members_cow.cc: ${glibcxx_srcdir}/$(CNUMERIC_CC) 83 $(LN_S) ${glibcxx_srcdir}/$(CNUMERIC_CC) ./$@ || true 84endif 85 86# Source files linked in via configuration/make substitution for a 87# particular host, but with ad hoc naming rules. 88host_sources_extra = \ 89 basic_file.cc c++locale.cc \ 90 ${inst_sources} ${parallel_sources} 91 92c++locale.cc: ${glibcxx_srcdir}/$(CLOCALE_CC) 93 $(LN_S) ${glibcxx_srcdir}/$(CLOCALE_CC) ./$@ || true 94 95basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC) 96 $(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true 97 98if ENABLE_DUAL_ABI 99cxx11_abi_sources = \ 100 cow-istream-string.cc 101else 102cxx11_abi_sources = 103endif 104 105if ENABLE_EXTERN_TEMPLATE 106# XTEMPLATE_FLAGS = -fno-implicit-templates 107inst_sources = \ 108 allocator-inst.cc \ 109 concept-inst.cc \ 110 ext-inst.cc \ 111 misc-inst.cc 112else 113# XTEMPLATE_FLAGS = 114inst_sources = 115endif 116 117parallel_sources = parallel_settings.cc 118 119# Sources present in the src directory, always present. 120sources = \ 121 bitmap_allocator.cc \ 122 pool_allocator.cc \ 123 mt_allocator.cc \ 124 codecvt.cc \ 125 complex_io.cc \ 126 globals_io.cc \ 127 hash_tr1.cc \ 128 hashtable_tr1.cc \ 129 ios_failure.cc \ 130 ios_init.cc \ 131 ios_locale.cc \ 132 list.cc \ 133 list-aux.cc \ 134 list-aux-2.cc \ 135 list_associated.cc \ 136 list_associated-2.cc \ 137 locale.cc \ 138 locale_init.cc \ 139 locale_facets.cc \ 140 localename.cc \ 141 math_stubs_float.cc \ 142 math_stubs_long_double.cc \ 143 stdexcept.cc \ 144 strstream.cc \ 145 tree.cc \ 146 istream.cc \ 147 istream-string.cc \ 148 streambuf.cc \ 149 valarray.cc \ 150 ${cxx11_abi_sources} \ 151 ${host_sources} \ 152 ${host_sources_extra} 153 154vpath % $(top_srcdir)/src/c++98 155 156libc__98convenience_la_SOURCES = $(sources) 157 158if ENABLE_DUAL_ABI 159GLIBCXX_ABI_FLAGS = -D_GLIBCXX_USE_CXX11_ABI=@glibcxx_cxx98_abi@ 160# Use special rules to compile with the non-default string ABI. 161collate_members_cow.lo: collate_members_cow.cc 162 $(LTCXXCOMPILE) $(GLIBCXX_ABI_FLAGS) -fimplicit-templates -c $< 163collate_members_cow.o: collate_members_cow.cc 164 $(CXXCOMPILE) $(GLIBCXX_ABI_FLAGS) -fimplicit-templates -c $< 165messages_members_cow.lo: messages_members_cow.cc 166 $(LTCXXCOMPILE) $(GLIBCXX_ABI_FLAGS) -fimplicit-templates -c $< 167messages_members_cow.o: messages_members_cow.cc 168 $(CXXCOMPILE) $(GLIBCXX_ABI_FLAGS) -fimplicit-templates -c $< 169monetary_members_cow.lo: monetary_members_cow.cc 170 $(LTCXXCOMPILE) $(GLIBCXX_ABI_FLAGS) -fimplicit-templates -c $< 171monetary_members_cow.o: monetary_members_cow.cc 172 $(CXXCOMPILE) $(GLIBCXX_ABI_FLAGS) -fimplicit-templates -c $< 173numeric_members_cow.lo: numeric_members_cow.cc 174 $(LTCXXCOMPILE) $(GLIBCXX_ABI_FLAGS) -fimplicit-templates -c $< 175numeric_members_cow.o: numeric_members_cow.cc 176 $(CXXCOMPILE) $(GLIBCXX_ABI_FLAGS) -fimplicit-templates -c $< 177endif 178 179# XXX TODO move locale_init.cc and localename.cc to src/c++11 180locale_init.lo: locale_init.cc 181 $(LTCXXCOMPILE) -std=gnu++11 -c $< 182locale_init.o: locale_init.cc 183 $(LTCXXCOMPILE) -std=gnu++11 -c $< 184localename.lo: localename.cc 185 $(LTCXXCOMPILE) -std=gnu++11 -c $< 186localename.o: localename.cc 187 $(LTCXXCOMPILE) -std=gnu++11 -c $< 188 189# Use special rules for the deprecated source files so that they find 190# deprecated include files. 191GLIBCXX_INCLUDE_DIR=$(glibcxx_builddir)/include 192strstream.lo: strstream.cc 193 $(LTCXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $< 194strstream.o: strstream.cc 195 $(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $< 196 197# Use special rules for the concept-checking instantiations so that all 198# the generated template functions are also instantiated. Force the checks 199# to be on so that the instantiations are actually seen. 200concept-inst.lo: concept-inst.cc 201 $(LTCXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $< 202concept-inst.o: concept-inst.cc 203 $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $< 204 205# Use special rules for parallel mode compilation. 206PARALLEL_FLAGS = -D_GLIBCXX_PARALLEL 207parallel_settings.lo: parallel_settings.cc 208 $(LTCXXCOMPILE) $(PARALLEL_FLAGS) -c $< 209parallel_settings.o: parallel_settings.cc 210 $(CXXCOMPILE) $(PARALLEL_FLAGS) -c $< 211 212# AM_CXXFLAGS needs to be in each subdirectory so that it can be 213# modified in a per-library or per-sub-library way. Need to manually 214# set this option because CONFIG_CXXFLAGS has to be after 215# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden 216# as the occasion calls for it. 217AM_CXXFLAGS = \ 218 $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \ 219 $(XTEMPLATE_FLAGS) $(VTV_CXXFLAGS) \ 220 $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS) 221 222AM_MAKEFLAGS = \ 223 "gxx_include_dir=$(gxx_include_dir)" 224 225# Libtool notes 226 227# 1) In general, libtool expects an argument such as `--tag=CXX' when 228# using the C++ compiler, because that will enable the settings 229# detected when C++ support was being configured. However, when no 230# such flag is given in the command line, libtool attempts to figure 231# it out by matching the compiler name in each configuration section 232# against a prefix of the command line. The problem is that, if the 233# compiler name and its initial flags stored in the libtool 234# configuration file don't match those in the command line, libtool 235# can't decide which configuration to use, and it gives up. The 236# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe 237# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to 238# attempt to infer which configuration to use. 239# 240# The second tag argument, `--tag disable-shared` means that libtool 241# only compiles each source once, for static objects. In actuality, 242# glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to 243# the libtool command that is used create the object, which is 244# suitable for shared libraries. The `--tag disable-shared` must be 245# placed after --tag CXX lest things CXX undo the affect of 246# disable-shared. 247 248# 2) Need to explicitly set LTCXXCOMPILE so that EXTRA_CXX_FLAGS is 249# last. (That way, things like -O2 passed down from the toplevel can 250# be overridden by --enable-debug.) 251LTCXXCOMPILE = \ 252 $(LIBTOOL) --tag CXX --tag disable-shared \ 253 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ 254 --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \ 255 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) $(EXTRA_CXX_FLAGS) 256 257LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) 258 259# 3) We'd have a problem when building the shared libstdc++ object if 260# the rules automake generates would be used. We cannot allow g++ to 261# be used since this would add -lstdc++ to the link line which of 262# course is problematic at this point. So, we get the top-level 263# directory to configure libstdc++-v3 to use gcc as the C++ 264# compilation driver. 265CXXLINK = \ 266 $(LIBTOOL) --tag CXX --tag disable-shared \ 267 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ 268 --mode=link $(CXX) \ 269 $(VTV_CXXLINKFLAGS) \ 270 $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@ 271