]>
Commit | Line | Data |
---|---|---|
b168057a | 1 | # Copyright (C) 1993-2015 Free Software Foundation, Inc. |
28f540f4 RM |
2 | # This file is part of the GNU C Library. |
3 | ||
4 | # The GNU C Library is free software; you can redistribute it and/or | |
41bdb6e2 AJ |
5 | # modify it under the terms of the GNU Lesser General Public |
6 | # License as published by the Free Software Foundation; either | |
7 | # version 2.1 of the License, or (at your option) any later version. | |
28f540f4 RM |
8 | |
9 | # The GNU C Library is distributed in the hope that it will be useful, | |
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
41bdb6e2 | 12 | # Lesser General Public License for more details. |
28f540f4 | 13 | |
41bdb6e2 | 14 | # You should have received a copy of the GNU Lesser General Public |
59ba27a6 PE |
15 | # License along with the GNU C Library; if not, see |
16 | # <http://www.gnu.org/licenses/>. | |
28f540f4 | 17 | |
28f540f4 RM |
18 | ifdef in-Makerules |
19 | ||
28f540f4 | 20 | # Look for header files in hurd/ under the top-level library source directory. |
757dc096 TBB |
21 | # Look for generated header files where they get created. |
22 | includes += -I$(..)hurd -I$(common-objpfx)hurd/ | |
28f540f4 | 23 | |
7d25696a RM |
24 | # We use the style `if (err = call(...))' a lot in the Hurd code, |
25 | # where we have a lot of functions that return zero or an errno code. | |
26 | +cflags += -Wno-parentheses | |
27 | ||
28f540f4 RM |
28 | # Do not use any assembly code from sysdeps/unix (and subdirectories). |
29 | # This bypasses all the system call stubs and uses any existing posix or | |
30 | # generic C files instead. | |
346d65b3 | 31 | inhibit-sysdep-asm += unix.* |
4ca84cff | 32 | inhibit-unix-syscalls = yes |
28f540f4 RM |
33 | |
34 | # Don't try to generate anything from the installed Unix system and its | |
35 | # libraries. That is only of use when building for a Unix system, so as to | |
36 | # be compatible with some existing binaries for that system. | |
37 | inhibit-glue = yes | |
38 | ||
28f540f4 RM |
39 | ifeq (,$(filter mach hurd,$(subdir))) |
40 | # Subdirectories other than hurd/ might use the generated Hurd headers. | |
41 | # So make sure we get a chance to run in hurd/ to make them before all else. | |
42 | # (But we don't want to do this in mach/, because hurd/ needs some things | |
43 | # there, and we know mach/ doesn't need anything from hurd/.) | |
44 | ||
6e953631 | 45 | hurd-objpfx = $(common-objpfx)hurd/ |
28f540f4 RM |
46 | |
47 | # These are all the generated headers that <hurd.h> includes. | |
924840c5 | 48 | before-compile += $(patsubst %,$(hurd-objpfx)hurd/%.h,auth io fs process) |
c06b8d60 RM |
49 | $(patsubst %,$(hurd-objpfx)hurd/%.%,auth io fs process): \ |
50 | $(common-objpfx)mach/mach-shortcuts.h | |
bd78530f | 51 | $(MAKE) -C $(..)hurd before-compile no_deps=t |
28f540f4 | 52 | endif |
924840c5 | 53 | |
0413b54c UD |
54 | # Hurd profil.c includes this file, so give a rule to make it. |
55 | ifeq ($(subdir),gmon) | |
56 | $(common-objpfx)hurd/../mach/RPC_task_get_sampled_pcs.c: | |
bd78530f | 57 | $(MAKE) -C $(..)mach before-compile no_deps=t |
0413b54c UD |
58 | endif |
59 | ||
28f540f4 | 60 | \f |
75d0cab2 | 61 | # Generate bits/errno.h from the section of the manual that lists all the errno |
b25ae9c6 | 62 | # codes. |
28f540f4 RM |
63 | |
64 | errno.texinfo = $(..)manual/errno.texi | |
65 | ||
66 | hurd = $(..)sysdeps/mach/hurd | |
67 | ||
aa1075ea RM |
68 | define mach-errno-h |
69 | ($(foreach h,mach/message.h \ | |
70 | mach/kern_return.h \ | |
71 | mach/mig_errors.h \ | |
72 | device/device_types.h,\ | |
73 | echo '#include <$h>';\ | |
74 | )) | |
75 | endef | |
76 | ||
77 | # We use the compiler to generate a list of absolute file names for | |
78 | # the headers we want to search for Mach error codes, listed above (and | |
79 | # incidentally, all other headers those include). | |
80 | -include $(common-objpfx)errnos.d | |
81 | $(common-objpfx)errnos.d: $(mach-errnos-deps) | |
82 | $(mach-errno-h) | \ | |
0dc87bc6 | 83 | $(CC) $(CFLAGS) $(CPPFLAGS) -M -x c - | \ |
d7bca0d3 | 84 | sed $(sed-remove-objpfx) -e 's,- *:,mach-errnos-deps :=,' \ |
224a12bc | 85 | -e 's, \.\./, $(..),g' > $@t |
aa1075ea RM |
86 | mv -f $@t $@ |
87 | ||
75d0cab2 | 88 | $(hurd)/bits/errno.h: $(common-objpfx)stamp-errnos ; |
aa1075ea | 89 | $(common-objpfx)stamp-errnos: $(hurd)/errnos.awk $(errno.texinfo) \ |
46db1cb0 | 90 | $(mach-errnos-deps) $(common-objpfx)errnos.d |
75d0cab2 | 91 | $(AWK) -f $^ > $(hurd)/bits/errno.h-tmp |
28f540f4 | 92 | # Make it unwritable so noone will edit it by mistake. |
75d0cab2 RM |
93 | -chmod a-w $(hurd)/bits/errno.h-tmp |
94 | $(move-if-change) $(hurd)/bits/errno.h-tmp $(hurd)/bits/errno.h | |
28f540f4 | 95 | touch $@ |
924840c5 TBB |
96 | |
97 | common-generated += errnos.d stamp-errnos | |
28f540f4 RM |
98 | \f |
99 | # We install the real libc.a as libcrt.a and as libc.a we install a linker | |
100 | # script which does -( -lcrt -lmachuser -lhurduser -). | |
101 | ||
102 | libc-name = crt | |
103 | ||
104 | ifeq (,$(subdir)) | |
3635e76a | 105 | install-others += $(inst_libdir)/libc.a |
73237de3 | 106 | $(inst_libdir)/libc.a: $(hurd)/libc-ldscript $(+force); $(do-install) |
3635e76a RM |
107 | ifeq (yes,$(build-profile)) |
108 | install-others += $(inst_libdir)/libc_p.a | |
73237de3 | 109 | $(inst_libdir)/libc_p.a: $(hurd)/libc_p-ldscript $(+force); $(do-install) |
28f540f4 | 110 | endif |
3635e76a | 111 | endif |
11872325 | 112 | |
0702b5f4 RM |
113 | # Make sure these are used to build the libc.so shared object too. There |
114 | # is a circular dependency between each of these shared objects and libc | |
115 | # (many high-level libc functions call stubs, stubs call low-level libc | |
116 | # functions like memcpy and mach_msg). This works out fine at run time | |
117 | # (all the objects are loaded before resolving their symbols, so these | |
118 | # interdependencies are fine). But to create the shared objects we must | |
119 | # link them one at a time; since each needs one or both of the others to | |
120 | # produce its DT_NEEDED entries and to assign its undefined symbols the | |
121 | # right symbol versions, we can't do any of them before the others! To | |
122 | # get around this, we link each lib*user.so shared object twice. First, | |
123 | # we link an object without reference to libc.so (since we haven't linked | |
124 | # libc.so yet), so it lacks a DT_NEEDED record for the libc soname it | |
125 | # depends on, and its undefined symbol references lack the symbol version | |
126 | # assignments they should have. We will use this shared object solely to | |
127 | # link libc.so against it; that gives libc.so the proper DT_NEEDED record, | |
128 | # and symbol versions assignments (if the lib*user.so object is using them). | |
129 | # Finally we link a second version of the same lib*user.so shared object, | |
130 | # this time linked normally against libc so it gets a proper DT_NEEDED | |
131 | # record and symbol version set; this one can be installed for run-time use. | |
6e953631 UD |
132 | rpcuserlibs := $(common-objpfx)mach/libmachuser.so \ |
133 | $(common-objpfx)hurd/libhurduser.so | |
0702b5f4 | 134 | link-rpcuserlibs := $(rpcuserlibs:%user.so=%user-link.so) |
5407f442 | 135 | $(common-objpfx)libc.so: $(link-rpcuserlibs) |
510bbf14 | 136 | $(common-objpfx)linkobj/libc.so: $(link-rpcuserlibs) |
6598ac30 | 137 | rpath-dirs += mach hurd |
c7fd2f47 | 138 | |
5407f442 RM |
139 | # Make sure the `lib' pass builds the dummy shared objects so |
140 | # we can link libc against them. | |
141 | ifeq (mach,$(subdir)) | |
142 | lib-noranlib: $(common-objpfx)mach/libmachuser-link.so | |
143 | endif | |
144 | ifeq (hurd,$(subdir)) | |
145 | lib-noranlib: $(common-objpfx)hurd/libhurduser-link.so | |
146 | endif | |
147 | ||
0702b5f4 | 148 | $(link-rpcuserlibs): %-link.so: %_pic.a |
ba2c68f1 RM |
149 | # These shared objects are just for the purpose of linking libc, |
150 | # so they don't need abi-note.o linked into them. | |
c7414a8e RM |
151 | $(build-shlib-helper) \ |
152 | -nostdlib -o $@ \ | |
e17f3859 | 153 | -Wl,-soname=$(*F).so$($(*F).so-version) \ |
c7414a8e | 154 | $(build-shlib-objlist) |
f1c5213d RM |
155 | libmachuser-link.so-no-z-defs = yes |
156 | libhurduser-link.so-no-z-defs = yes | |
0702b5f4 | 157 | |
8a523922 | 158 | # And get them into the libc.so ldscript. |
8d57beea | 159 | $(inst_libdir)/libc.so: $(rpcuserlibs) |
8a523922 | 160 | |
c7fd2f47 RM |
161 | # The RPC stubs from these libraries are needed in building the dynamic |
162 | # linker, too. It must be self-contained, so we link the needed PIC | |
163 | # objects directly into the shared object. | |
164 | ifeq (elf,$(subdir)) | |
f1c5213d | 165 | $(objpfx)librtld.map: $(rpcuserlibs:.so=_pic.a) |
f787edde UD |
166 | |
167 | CFLAGS-dl-load.c = -DEXTERNAL_MAP_FROM_FD | |
c7fd2f47 | 168 | endif |
c82e6116 | 169 | |
7402596b TS |
170 | # Override the generic Makeconfig values so we link against the RPC libs. |
171 | link-libc-static := -Wl,--start-group \ | |
c82e6116 RM |
172 | $(patsubst %,$(common-objpfx)%.a,\ |
173 | libc mach/libmachuser hurd/libhurduser) \ | |
7402596b TS |
174 | $(static-gnulib) -Wl,--end-group |
175 | link-libc-static-tests := -Wl,--start-group \ | |
176 | $(patsubst %,$(common-objpfx)%.a,\ | |
177 | libc mach/libmachuser hurd/libhurduser) \ | |
178 | $(static-gnulib-tests) -Wl,--end-group | |
d3b82fcc RM |
179 | \f |
180 | ifeq ($(subdir),csu) | |
181 | ||
182 | extra-objs += static-start.o | |
183 | ||
184 | # We need special startup code for statically linked binaries. | |
185 | $(objpfx)crt0.o: $(objpfx)static-start.o $(objpfx)abi-note.o $(objpfx)init.o | |
186 | $(link-relocatable) | |
187 | ||
c82e6116 | 188 | endif |
28f540f4 | 189 | \f |
a7ab2023 UD |
190 | ifeq (hurd, $(subdir)) |
191 | sysdep_routines += cthreads | |
192 | endif | |
28f540f4 | 193 | |
50a25edf RM |
194 | ifeq ($(subdir),sunrpc) |
195 | sysdep_headers += nfs/nfs.h | |
196 | endif | |
197 | ||
c90c1e1c RM |
198 | ifeq ($(subdir),socket) |
199 | sysdep_headers += net/ethernet.h net/if_arp.h net/if_ether.h net/if_ppp.h \ | |
200 | net/route.h | |
201 | endif | |
202 | ||
28f540f4 | 203 | endif # in-Makerules |