# 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) # See . CFLAGS += -fno-strict-aliasing 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 # # Don't build and include dependency files if they're not needed. ifeq ($(strip $(filter-out %clean, $(MAKECMDGOALS))),) no_deps = t endif # 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 -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)