Formerly ../mach/Makefile.~38~
[kopensolaris-gnu/glibc.git] / mach / Makefile
1 # Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
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
15 # License along with the GNU C Library; see the file COPYING.LIB.  If
16 # not, write to the Free Software Foundation, Inc., 675 Mass Ave,
17 # Cambridge, MA 02139, USA.
18
19 subdir := mach
20
21 distribute = Machrules syscalls.awk shortcut.awk
22
23 headers = mach_init.h mach.h mach-shortcuts.h \
24           $(interface-headers)
25 generated = mach-shortcuts.h
26
27
28 # Install the Mach header files directly out of the Mach kernel source.
29 mach-srcdir = /usr1/gnu/mach # XXX
30
31 # When compiling, use the Mach header files directly from the kernel sources.
32 includes += -I$(mach-srcdir)
33
34 mach-src-headers := $(wildcard $(addprefix $(mach-srcdir)/mach/,\
35                                            *.defs *.h
36                                            */*.defs */*.h))
37 mach-headers = $(filter-out mach/machine/%,\
38                             $(mach-src-headers:$(mach-srcdir)/%=%))
39 install-others += $(addprefix $(includedir),$(mach-headers))
40 $(includedir)/mach/%: $(mach-srcdir)/%; $(do-install)
41
42
43 user-interfaces := $(addprefix mach/,mach_interface mach_port mach_host \
44                                      memory_object_user                 \
45                                      memory_object_default              \
46                     )\
47                    $(addprefix device/,device device_request)
48 # device_reply is giving me headaches because of userprefix
49 server-interfaces := # mach/__exc mach/exc
50
51 routines = $(interface-routines) \
52            $(filter-out syscall_%,$(mach-syscalls)) \
53            $(addprefix __,$(mach-syscalls)) \
54            $(mach-shortcuts) $(addprefix __,$(mach-shortcuts)) \
55            mach_init vm_page_size \
56            mig_strncpy __msg msg \
57            mig_support mig_syms \
58            msg_destroy msg_server msg_server_t \
59            __msg_dest __msg_server \
60            devstream
61
62 tests := hello
63
64
65 all:
66
67 include ../Makeconfig   # To get objpfx defined.
68
69 # Define mach-syscalls and sysno-*.
70 ifneq ($(no_deps),t)
71 include $(objpfx)mach-syscalls.mk
72 endif
73 $(objpfx)mach-syscalls.mk: mach/syscall_sw.h syscalls.awk
74 # Go kludges!!!
75         sed -n -e '/Unix server implement them/,$$d' \
76                -e 's/^kernel_trap(\(.*\),\([-0-9]*\),[0-9]*)$$/\1 \2/p' \
77         < $< | awk -f $(word 2,$^) > $@-new
78         mv $@-new $@
79 generated += mach-syscalls.mk
80
81 ifndef mach-syscalls
82 # We cannot make the deps properly until we know how to make the system
83 # call functions, and for that we must know what they all are.
84 no_deps=t
85 else
86 $(mach-syscalls:%=$(objpfx)__%.S): $(objpfx)__%.S: $(objpfx)mach-syscalls.mk
87         (echo '#include <sysdep.h>'; \
88          echo 'SYSCALL_TRAP (__$*, $(sysno-$*))') > $@-new
89          mv $@-new $@
90 $(mach-syscalls:%=$(objpfx)%.c): $(objpfx)%.c:
91         (echo '#include <gnu-stabs.h>'; \
92          echo 'symbol_alias (__$*, $*)') > $@-new
93         mv $@-new $@
94 generated += $(mach-syscalls:%=__%.S) \
95              $(mach-syscalls:%=%.c)
96 endif   # mach-syscalls
97
98 mach-shortcuts := $(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,\
106                                 $(user-interfaces))
107 endif
108
109 # Make the MiG stubs for $(mach-shortcuts) be CALL_rpc.
110 migdefines += $(foreach call,$(mach-shortcuts),-D$(call)=$(call)_rpc)
111 mach/mach_interface.uh mach/mach_port.uh: $(objpfx)mach-syscalls.mk
112
113 ifdef mach-shortcuts
114 $(mach-shortcuts:%=$(objpfx)__%.c): $(objpfx)__%.c: shortcut.awk \
115                                                     $(objpfx)__%_rpc.c
116         gawk -v call=__$* -v rpc=__$*_rpc -v syscall=__syscall_$* \
117              -f $^ > $@-new
118         mv $@-new $@
119
120 # The shortcut calls have had their names changed to CALL_rpc, so
121 # CALL_rpc.c is being generated with a symbol alias to __CALL_rpc.  
122 # We also want CALL.c with an alias to __CALL.
123 $(mach-shortcuts:%=$(objpfx)%.c): $(objpfx)%.c:
124         (echo '#include <gnu-stabs.h>'; \
125          echo 'symbol_alias (__$*, $*)') > $@-new
126         mv $@-new $@
127 generated += $(mach-shortcuts:%=%.c)
128 endif   # mach-shortcuts
129
130 # Generate mach-shortcuts.h, which will contain the prototypes for the
131 # shortcutted kernel RPC functions.
132 $(objpfx)mach-shortcuts.h: $(objpfx)mach/mach_interface.h \
133                            $(objpfx)mach/mach_port.h
134 # The first line gets us one paragraph per line, with @s separating real lines.
135 # The second line selects paragraphs for the shortcutted functions.
136 # The third line removes `_rpc' from the names and rerealifies the lines.
137         cat $^ | tr \\012 @ | sed s/@@/@%/g | tr % \\012 \
138         | grep '^/\* Routine [a-z0-9_]*_rpc \*/' \
139         | sed 's/_rpc//g' | tr @ \\012 > $@-new
140         mv $@-new $@
141
142 before-compile += $(objpfx)mach-shortcuts.h
143
144
145 include Machrules
146 include ../Rules
147
148
149 # There is already a mach.h, so mach.defs generates mach_interface.h.
150 mach/mach_interface.defs: mach/mach.defs
151         ln $< $@ || cp $< $@
152 # There is already a memory_object.h,
153 # so memory_object.defs generates memory_object_user.h.
154 mach/memory_object_user.defs: mach/memory_object.defs
155         ln $< $@ || cp $< $@
156 generated += mach/mach.defs mach/memory_object_user.defs
157
158 # Be sure not to make these with implicit rules from foo.defs.
159 mach.h mach/memory_object.h: ;