]>
Commit | Line | Data |
---|---|---|
0c5ecdc4 | 1 | # Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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 | |
5 | # modify it under the terms of the GNU Library General Public License | |
6 | # as published by the Free Software Foundation; either version 2 of | |
7 | # the License, or (at your option) any later version. | |
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 | |
12 | # Library General Public License for more details. | |
13 | ||
14 | # You should have received a copy of the GNU Library General Public | |
0c5ecdc4 UD |
15 | # License along with the GNU C Library; see the file COPYING.LIB. If not, |
16 | # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
17 | # Boston, MA 02111-1307, USA. | |
28f540f4 RM |
18 | |
19 | subdir := mach | |
20 | ||
21 | all: | |
22 | ||
23 | # Some things below (but before including Rules) use configuration variables. | |
24 | include ../Makeconfig | |
25 | ||
26 | ||
c316b486 | 27 | headers = mach_init.h mach.h mach_error.h mach-shortcuts.h mach/mach_traps.h \ |
28f540f4 RM |
28 | $(interface-headers) mach/mach.h mach/mig_support.h mach/error.h \ |
29 | $(lock-headers) machine-sp.h | |
30 | distribute = thread_state.h | |
2f8033d6 | 31 | lock = spin-solid spin-lock mutex-init mutex-solid |
28f540f4 RM |
32 | lock-headers = lock-intern.h machine-lock.h spin-lock.h |
33 | routines = $(mach-syscalls) $(mach-shortcuts) \ | |
34 | mach_init mig_strncpy msg \ | |
35 | mig-alloc mig-dealloc mig-reply \ | |
36 | msg-destroy msgserver \ | |
37 | mach_error errstring error_compat errsystems \ | |
38 | devstream bootprivport setup-thread $(lock) | |
39 | # The RPC interfaces go in a separate library. | |
f0bf9cb9 | 40 | interface-library := libmachuser |
28f540f4 RM |
41 | user-interfaces := $(addprefix mach/,mach_interface mach_port mach_host \ |
42 | memory_object_user \ | |
43 | memory_object_default \ | |
44 | exc mach4 \ | |
41740721 | 45 | default_pager default_pager_helper \ |
28f540f4 RM |
46 | )\ |
47 | $(addprefix device/,device device_request) | |
aa592a63 RM |
48 | # We produce mach_interface.h from mach.defs because there is already a |
49 | # <mach/mach.h> that is not the interface header (thanks CMU). | |
c2bf8a5a MB |
50 | mach/mach_interface.defs = mach/mach.defs |
51 | # Similarly for memory_object_user vs. memory_object | |
52 | mach/memory_object_user.defs = mach/memory_object.defs | |
a1c46301 | 53 | server-interfaces := mach/exc |
28f540f4 RM |
54 | tests := hello |
55 | # It is important that we do not use the wildcard function to expand | |
56 | # `err_*.sub'. Leaving the wildcard allows Make-dist to find all matching | |
57 | # files in all sysdep directories. | |
58 | distribute += Machrules syscalls.awk shortcut.awk \ | |
158ff48e | 59 | errorlib.h err_*.sub errsystems.awk |
28f540f4 RM |
60 | |
61 | ||
62 | # Clear any environment value. | |
63 | generated = | |
64 | \f | |
28f540f4 | 65 | # Define mach-syscalls and sysno-*. |
a1c46301 | 66 | ifndef no_deps |
28f540f4 RM |
67 | ifndef inhibit_mach_syscalls |
68 | include $(objpfx)mach-syscalls.mk | |
69 | endif | |
a1c46301 | 70 | endif |
aa1075ea | 71 | $(objpfx)mach-syscalls.mk: syscalls.awk Makefile |
28f540f4 | 72 | # Go kludges!!! |
aa1075ea RM |
73 | echo '#include <mach/syscall_sw.h>' | \ |
74 | DEPENDENCIES_OUTPUT='$@-dep $@' \ | |
75 | $(CC) $(CPPFLAGS) -E -x c-header - \ | |
76 | -D_MACH_`echo $(base-machine) | tr a-z A-Z`_SYSCALL_SW_H_=1 | \ | |
77 | sed -n -e 's/^kernel_trap(\(.*\),\([-0-9]*\),\([0-9]*\))$$/\1 \2 \3/p'\ | |
5aa8ff62 | 78 | | $(AWK) -f $< > $@-new |
aa1075ea | 79 | cat $@-dep >> $@-new; rm -f $@-dep |
28f540f4 RM |
80 | mv $@-new $@ |
81 | generated += mach-syscalls.mk | |
82 | ||
83 | ifndef mach-syscalls | |
84 | # We cannot make the deps properly until we know how to make the system | |
85 | # call functions, and for that we must know what they all are. | |
86 | no_deps=t | |
87 | else | |
88 | $(mach-syscalls:%=$(objpfx)%.S): $(objpfx)%.S: $(objpfx)mach-syscalls.mk | |
89 | (echo '#include <sysdep.h>'; \ | |
90 | echo 'kernel_trap(__$*,$(sysno-$*),$(nargs-$*))'; \ | |
91 | echo 'weak_alias (__$*, $*)') > $@-new | |
92 | mv $@-new $@ | |
93 | generated += $(mach-syscalls:=.S) | |
94 | endif # mach-syscalls | |
95 | ||
96 | # syscall_device_writev_request has no RPC equivalent. | |
97 | mach-shortcuts := $(filter-out device_writev_request,\ | |
98 | $(patsubst syscall_%,%,$(filter syscall_%,$(mach-syscalls)))) | |
99 | ||
100 | ifndef mach-shortcuts | |
101 | # Forget about mach_interface.defs for this run. On the next run, | |
102 | # $(mach-shortcuts) will be set, and that will change how | |
103 | # mach_interface.defs is processed: it will get the -D flags below. | |
104 | user-interfaces := $(filter-out mach/mach_interface \ | |
105 | mach/mach_port mach/mach_host mach/mach4 \ | |
106 | device/device_request,\ | |
107 | $(user-interfaces)) | |
108 | endif | |
109 | ||
bfb82622 TBB |
110 | # For some reason, the calls in this file are `protected' by an ifdef. |
111 | MIGFLAGS-mach/mach4=-DMACH_PCSAMPLE | |
112 | ||
28f540f4 RM |
113 | # Make the MiG stubs for $(mach-shortcuts) be CALL_rpc. |
114 | migdefines += $(foreach call,$(mach-shortcuts),-D$(call)=$(call)_rpc) | |
acba7f19 | 115 | mach/mach_interface.uh mach/mach_host.uh mach/mach_port.uh: $(objpfx)mach-syscalls.mk |
28f540f4 RM |
116 | |
117 | ifdef mach-shortcuts | |
118 | $(mach-shortcuts:%=$(objpfx)%.c): $(objpfx)%.c: shortcut.awk \ | |
119 | $(objpfx)RPC_%_rpc.c | |
5aa8ff62 UD |
120 | $(AWK) -v alias=$* -v call=__$* -v rpc=__$*_rpc \ |
121 | -v syscall=__syscall_$* -f $^ > $@-new | |
28f540f4 RM |
122 | mv $@-new $@ |
123 | generated += $(mach-shortcuts:%=%.c) | |
124 | endif # mach-shortcuts | |
125 | ||
126 | # Generate mach-shortcuts.h, which will contain the prototypes for the | |
127 | # shortcutted kernel RPC functions. | |
128 | $(objpfx)mach-shortcuts.h: $(objpfx)mach/mach_interface.h \ | |
acba7f19 | 129 | $(objpfx)mach/mach_host.h \ |
28f540f4 RM |
130 | $(objpfx)mach/mach_port.h |
131 | # The first line gets us one paragraph per line, with @s separating real lines. | |
132 | # The second line selects paragraphs for the shortcutted functions. | |
6d52618b | 133 | # The third line removes `_rpc' from the names and reconstitutes the lines. |
28f540f4 RM |
134 | cat $^ | tr \\012 @ | sed s/@@/@%/g | tr % \\012 \ |
135 | | grep '^/\* Routine [a-z0-9_]*_rpc \*/' \ | |
136 | | sed 's/_rpc//g' | tr @ \\012 > $@-new | |
137 | mv $@-new $@ | |
138 | generated += mach-shortcuts.h | |
139 | ||
140 | before-compile += $(objpfx)mach-shortcuts.h | |
141 | \f | |
142 | include Machrules | |
143 | include ../Rules | |
144 | ||
145 | ||
421f82e5 RM |
146 | # A gcc bug prevents the generated file from working properly, |
147 | # so we have one in the distribution for the time being. | |
28f540f4 RM |
148 | generated += errsystems.c |
149 | $(objpfx)errsystems.c: errsystems.awk err_*.sub \ | |
150 | $(wildcard $(addsuffix /err_*.sub,$(+sysdep_dirs))) | |
5aa8ff62 | 151 | $(AWK) -v subsys='$(filter-out $<,$^)' -f $^ > $@.n |
28f540f4 | 152 | mv $@.n $@ |