]>
Commit | Line | Data |
---|---|---|
0ca7ba9a JW |
1 | ## Makefile for the GNU C++ Filesystem library. |
2 | ## | |
cbe34bb5 | 3 | ## Copyright (C) 2014-2017 Free Software Foundation, Inc. |
0ca7ba9a JW |
4 | ## |
5 | ## Process this file with automake to produce Makefile.in. | |
6 | ## | |
7 | ## This file is part of GCC. | |
8 | ## | |
9 | ## GCC is free software; you can redistribute it and/or modify | |
10 | ## it under the terms of the GNU General Public License as published by | |
11 | ## the Free Software Foundation; either version 3, or (at your option) | |
12 | ## any later version. | |
13 | ## | |
14 | ## GCC 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 | |
20 | ## along with GCC; see the file COPYING3. If not see | |
21 | ## <http://www.gnu.org/licenses/>. | |
22 | ||
23 | include $(top_srcdir)/fragment.am | |
24 | ||
25 | toolexeclib_LTLIBRARIES = libstdc++fs.la | |
26 | ||
27 | headers = | |
28 | ||
8b756210 JW |
29 | if ENABLE_DUAL_ABI |
30 | cxx11_abi_sources = \ | |
31 | cow-dir.cc \ | |
32 | cow-ops.cc \ | |
641cb5a6 JW |
33 | cow-path.cc \ |
34 | cow-std-dir.cc \ | |
35 | cow-std-ops.cc \ | |
36 | cow-std-path.cc | |
8b756210 JW |
37 | else |
38 | cxx11_abi_sources = | |
39 | endif | |
40 | ||
0ca7ba9a JW |
41 | sources = \ |
42 | dir.cc \ | |
43 | ops.cc \ | |
8b756210 | 44 | path.cc \ |
641cb5a6 JW |
45 | std-dir.cc \ |
46 | std-ops.cc \ | |
47 | std-path.cc \ | |
8b756210 | 48 | ${cxx11_abi_sources} |
0ca7ba9a JW |
49 | |
50 | # vpath % $(top_srcdir)/src/filesystem | |
51 | ||
52 | libstdc__fs_la_SOURCES = $(sources) | |
53 | ||
54 | # AM_CXXFLAGS needs to be in each subdirectory so that it can be | |
55 | # modified in a per-library or per-sub-library way. Need to manually | |
56 | # set this option because CONFIG_CXXFLAGS has to be after | |
57 | # OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden | |
58 | # as the occasion call for it. | |
59 | AM_CXXFLAGS = \ | |
60 | $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \ | |
641cb5a6 | 61 | -std=gnu++17 \ |
0ca7ba9a JW |
62 | $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS) |
63 | ||
64 | AM_MAKEFLAGS = \ | |
65 | "gxx_include_dir=$(gxx_include_dir)" | |
66 | ||
67 | ||
68 | # Libtool notes | |
69 | ||
70 | # 1) In general, libtool expects an argument such as `--tag=CXX' when | |
71 | # using the C++ compiler, because that will enable the settings | |
72 | # detected when C++ support was being configured. However, when no | |
73 | # such flag is given in the command line, libtool attempts to figure | |
74 | # it out by matching the compiler name in each configuration section | |
75 | # against a prefix of the command line. The problem is that, if the | |
76 | # compiler name and its initial flags stored in the libtool | |
77 | # configuration file don't match those in the command line, libtool | |
78 | # can't decide which configuration to use, and it gives up. The | |
79 | # correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe | |
80 | # CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to | |
81 | # attempt to infer which configuration to use. | |
f92ab29f | 82 | # |
0ca7ba9a JW |
83 | # The second tag argument, `--tag disable-shared` means that libtool |
84 | # only compiles each source once, for static objects. In actuality, | |
85 | # glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to | |
86 | # the libtool command that is used create the object, which is | |
87 | # suitable for shared libraries. The `--tag disable-shared` must be | |
88 | # placed after --tag CXX lest things CXX undo the affect of | |
89 | # disable-shared. | |
90 | ||
91 | # 2) Need to explicitly set LTCXXCOMPILE so that EXTRA_CXX_FLAGS is | |
92 | # last. (That way, things like -O2 passed down from the toplevel can | |
93 | # be overridden by --enable-debug.) | |
94 | LTCXXCOMPILE = \ | |
95 | $(LIBTOOL) --tag CXX --tag disable-shared \ | |
96 | $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ | |
97 | --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \ | |
98 | $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) $(EXTRA_CXX_FLAGS) | |
99 | ||
100 | LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) | |
101 | ||
102 | # 3) We'd have a problem when building the shared libstdc++ object if | |
103 | # the rules automake generates would be used. We cannot allow g++ to | |
104 | # be used since this would add -lstdc++ to the link line which of | |
105 | # course is problematic at this point. So, we get the top-level | |
106 | # directory to configure libstdc++-v3 to use gcc as the C++ | |
107 | # compilation driver. | |
108 | CXXLINK = \ | |
109 | $(LIBTOOL) --tag CXX --tag disable-shared \ | |
110 | $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ | |
111 | --mode=link $(CXX) \ | |
112 | $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@ | |
113 | ||
114 | # By adding these files here, automake will remove them for 'make clean' | |
115 | CLEANFILES = stamp-* | |
116 |