]>
Commit | Line | Data |
---|---|---|
458f31b3 | 1 | ## Makefile for the GNU C++ Support library. |
2 | ## | |
fbd26352 | 3 | ## Copyright (C) 2000-2019 Free Software Foundation, Inc. |
458f31b3 | 4 | ## |
5 | ## Process this file with automake to produce Makefile.in. | |
6 | ## | |
908dad4c | 7 | ## This file is part of GCC. |
458f31b3 | 8 | ## |
908dad4c | 9 | ## GCC is free software; you can redistribute it and/or modify |
458f31b3 | 10 | ## it under the terms of the GNU General Public License as published by |
6bc9506f | 11 | ## the Free Software Foundation; either version 3, or (at your option) |
458f31b3 | 12 | ## any later version. |
13 | ## | |
908dad4c | 14 | ## GCC is distributed in the hope that it will be useful, |
458f31b3 | 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 | |
6bc9506f | 20 | ## along with GCC; see the file COPYING3. If not see |
21 | ## <http://www.gnu.org/licenses/>. | |
458f31b3 | 22 | |
2eb169cd | 23 | include $(top_srcdir)/fragment.am |
458f31b3 | 24 | |
25 | # Need this library to both be part of libstdc++.a, and installed | |
26 | # separately too. | |
6f4a1f78 | 27 | # 1) separate libsupc++.la |
458f31b3 | 28 | toolexeclib_LTLIBRARIES = libsupc++.la |
b710ec85 | 29 | |
458f31b3 | 30 | # 2) integrated libsupc++convenience.la that is to be a part of libstdc++.a |
31 | noinst_LTLIBRARIES = libsupc++convenience.la | |
32 | ||
dee74d2b | 33 | std_HEADERS = \ |
08709c1d | 34 | cxxabi.h exception initializer_list new typeinfo |
812093f2 | 35 | |
dee74d2b | 36 | bits_HEADERS = \ |
06bc5cca | 37 | atomic_lockfree_defines.h cxxabi_forced.h \ |
cce8e592 | 38 | exception_defines.h exception_ptr.h hash_bytes.h nested_exception.h exception.h cxxabi_init_exception.h |
dee74d2b | 39 | |
40 | headers = $(std_HEADERS) $(bits_HEADERS) | |
458f31b3 | 41 | |
ece3a793 | 42 | if GLIBCXX_HOSTED |
43 | c_sources = \ | |
08709c1d | 44 | cp-demangle.c |
ece3a793 | 45 | endif |
93efbc09 | 46 | |
a24f7403 | 47 | sources = \ |
f779f82c | 48 | array_type_info.cc \ |
71ac9b47 | 49 | atexit_arm.cc \ |
db019d30 | 50 | atexit_thread.cc \ |
d6fb444d | 51 | bad_alloc.cc \ |
bb35a4c0 | 52 | bad_array_length.cc \ |
53 | bad_array_new.cc \ | |
f779f82c | 54 | bad_cast.cc \ |
55 | bad_typeid.cc \ | |
56 | class_type_info.cc \ | |
458f31b3 | 57 | del_op.cc \ |
d1856d2c | 58 | del_ops.cc \ |
458f31b3 | 59 | del_opnt.cc \ |
60 | del_opv.cc \ | |
d1856d2c | 61 | del_opvs.cc \ |
458f31b3 | 62 | del_opvnt.cc \ |
f779f82c | 63 | dyncast.cc \ |
df4b504c | 64 | eh_alloc.cc \ |
1774763d | 65 | eh_arm.cc \ |
df4b504c | 66 | eh_aux_runtime.cc \ |
1774763d | 67 | eh_call.cc \ |
df4b504c | 68 | eh_catch.cc \ |
69 | eh_exception.cc \ | |
70 | eh_globals.cc \ | |
71 | eh_personality.cc \ | |
1e75b4be | 72 | eh_ptr.cc \ |
f1c77ff0 | 73 | eh_term_handler.cc \ |
df4b504c | 74 | eh_terminate.cc \ |
4c0315d0 | 75 | eh_tm.cc \ |
df4b504c | 76 | eh_throw.cc \ |
3c70bc92 | 77 | eh_type.cc \ |
f1c77ff0 | 78 | eh_unex_handler.cc \ |
f779f82c | 79 | enum_type_info.cc \ |
80 | function_type_info.cc \ | |
81 | fundamental_type_info.cc \ | |
969fe59c | 82 | guard.cc \ |
6b6fa10e | 83 | guard_error.cc \ |
53d917a2 | 84 | hash_bytes.cc \ |
c3007d7f | 85 | nested_exception.cc \ |
458f31b3 | 86 | new_handler.cc \ |
87 | new_op.cc \ | |
88 | new_opnt.cc \ | |
89 | new_opv.cc \ | |
90 | new_opvnt.cc \ | |
db8ffb40 | 91 | new_opa.cc \ |
92 | new_opant.cc \ | |
93 | new_opva.cc \ | |
94 | new_opvant.cc \ | |
95 | del_opa.cc \ | |
96 | del_opant.cc \ | |
97 | del_opsa.cc \ | |
98 | del_opva.cc \ | |
99 | del_opvant.cc \ | |
100 | del_opvsa.cc \ | |
f779f82c | 101 | pbase_type_info.cc \ |
102 | pmem_type_info.cc \ | |
103 | pointer_type_info.cc \ | |
077d3733 | 104 | pure.cc \ |
f779f82c | 105 | si_class_type_info.cc \ |
458f31b3 | 106 | tinfo.cc \ |
107 | tinfo2.cc \ | |
f1c77ff0 | 108 | vec.cc \ |
f779f82c | 109 | vmi_class_type_info.cc \ |
f1c77ff0 | 110 | vterminate.cc |
458f31b3 | 111 | |
b710ec85 | 112 | if ENABLE_VTABLE_VERIFY |
5be42fa9 | 113 | if !VTV_CYGMIN |
b710ec85 | 114 | vtv_sources = \ |
115 | vtv_stubs.cc | |
116 | endif | |
5be42fa9 | 117 | endif |
b710ec85 | 118 | |
119 | libsupc___la_SOURCES = $(sources) $(c_sources) $(vtv_sources) | |
120 | libsupc__convenience_la_SOURCES = $(sources) $(c_sources) $(vtv_sources) | |
458f31b3 | 121 | |
93efbc09 | 122 | cp-demangle.c: |
123 | rm -f $@ | |
124 | $(LN_S) $(toplevel_srcdir)/libiberty/cp-demangle.c $@ | |
125 | cp-demangle.lo: cp-demangle.c | |
126 | $(LTCOMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $< | |
127 | cp-demangle.o: cp-demangle.c | |
128 | $(C_COMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $< | |
129 | ||
130 | ||
db8ffb40 | 131 | # Use special rules for the C++17 sources so that the proper flags are passed. |
132 | new_opa.lo: new_opa.cc | |
133 | $(LTCXXCOMPILE) -std=gnu++1z -c $< | |
134 | new_opant.lo: new_opant.cc | |
135 | $(LTCXXCOMPILE) -std=gnu++1z -c $< | |
136 | new_opva.lo: new_opva.cc | |
137 | $(LTCXXCOMPILE) -std=gnu++1z -c $< | |
138 | new_opvant.lo: new_opvant.cc | |
139 | $(LTCXXCOMPILE) -std=gnu++1z -c $< | |
140 | del_opa.lo: del_opa.cc | |
141 | $(LTCXXCOMPILE) -std=gnu++1z -c $< | |
142 | del_opant.lo: del_opant.cc | |
143 | $(LTCXXCOMPILE) -std=gnu++1z -c $< | |
144 | del_opsa.lo: del_opsa.cc | |
145 | $(LTCXXCOMPILE) -std=gnu++1z -c $< | |
146 | del_opva.lo: del_opva.cc | |
147 | $(LTCXXCOMPILE) -std=gnu++1z -c $< | |
148 | del_opvant.lo: del_opvant.cc | |
149 | $(LTCXXCOMPILE) -std=gnu++1z -c $< | |
150 | del_opvsa.lo: del_opvsa.cc | |
151 | $(LTCXXCOMPILE) -std=gnu++1z -c $< | |
152 | ||
eaf4b52d | 153 | # AM_CXXFLAGS needs to be in each subdirectory so that it can be |
154 | # modified in a per-library or per-sub-library way. Need to manually | |
155 | # set this option because CONFIG_CXXFLAGS has to be after | |
156 | # OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden | |
157 | # as the occasion call for it. | |
158 | AM_CXXFLAGS = \ | |
159 | $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \ | |
160 | $(XTEMPLATE_FLAGS) \ | |
161 | $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS) | |
162 | ||
163 | AM_MAKEFLAGS = \ | |
164 | "gxx_include_dir=$(gxx_include_dir)" | |
985550e9 | 165 | |
985550e9 | 166 | |
eaf4b52d | 167 | # Use special rules for pulling things out of libiberty. These |
168 | # objects should be compiled with the "C" compiler, not the C++ | |
169 | # compiler, and also should not use the C++ includes. | |
170 | C_INCLUDES = -I.. -I$(toplevel_srcdir)/libiberty -I$(toplevel_srcdir)/include | |
171 | C_COMPILE = \ | |
172 | $(CC) $(DEFS) $(C_INCLUDES) \ | |
7bde822d | 173 | $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) |
eaf4b52d | 174 | |
175 | # LTCOMPILE is copied from LTCXXCOMPILE below. | |
176 | LTCOMPILE = $(LIBTOOL) --tag CC --tag disable-shared $(LIBTOOLFLAGS) --mode=compile \ | |
177 | $(CC) $(DEFS) $(C_INCLUDES) \ | |
178 | $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \ | |
7bde822d | 179 | $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) |
eaf4b52d | 180 | |
181 | # Libtool notes | |
182 | ||
183 | # 1) In general, libtool expects an argument such as `--tag=CXX' when | |
985550e9 | 184 | # using the C++ compiler, because that will enable the settings |
185 | # detected when C++ support was being configured. However, when no | |
186 | # such flag is given in the command line, libtool attempts to figure | |
187 | # it out by matching the compiler name in each configuration section | |
188 | # against a prefix of the command line. The problem is that, if the | |
189 | # compiler name and its initial flags stored in the libtool | |
190 | # configuration file don't match those in the command line, libtool | |
191 | # can't decide which configuration to use, and it gives up. The | |
192 | # correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe | |
193 | # CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to | |
af3ed51d | 194 | # attempt to infer which configuration to use. |
eaf4b52d | 195 | # |
196 | # The second tag argument, `--tag disable-shared` means that libtool | |
197 | # only compiles each source once, for static objects. In actuality, | |
198 | # glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to | |
199 | # the libtool command that is used create the object, which is | |
200 | # suitable for shared libraries. The `--tag disable-shared` must be | |
201 | # placed after --tag CXX lest things CXX undo the affect of | |
202 | # disable-shared. | |
203 | ||
8baf772f | 204 | # 2) Need to explicitly set LTCXXCOMPILE so that EXTRA_CXX_FLAGS is |
eaf4b52d | 205 | # last. (That way, things like -O2 passed down from the toplevel can |
206 | # be overridden by --enable-debug.) | |
08709c1d | 207 | LTCXXCOMPILE = \ |
208 | $(LIBTOOL) --tag CXX --tag disable-shared \ | |
209 | $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ | |
210 | --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \ | |
8baf772f | 211 | $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) $(EXTRA_CXX_FLAGS) |
a608f5bc | 212 | |
3b6bba18 | 213 | LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) |
214 | ||
98abb3d0 | 215 | # 3) We'd have a problem when building the shared libstdc++ object if |
216 | # the rules automake generates would be used. We cannot allow g++ to | |
217 | # be used since this would add -lstdc++ to the link line which of | |
218 | # course is problematic at this point. So, we get the top-level | |
219 | # directory to configure libstdc++-v3 to use gcc as the C++ | |
220 | # compilation driver. | |
08709c1d | 221 | CXXLINK = \ |
222 | $(LIBTOOL) --tag CXX --tag disable-shared \ | |
223 | $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ | |
224 | --mode=link $(CXX) \ | |
225 | $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@ | |
dee74d2b | 226 | |
227 | # Install notes | |
9f1bfa5d | 228 | # We have to have rules modified from the default to counteract SUN make |
dee74d2b | 229 | # prepending each of $(*_HEADERS) with VPATH below. |
230 | stddir = $(gxx_include_dir) | |
231 | bitsdir = $(gxx_include_dir)/bits | |
232 | ||
233 | install-stdHEADERS: $(std_HEADERS) | |
9f1bfa5d | 234 | @$(NORMAL_INSTALL) |
dee74d2b | 235 | $(mkinstalldirs) $(DESTDIR)$(stddir) |
236 | @list='$(std_HEADERS)'; for p in $$list; do \ | |
9f1bfa5d | 237 | q=`echo $$p | sed -e 's,.*/,,'`; \ |
238 | if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ | |
dee74d2b | 239 | echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(stddir)/$$q"; \ |
240 | $(INSTALL_DATA) $$d$$p $(DESTDIR)$(stddir)/$$q; \ | |
241 | done | |
242 | ||
243 | install-bitsHEADERS: $(bits_HEADERS) | |
244 | @$(NORMAL_INSTALL) | |
245 | $(mkinstalldirs) $(DESTDIR)$(bitsdir) | |
246 | @list='$(bits_HEADERS)'; for p in $$list; do \ | |
247 | q=`echo $$p | sed -e 's,.*/,,'`; \ | |
248 | if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ | |
249 | echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(bitsdir)/$$q"; \ | |
250 | $(INSTALL_DATA) $$d$$p $(DESTDIR)$(bitsdir)/$$q; \ | |
251 | done | |
252 | ||
253 | uninstall-stdHEADERS: | |
254 | @$(NORMAL_UNINSTALL) | |
255 | list='$(std_HEADERS)'; for p in $$list; do \ | |
256 | q=`echo $$p | sed -e 's,.*/,,'`; \ | |
257 | rm -f $(DESTDIR)$(stddir)/$$q; \ | |
9f1bfa5d | 258 | done |
259 | ||
dee74d2b | 260 | uninstall-bitsHEADERS: |
9f1bfa5d | 261 | @$(NORMAL_UNINSTALL) |
dee74d2b | 262 | list='$(bits_HEADERS)'; for p in $$list; do \ |
9f1bfa5d | 263 | q=`echo $$p | sed -e 's,.*/,,'`; \ |
dee74d2b | 264 | rm -f $(DESTDIR)$(bitsdir)/$$q; \ |
9f1bfa5d | 265 | done |
b710ec85 | 266 | |
267 | ||
268 | # By adding these files here, automake will remove them for 'make clean' | |
269 | CLEANFILES = stamp-* | |
270 |