From 70b84c83f21a5943a291e86520e02f676517e644 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Tue, 31 Jan 2006 09:21:05 +0000 Subject: 2006-01-31 Thomas Schwinge Cleanup of GNU Mach's build system. The system dependend parts are now handeled by the respective Makefile and no longer by the top-level one. * configure, i386/configure, i386/linux/configure, linux/configure: Regenerated. * Makefile.in: Various cleanups. (mach/machine, mach_machine): Targets removed. (AWK, CC, CFLAGS, CPPFLAGS, DEFINES, INCLUDES, INSTALL, INSTALL_DATA) (INSTALL_PROGRAM, LD, MIG, MIGFLAGS, NM): Variables moved into Makerules.in. Do not include $(sysdep)/Makefrag anymore. (all, check, clean, distclean, mostlyclean, maintainer-clean, install) (install-headers, install-kernel): Recurse into the system dependend subdirectory. (check): Add a basic test using mbchk. (clean, distclean): Be more explicit in what to delete. ($(systype)/%): New target. (kernel.o): Incorporate the system dependend archive. (installed-sysdep-headers-names, $(installed-sysdep-headers-names)): Variable and target moved into the system dependend Makefile.in. (install-headers, mkheaderdirs): Don't care for the system dependend header files. (%.symc, %.symc.o, %.h, %_user.c, %_interface.h, %_server.c): Targets moved into Makerules.in. Inclusion of dependency files: Likewise. (%.migs_d, %.migu_d, %.migsh_d, %.miguh_d, make-deps, %.d): Likewise. Include Makerules. * Makerules.in: New file, mainly based on Makefile.in. * configure.in: Do not substitute cross_compiling and not explicitly substitute LDFLAGS. Check for cpp, ranlib, ar and mbchk. Care for the mach/machine symbolic link. Add Makerules as a config file. * i386/Makefile.in: Various cleanups. Merge i386/Makefrag and the system dependent stuff from Makefile.in into this file. (all, check, install, install-headers, install-kernel): Recurse into the system dependend subdirectory. (sysdep.o): transformed to the new target sysdep.a. (linux/linux.o): Target removed. (clean, distclean): Be more explicit in what to delete. (linux/%): New target. (install-headers): Install the system dependend header files. (mkheaderdirs): New target. Include the top-level Makerules. * i386/Makefrag: File removed. * i386/Makerules.in: New file. * i386/configure.in: Synchronize AC_INIT to the top-level definition. Do not check for ld and make. Add Makerules as a config file. * i386/linux/Makefile.in: Various cleanups. Replace linux-objs with objfiles. (check, install, install-headers, install-kernel): New empty targets. Don't care about linux-flags if no_deps is true. Inclusion of dependency files removed and instead... Include the top-level Makerules. * i386/linux/Makerules.in: New file. * i386/linux/configure.ac: Synchronize AC_INIT to the top-level definition. Do not check for gcc and ld. Do not explicitly substitute LDFLAGS. Add Makerules as a config file. * linux/configure.in: Synchronize AC_INIT to the top-level definition. Do not create directories using a dummy file. * linux/dummy.in: File removed. * ddb/db_access.h: Include instead of "vm_param.h". * kern/bootstrap.c: Likewise. * kern/thread.c: Likewise. * vm/vm_kern.c: Likewise. * vm/vm_object.c: Likewise. * vm/vm_resident.c: Likewise. --- Makerules.in | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 Makerules.in (limited to 'Makerules.in') diff --git a/Makerules.in b/Makerules.in new file mode 100644 index 0000000..b556363 --- /dev/null +++ b/Makerules.in @@ -0,0 +1,159 @@ +# Makerules +# Copyright 2006 Free Software Foundation, Inc. +# +# Permission to use, copy, modify and distribute this software and its +# documentation is hereby granted, provided that both the copyright +# notice and this permission notice appear in all copies of the +# software, derivative works or modified versions, and any portions +# thereof, and that both notices appear in supporting documentation. +# +# THE FREE SOFTWARE FOUNDATION ALLOWS FREE USE OF THIS SOFTWARE IN ITS +# "AS IS" CONDITION. THE FREE SOFTWARE FOUNDATION DISCLAIMS ANY +# LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE +# USE OF THIS SOFTWARE. + + +# +# configure's findings. +# + +systype = @systype@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ + +AR = @AR@ +AWK = @AWK@ +CC = @CC@ +CPP = @CPP@ +LD = @LD@ +MBCHK = @MBCHK@ +MIG = @MIG@ +NM = @NM@ +RANLIB = @RANLIB@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ + +CFLAGS-common = @CFLAGS@ +CPPFLAGS-common = @CPPFLAGS@ +DEFS-common = @DEFS@ +LDFLAGS-common = @LDFLAGS@ + + +# +# System dependent Makerules +# + +include $(abs_top_builddir)/$(systype)/Makerules + + +# +# Compilation flags +# + +DEFS += $(DEFS-common) + +DEFINES += $(DEFS) -DMACH -DCMU -DMACH_KERNEL -DKERNEL + +INCLUDES += -I$(abs_top_builddir) -I$(abs_top_srcdir) \ + -I$(abs_top_srcdir)/include -I$(abs_top_srcdir)/$(systype) \ + -I$(abs_top_srcdir)/$(systype)/include/mach/sa \ + -I$(abs_top_srcdir)/bogus -I$(abs_top_srcdir)/util \ + -I$(abs_top_srcdir)/kern -I$(abs_top_srcdir)/device + +CPPFLAGS += -nostdinc $(DEFINES) $(INCLUDES) $(CPPFLAGS-common) + +MIGFLAGS += $(CPPFLAGS) + +CFLAGS += $(CFLAGS-common) + +LDFLAGS += $(LDFLAGS-common) + +# Assemble .S files correctly +ASFLAGS += -DASSEMBLER + + +# +# How to do some things +# + +# Building foo.h from foo.sym: +%.symc: %.sym $(abs_top_srcdir)/gensym.awk + $(AWK) -f $(word 2,$^) $< > $@ +%.symc.o: %.symc + $(CC) -S $(CPPFLAGS) $(CFLAGS) $(CPPFLAGS-$@) -x c -o $@ $< +%.h: %.symc.o + sed <$< -e 's/^[^*].*$$//' | \ + sed -e 's/^[*]/#define/' -e 's/mAgIc[^-0-9]*//' >$@ + +# Building from foo.cli +%.h %_user.c: %.cli + $(MIG) $(MIGFLAGS) -header $*.h -user $*_user.c -server /dev/null $< + +# Building from foo.srv +%_interface.h %_server.c: %.srv + $(MIG) $(MIGFLAGS) -sheader $*_interface.h -server $*_server.c \ + -header /dev/null -user /dev/null $< + +# +# Dependency generation +# + +# Include dependency files +ifneq ($(no_deps),t) + +# For each file generated by MiG we need a .d file. +-include $(subst _server.o,.migs_d,$(servers)) /dev/null +-include $(subst _server.o,.migsh_d,$(servers)) /dev/null + +# vm_user.o fits the pattern, but is not actually a MiG-related file. +-include $(subst _user.o,.migu_d,$(users)) /dev/null +-include $(subst _user.o,.miguh_d,$(users)) /dev/null + +# For each .o file we need a .d file. +-include $(subst .o,.d,$(filter %.o,$(objfiles))) /dev/null + +endif + +# Here is how to make those dependency files + +%.migs_d: %.srv + (set -e; $(CPP) $(MIGFLAGS) -M -MG -x c $< | \ + sed -e 's/[^:]*:/$(@:.migs_d=_server.c) $@:/' > $@) + +%.migu_d: %.cli + (set -e; $(CPP) $(MIGFLAGS) -M -MG -x c $< | \ + sed -e 's/[^:]*:/$(@:.migu_d=_user.c) $@:/' > $@) + +%.migsh_d: %.migs_d + sed -e 's/_server\.c /_interface.h /' -e 's/migs_d/migsh_d/' < $< > $@ + +%.miguh_d: %.migu_d + sed -e 's/_user\.c /.h /' -e 's/migu_d/miguh_d/' < $< > $@ + +# Generic rule for $(CC) based compilation for making dependencies +define make-deps +set -e; $(CC) $(CFLAGS) $(CPPFLAGS) -M -MG $< | \ + sed > $@.new -e 's/$*\.o:/$*.o $@:/' +mv -f $@.new $@ +endef + +%.d: %.c; $(make-deps) +%.d: %.S; $(make-deps) + +# .s files don't go through the preprocessor, so we do this +# This rule must come *after* the genuine ones above, so that +# make doesn't build a .s file and then make an empty dependency +# list. +%.d: %.s + echo '$*.o: $<' > $@ + + +# +# Autoconf support +# + +$(top_builddir)/Makerules $(abs_top_builddir)/Makerules: \ + $(abs_top_srcdir)/Makerules.in $(abs_top_builddir)/config.status + cd $(abs_top_builddir) && ./config.status $(@F) -- cgit v1.2.3