summaryrefslogtreecommitdiff
path: root/libdde-linux26/mk/binary.inc
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2013-07-27 22:15:01 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2013-07-27 22:15:01 +0000
commit7996a3d79d55b7f879dfd62e202bbfe2963718d3 (patch)
tree8d9f6759fec4099b9be503c11c7ed174f7204980 /libdde-linux26/mk/binary.inc
parent4fbe7358c7747a9165f776eb19addbb9baf7def2 (diff)
really properly move files
Diffstat (limited to 'libdde-linux26/mk/binary.inc')
-rw-r--r--libdde-linux26/mk/binary.inc731
1 files changed, 731 insertions, 0 deletions
diff --git a/libdde-linux26/mk/binary.inc b/libdde-linux26/mk/binary.inc
new file mode 100644
index 00000000..e35547f3
--- /dev/null
+++ b/libdde-linux26/mk/binary.inc
@@ -0,0 +1,731 @@
+# -*- Makefile -*-
+# vim:set ft=make:
+#
+# DROPS (Dresden Realtime OPerating System) Component
+#
+# Makefile-Include for compiling templates (prog.mk, lib.mk)
+#
+# $Id: binary.inc 364 2008-05-29 02:51:17Z l4check $
+#
+# $Author: l4check $
+
+# Makefile-Include for binary and lib directories
+# Definitions for building the Makefile.inc, building dependencies,
+# compiler configuration.
+#
+# If SYSTEM is defined and we do not clean, we generate Makefile.inc. This file
+# holds the dependencies of the targets. Is also contains the definitions of
+# variables holding the objects of the related targets. In a multiple
+# architecture makefile, Makefile.inc will be built in arch-specific subdirs,
+# like the other components built.
+#
+# Most compiler- and linker-flag variables are defined in such a way that
+# using them in the rule will expand all the target- and
+# architecture-specific definitions.
+#
+# The relink-rule is defined in this file.
+#
+# The dependencies for compiling files are defined here, the dep-files are
+# generated with names .(source-file).d for .c, .cc and .S-files.
+#
+# Clean-rules are defined here.
+#
+
+$(GENERAL_D_LOC): $(L4DIR)/mk/binary.inc
+
+# our default Makefile-name in the OBJ-Subdirs
+BID_OBJ_Makefile ?= Makefile
+
+ifeq ($(SYSTEM),) # if we have no system yet, build the subdirs
+#################################################################
+#
+# we have NO system defined in $(SYSTEM), we are in the src/ dir
+#
+#################################################################
+
+# our default system
+SYSTEMS ?= x86-l4v2
+
+# intersection with BUILD_SYSTEMS
+
+# filter the systems from the local SYSTEMS variable ($2), that match
+# the build-architecture.
+# args: $(1) - build architecture (one from BUILD_SYSTEMS)
+# $(2) - SYSTEMS
+# 1. check, if both systems are the same (optionally reduced by the CPU)
+# 2. check, if at least the arch matches (and optionally the cpu)
+FILTER_SYSTEM = $(shell echo $(2)|$(AWKP) '\
+ BEGIN{m=s="$(1)";sub("_[^-]*","",m)}\
+ {for(i=1;i<=NF;i++){\
+ if(m==$$i||s==$$i){print s}else\
+ if(index(m,$$i)==1||index(s,$$i)==1)\
+ {t=s;sub("-.*","",t);print t}}}')
+
+# print that system of the SYSTEMS variable that actually matched with
+# $(BUILD_SYSTEMS) to the given system
+# args: $(1) - build architecture (SYSTEM)
+# $(2) - SYSTEMS
+# + do nearly the same as in FILTER_SYSTEM, but additionally check if
+# the resulting system matches $(1). If so, print the according pattern from
+# SYSTEMS and exit
+BID_ORIG_SYSTEM = $(shell echo $(2)|$(AWKP) '\
+ BEGIN{m=s="$(1)";sub("_[^-]*","",m)}\
+ {for(i=1;i<=NF;i++){\
+ if(m==$$i||s==$$i){if(s=="$(1)"){print $$i;exit}};\
+ if(index(m,$$i)==1||index(s,$$i)==1)\
+ {t=s;sub("-.*","",t);\
+ if(t=="$(1)"){print $$i;exit}}}}')
+
+ifeq ($(ROLE),idl.mk)
+TARGET_SYSTEMS := $(sort $(foreach sys,$(sort \
+ $(shell echo $(BUILD_SYSTEMS)|$(SED) -e 's/_[^- ]*\(-\{0,1\}\)/\1/g')), \
+ $(call FILTER_SYSTEM,$(sys),$(SYSTEMS))))
+else
+TARGET_SYSTEMS := $(sort $(foreach sys,$(BUILD_SYSTEMS),\
+ $(call FILTER_SYSTEM,$(sys),$(SYSTEMS))))
+endif
+
+DIR_FROM_SUB = $(firstword $(addprefix ../,$(patsubst /%,,$(1))) $(1))
+SYSTEM_TO_ARCH = $(shell echo $(1)|$(SED) -e 's/[_-].*//')
+SYSTEM_TO_CPU = $(shell echo $(1)|$(SED) -ne 's/[^-_]*_\([^-]*\).*/\1/p')
+SYSTEM_TO_L4API = $(shell echo $(1)|$(SED) -ne 's/.*-\(.*\)/\1/p')
+
+$(foreach sys,$(TARGET_SYSTEMS),$(OBJ_DIR)/OBJ-$(sys)/$(BID_OBJ_Makefile)):$(OBJ_DIR)/OBJ-%/$(BID_OBJ_Makefile):$(OBJ_DIR)/.general.d
+ @install -d $(dir $@)
+ @echo 'L4DIR=$(L4DIR_ABS)'>$@
+ @echo 'OBJ_BASE=$(OBJ_BASE)'>>$@
+ @echo 'OBJ_DIR=$(OBJ_DIR)'>>$@
+ @echo 'SRC_DIR=$(SRC_DIR)'>>$@
+ @echo 'PKGDIR=$(PKGDIR_ABS)'>>$@
+ @echo 'PKGDIR_ABS=$(PKGDIR_ABS)'>>$@
+ @echo 'PKGDIR_OBJ=$(PKGDIR_OBJ)'>>$@
+ @echo 'MAKECONFLOCAL=$(SRC_DIR)/Makeconf.local'>>$@
+ @echo 'OSYSTEM=$(call BID_ORIG_SYSTEM,$*,$(SYSTEMS))'>>$@
+ @echo 'SYSTEM=$*'>>$@
+ @echo 'ARCH=$(call SYSTEM_TO_ARCH,$*)'>>$@
+ @echo 'CPU=$(call SYSTEM_TO_CPU,$*)'>>$@
+ @echo 'L4API=$(call SYSTEM_TO_L4API,$*)'>>$@
+ @echo 'vpath %.c $(VPATH_SRC_BASE)'>>$@
+ @echo 'vpath %.cc $(VPATH_SRC_BASE)'>>$@
+ @echo 'vpath %.cpp $(VPATH_SRC_BASE)'>>$@
+ @echo 'vpath %.S $(VPATH_SRC_BASE)'>>$@
+ @echo 'vpath %.y $(VPATH_SRC_BASE)'>>$@
+ @echo 'vpath %.l $(VPATH_SRC_BASE)'>>$@
+ @echo 'vpath %.ld $(VPATH_SRC_BASE)'>>$@
+ @echo 'vpath %.dpe $(VPATH_SRC_BASE)'>>$@
+ @echo '.general.d: $(SRC_DIR)/$(if $(wildcard Make.rules),Make.rules,Makefile)'>>$@
+ @echo 'include $(SRC_DIR)/$(if $(wildcard Make.rules),Make.rules,Makefile)'>>$@
+ @echo 'include $$(L4DIR)/mk/$(ROLE)'>>$@
+
+install relink scrub:: $(foreach arch,$(TARGET_SYSTEMS),\
+ $(OBJ_DIR)/OBJ-$(arch)/$(BID_OBJ_Makefile))
+ $(if $(TARGET_SYSTEMS), $(VERBOSE)set -e ; \
+ for d in $(TARGET_SYSTEMS) ; do \
+ PWD=$OBJ-$$d $(MAKE) -C $(OBJ_DIR)/OBJ-$$d -f $(BID_OBJ_Makefile) \
+ $@ ; done )
+
+.PHONY: pre-obj
+pre-obj::
+
+all:: $(foreach arch,$(TARGET_SYSTEMS), $(OBJ_DIR)/OBJ-$(arch))
+.PHONY: $(foreach arch,$(TARGET_SYSTEMS), $(OBJ_DIR)/OBJ-$(arch))
+$(foreach arch,$(TARGET_SYSTEMS), $(OBJ_DIR)/OBJ-$(arch)):%:%/$(BID_OBJ_Makefile) pre-obj
+ $(VERBOSE)PWD=$@ $(MAKE) $(PL_j) -C $@ -f $(BID_OBJ_Makefile)
+
+clean disasm::
+ $(if $(wildcard $(OBJ_DIR)/OBJ-*), $(VERBOSE)set -e ; \
+ for d in $(wildcard $(OBJ_DIR)/OBJ-*) ; do \
+ PWD=$$d $(MAKE) -C $$d -f $(BID_OBJ_Makefile) $@; \
+ done, @true)
+
+cleanall::
+ $(VERBOSE)$(RM) -r $(wildcard $(OBJ_DIR))
+
+.PHONY: $(TARGET_SYSTEMS)
+
+else
+###############################################################
+#
+# we have a system defined in $(SYSTEM), we are in an OBJ- dir
+#
+###############################################################
+
+all:: $(TARGET)
+
+disasm: $(TARGET)
+ $(call DISASM_CMD,$<)
+
+L4INCDIR ?= $(OBJ_BASE)/include/$(ARCH) \
+ $(OBJ_BASE)/include \
+# $(addprefix $(OBJ_BASE)/include/$(ARCH)/,$(L4API)) \
+# $(addprefix $(OBJ_BASE)/include/,$(L4API)) \
+# $(DICE_INCDIR) \
+ $(addprefix $(DROPS_STDDIR)/include/$(ARCH)/,$(L4API)) \
+ $(addprefix $(DROPS_STDDIR)/include/,$(L4API)) \
+ $(DROPS_STDDIR)/include/$(ARCH) \
+ $(DROPS_STDDIR)/include
+L4LIBDIR ?= $(addprefix $(OBJ_BASE)/lib/$(ARCH)_$(CPU)/,$(L4API)) \
+ $(OBJ_BASE)/lib/$(ARCH)_$(CPU) \
+ $(OBJ_BASE)/lib \
+ $(addprefix $(DROPS_STDDIR)/lib/$(ARCH)_$(CPU)/,$(L4API)) \
+ $(DROPS_STDDIR)/lib/$(ARCH)_$(CPU) \
+ $(DROPS_STDDIR)/lib
+
+L4LINUX22_DIR ?= $(L4DIR)/../linux22
+
+#
+# Variables Section
+#
+# There is a hierarchy on defining variables depending on the targets they
+# refer to: Most standard-Make Variables are supported. This includes
+# LDFLAGS - options for ld, defined in prog.mk and lib.mk
+# CPPFLAGS - options for the c preprocessor, included in CFLAGS
+# CFLAGS - options for the c compiler
+# CXXFLAGS - options for the c++ compiler
+# ASFLAGS - options for the assembler
+#
+# Addtitionally, the following varibales are supported:
+# SRC_C, SRC_CC, SRC_S - .c, .cc, .S source files
+# CRT0, CRTN - startup and finish code
+# LIBS - additional libs to link (with -l), including paths (-L)
+# IDL - interface definition files
+# TARGET - targets to ge built
+#
+# These variables will be used for all operations with the corresponding
+# file types. More specific description is possible by using variables with
+# added specifications. These specifications include a referred element and
+# the architecture, both optional but in this order, separated by
+# underscores. The referred element for CPPFLAGS, CFLAGS, CXXFLAGS and
+# ASFLAGS is the source file. For the other variables, it is one of the
+# target files. The TARGET variable can only be postfixed by an
+# architecture.
+# The specific variables will be used for the target and the referred element
+# given in the name, additionally to the more general ones.
+#
+# Example for a valid specifications:
+# SRC_C_libxverbose.a = verbose.c - ar's verbose.o into libxverbose.a, but
+# not in other libs in the TARGET var.
+
+include $(L4DIR)/mk/modes.inc
+
+# select the variable specified in $(1) from the current architecture and
+# mode. Fall back to "all" architecture if no specific version exists.
+BID_mode_var= $(if $($(1)_$(ARCH)_$(MODE)),$($(1)_$(ARCH)_$(MODE)),$($(1)_all_$(MODE)))
+
+BID_SUPPORTED ?= $(call BID_mode_var,BID_SUPPORTED)
+ifneq ($(BID_SUPPORTED),y)
+$(error Mode "$(MODE)" is not supported for CPU architecture "$(ARCH)")
+endif
+
+LIBCINCDIR ?= $(call BID_mode_var,LIBCINCDIR)
+LIBCLIBDIR ?= $(call BID_mode_var,LIBCLIBDIR)
+LIBCLIBS ?= $(call BID_mode_var,LIBCLIBS)
+L4LIBS ?= $(call BID_mode_var,L4LIBS)
+CRT0 ?= $(call BID_mode_var,CRT0)
+CRTP ?= $(if $(filter $(CRT0_DEFAULT),$(CRT0)),$(CRTP_DEFAULT),$(CRT0))
+CRTN ?= $(call BID_mode_var,CRTN)
+LDSCRIPT ?= $(call BID_mode_var,LDSCRIPT)
+
+# we do not need to put our FLAG-definitions into a special file if we can
+# use the target to parameterize it and if it needs not to appear in the deps
+#CRT0 = $(word 1, $(CRT0_$@_$(OSYSTEM)) $(CRT0_$@) $(CRT0_$(OSYSTEM)))
+#CRTN = $(word 1, $(CRTN_$@_$(OSYSTEM)) $(CRTN_$@) $(CRTN_$(OSYSTEM)))
+LIBS += $(strip $(LIBS_$(OSYSTEM)) $(LIBS_$@) $(LIBS_$@_$(OSYSTEM)))
+
+
+#LDFLAGS += $(strip $(LDFLAGS_$(OSYSTEM)) $(LDFLAGS_$(ARCH)) $(LDFLAGS_$@) $(LDFLAGS_$@_$(OSYSTEM)))
+
+# May 2007: force somewhat old hash-style as some(!, independant of the
+# actual version) ld now use an other format, no uclibc upstream fix
+# available yet, until available, we need:
+ifeq ($(LD_HAS_HASH_STYLE_OPTION),y)
+ifneq ($(HOST_LINK),1)
+LDFLAGS += --hash-style=sysv
+endif
+endif
+
+OPTS ?= -g -fno-strict-aliasing
+WARNINGS?= -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(WARNINGS_$@)
+
+ifeq ($(MODE),host)
+# never cross compile in host mode
+SYSTEM_TARGET =
+CC = $(HOST_CC)
+CXX = $(HOST_CXX)
+else
+# no architecture specific flags in host mode
+OPTS += $(CARCHFLAGS_$(ARCH)) $(CARCHFLAGS_$(ARCH)_$(CPU))
+endif
+
+# no link address if build a lib or we're compiling a host program and using
+# the host linker scripts
+ifeq ($(ROLE),lib.mk)
+NO_DEFAULT_RELOC := y
+endif
+ifneq ($(HOST_LINK),)
+NO_DEFAULT_RELOC := y
+endif
+
+default_reloc_base = $(firstword $(DEFAULT_RELOC_$(1)) \
+ $(DEFAULT_RELOC_$(ARCH)) \
+ $(DEFAULT_RELOC) \
+ $(if $(NO_DEFAULT_RELOC),,0x01000000))
+default_reloc = $(if $(call default_reloc_base,$(1)),\
+ $(shell printf "0x%x" $$(($(RAM_BASE) + $(call default_reloc_base,$(1))))),)
+
+$(CLIENTIDL:.idl=-client.o): CFLAGS += -ffunction-sections
+CFLAGS += $(BID_CFLAGS_GSTAB) $(BID_CFLAGS_OMIT_FP)
+CFLAGS += $(CFLAGS_$(OSYSTEM)) $(CFLAGS_$(<F)) $(CFLAGS_$(<F)_$(OSYSTEM))
+CFLAGS += $(CFLAGS_$(L4API))
+CFLAGS += $(OPTS) $(WARNINGS)
+CFLAGS += -fno-common
+ifneq ($(MODE),host)
+CFLAGS += $(GCCNOSTACKPROTOPT)
+endif
+DEFINES += $(DEFINES_$(OSYSTEM)) $(DEFINES_$(<F)) $(DEFINES_$(<F)_$(OSYSTEM))
+DEFINES += -DSYSTEM_$(subst -,_,$(SYSTEM)) -DARCH_$(ARCH) -DCPUTYPE_$(CPU) -DL4API_$(L4API)
+ifdef DEBUG
+ifeq (,$(filter 0 n N, $(DEBUG)))
+DEFINES += -DDEBUG
+endif
+endif
+
+CPPFLAGS+= $(CPPFLAGS_$(OSYSTEM)) $(CPPFLAGS_$(<F)) $(CPPFLAGS_$(<F)_$(OSYSTEM))
+# defined in mk/Makeconf and this file.
+CPPFLAGS+= $(DEFINES)
+CPPFLAGS+= $(BID_CPPFLAGS_SYSCALLS)
+CPPFLAGS+= $(addprefix -I, $(PRIVATE_INCDIR) $(PRIVATE_INCDIR_$(OSYSTEM)) $(PRIVATE_INCDIR_$@) $(PRIVATE_INCDIR_$@_$(OSYSTEM)))
+CPPFLAGS+= -I.
+#CPPFLAGS+= $(if $(CLIENTIDL)$(SERVERIDL)$(addprefix CLIENTIDL_,$(TARGET))$(addprefix SERVERIDL_,$(TARGET)),$(addprefix -I, $(IDL_PATH)))
+ifneq ($(MODE),host)
+CPPFLAGS+= $(addprefix -I, $(L4INCDIR))
+endif
+CPPFLAGS+= $(LIBCINCDIR)
+
+CXXFLAGS+= $(BID_CFLAGS_GSTAB) $(BID_CFLAGS_OMIT_FP)
+CXXFLAGS+= $(CXXFLAGS_$(OSYSTEM))
+CXXFLAGS+= $(CXXFLAGS_$(@:.o=.cc)) $(CXXFLAGS_$(@:.o=.cc)_$(OSYSTEM))
+CXXFLAGS+= $(CXXFLAGS_$(@:.o=.cpp)) $(CXXFLAGS_$(@:.o=.cpp)_$(OSYSTEM))
+CXXFLAGS+= $(OPTS) $(filter-out -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes,$(WARNINGS))
+CXXFLAGS+= -fno-common
+ifneq ($(MODE),host)
+CXXFLAGS+= $(GCCNOSTACKPROTOPT)
+endif
+
+PICFLAGS = -fPIC -U__PIC__ -D__PIC__=1
+
+ASFLAGS+= $(ASFLAGS_$(ARCH)) $(ASFLAGS_$(@:.o=.S)) $(ASFLAGS_$(@:.o=.S)_$(OSYSTEM))
+OBJS += $(strip $(OBJS_$(OSYSTEM)) $(OBJS_$@) $(OBJS_$@_$(OSYSTEM)))
+ALLOBJS = $(OBJS) $(foreach target,$(TARGET) $(TARGET_$(OSYSTEM)),\
+ $(OBJS_$(target)) $(OBJS_$(target)_$(OSYSTEM)))
+ALLDPI = $(sort $(foreach obj,$(ALLOBJS),$(patsubst %.dpe,%.dpi,\
+ $(DPE_$(obj:.o=.c)))))
+
+# implementation of $(CLIENTIDL) and $(SERVERIDL)
+IDL_TYPE ?= dice
+IDL_PKGDIR ?= $(PKGDIR_OBJ)
+IDL_PATH ?= $(addsuffix /idl/OBJ-$(ARCH)-$(L4API),$(IDL_PKGDIR))
+ifneq ($(IDL_TYPE), dice)
+ifneq ($(IDL_TYPE), corba)
+$(error IDL_TYPE "$(IDL_TYPE)" not supported.)
+endif
+endif
+
+# A function to deliver the source files generated from IDL-files and
+# that should be linked to a given target. Used by "targetobjs" to write
+# the target-objects and in the "Makefile.inc:"-rule to write the IDL_SRC_C-
+# variables
+# arg: 1 - target
+IDL_SRC_Cfn = $(CLIENTIDL:.idl=-client.c) $(SERVERIDL:.idl=-server.c) \
+ $(foreach inter, $(OSYSTEM) $(1) $(1)_$(OSYSTEM), \
+ $(CLIENTIDL_$(inter):.idl=-client.c) \
+ $(SERVERIDL_$(inter):.idl=-server.c))
+IDL_SRC_CCfn = $(CLIENTIDL:.idl=-client.cc) $(SERVERIDL:.idl=-server.cc) \
+ $(foreach inter, $(OSYSTEM) $(1) $(1)_$(OSYSTEM), \
+ $(CLIENTIDL_$(inter):.idl=-client.cc) \
+ $(SERVERIDL_$(inter):.idl=-server.cc))
+
+# *all* CLIENTIDLs/SERVERIDLs
+# needed for the test if we should include the IDL-Path into vpath
+IDL_ALLCLIENTIDL = $(CLIENTIDL) $(CLIENTIDL_$(OSYSTEM)) \
+ $(foreach target,$(TARGET) $(TARGET_$(OSYSTEM)), \
+ $(CLIENTIDL_$(target)) $(CLIENTIDL_$(target)_$(OSYSTEM)))
+IDL_ALLSERVERIDL = $(SERVERIDL) $(SERVERIDL_$(OSYSTEM)) \
+ $(foreach target,$(TARGET) $(TARGET_$(OSYSTEM)), \
+ $(SERVERIDL_$(target)) $(SERVERIDL_$(target)_$(OSYSTEM)))
+
+ifneq ($(IDL_ALLCLIENTIDL),)
+vpath %-client.c $(IDL_PATH)
+vpath %-client.cc $(IDL_PATH)
+endif
+ifneq ($(IDL_ALLSERVERIDL),)
+vpath %-server.c $(IDL_PATH)
+vpath %-server.cc $(IDL_PATH)
+endif
+
+
+# a helper function to generate the object-files for a given target
+# arg: 1 - target
+# 2 - infix between the basename and the .o
+targetobjs = $(SRC_C:.c=$(2).o) $(SRC_S:.S=$(2).o) \
+ $(patsubst %.cc,%$(2).o,$(patsubst %.cpp,%.cc,$(SRC_CC))) \
+ $(foreach inter, $(OSYSTEM) $(1) $(1)_$(OSYSTEM), \
+ $(SRC_C_$(inter):.c=$(2).o) \
+ $(SRC_S_$(inter):.S=$(2).o) \
+ $(patsubst %.cc,%$(2).o,$(SRC_CC_$(inter):.cpp=.cc)) \
+ $($(SRC_CC_$(inter):.cpp=.cc):%.cc=$(2).o)) \
+ $(patsubst %.c,%$(2).o,$(call IDL_SRC_Cfn,$(1)))
+
+# The directories our object files will go into. These dirs will be created
+# on generation of Makefile.inc in the OBJ- dirs.
+OBJDIRS = $(strip $(sort $(filter-out ./,$(dir \
+ $(foreach t,$(TARGET_STANDARD), \
+ $(call targetobjs,$(t),)) \
+ $(foreach t,$(TARGET_PIC) $(TARGET_SHARED), \
+ $(call targetobjs,$(t),.s)) \
+ $(foreach t,$(PROFILE), \
+ $(call targetobjs,$(t),.pr)) \
+ $(foreach t,$(TARGET_PROFILE_PIC) $(TARGET_PROFILE_SHARED),\
+ $(call targetobjs,$(t),.pr.s))))))
+
+# The include file for the Makefile. This file contains definitions and
+# dependencies which are dynamically generated. Unfortunately, make does
+# not support variable declarations using the foreach function. Same
+# for rules.
+$(BID_OBJ_Makefile).inc: .general.d
+ @$(BUILD_MESSAGE)
+ @$(ECHO) "# automatically generated, do not edit!" >$@_
+ # write helper variables containing the IDL-C-Sources
+ @$(ECHO) -en '$(strip $(foreach target,$(TARGET), \
+ \nIDL_SRC_C_$(target)=$(call IDL_SRC_Cfn,$(target))))'>>$@_
+ # and add them to SRC_C
+ @$(ECHO) -en '$(strip $(foreach target,$(TARGET), \
+ \nSRC_C_$(target) += $$(IDL_SRC_C_$(target))))'>>$@_
+ # but set the variables empty for the current rule
+ @$(ECHO) -en '$(strip $(foreach target,$(TARGET), \
+ \n$(BID_OBJ_Makefile).inc: IDL_SRC_C_$(target)=))'>>$@_
+ # write helper variables containing the IDL-C++-Sources
+ @$(ECHO) -en '$(strip $(foreach target,$(TARGET), \
+ \nIDL_SRC_CC_$(target)=$(call IDL_SRC_CCfn,$(target))))'>>$@_
+ # and add them to SRC_CC
+ @$(ECHO) -en '$(strip $(foreach target,$(TARGET), \
+ \nSRC_CC_$(target) += $$(IDL_SRC_CC_$(target))))'>>$@_
+ # but set the variables empty for the current rule
+ @$(ECHO) -en '$(strip $(foreach target,$(TARGET), \
+ \n$(BID_OBJ_Makefile).inc: IDL_SRC_CC_$(target)=))'>>$@_
+ # write the object declaration variables
+ # TARGET_{STANDARD, PIC, SHARED} contain the appropriate targets
+ # TARGET_PROFILE_{STANDARD, PIC, SHARED} as well
+ @$(ECHO) -en '$(strip $(foreach target,$(TARGET_STANDARD), \
+ \nOBJS_$(target) += $(call targetobjs,$(target),)))' >>$@_
+ @$(ECHO) -en '$(strip $(foreach target,$(TARGET_PIC) \
+ $(TARGET_SHARED), \
+ \nOBJS_$(target) += $(call targetobjs,$(target),.s)))' >>$@_
+ @$(ECHO) -en '$(strip $(foreach target,$(TARGET_PROFILE), \
+ \nOBJS_$(target) += $(call targetobjs,$(target),.pr)))' >>$@_
+ @$(ECHO) -e '$(strip $(foreach target,$(TARGET_PROFILE_PIC) \
+ $(TARGET_PROFILE_SHARED), \
+ \nOBJS_$(target) += $(call targetobjs,$(target),.pr.s)))' >>$@_
+ #
+ # write the dpe-dependencies
+ @$(ECHO) -e '$(foreach obj,$(sort \
+ $(foreach t,$(TARGET_STANDARD),$(call targetobjs,$t)) \
+ $(foreach t,$(TARGET_PIC) $(TARGET_SHARED), \
+ $(call targetobjs,$t,.s)) \
+ $(foreach t,$(TARGET_PROFILE),$(call targetobjs,$t,.pr)) \
+ $(foreach t,$(TARGET_PROFILE_PIC) $(TARGET_PROFILE_SHARED),\
+ $(call targetobjs,$t,.pr.s))),$(strip \
+ $(addprefix \n$(obj): ,$(patsubst %.dpe,%.dpi, \
+ $(DPE_$(obj:.o=.c)) $(DPE_$(obj:.o=.cc)) \
+ $(DPE_$(obj:.s.o=.c)) $(DPE_$(obj:.s.o=.cc)) \
+ $(DPE_$(obj:.pr.o=.c)) $(DPE_$(obj:.pr.o=.cc)) \
+ $(DPE_$(obj:.pr.s.o=.c)) $(DPE_$(obj:.pr.s.o=.cc)) \
+ ))))' >>$@_
+ #
+ # create the object-dirs
+ @$(if $(OBJDIRS), $(VERBOSE)set -e; for d in $(OBJDIRS); do \
+ [ -d "$$d" ] || $(MKDIR) $$d; done )
+
+ #
+ # write the object-dependencies for the targets
+ @$(ECHO) -e '$(foreach target,$(TARGET),$(strip\
+ \n$(target): $$(OBJS_$(target)) ))' >> $@_
+ # make the target dependent on '.general.d'
+ @$(ECHO) -e '$(foreach target,$(TARGET),$(strip \
+ \n$$(OBJS_$(target)): .general.d))' \
+ >> $@_
+ # Using LDSO does not need a RELOC address, so omit the following in
+ # this case
+ifneq ($(MODE),loader)
+ # in case of a binary, write the link address
+ # the dependency to the static file: If DEFAULT_RELOC is set,
+ # all targets are made dependent on the STATIC file
+ # (defined in Makeconf).
+ # If DEFAULT_RELOC_xxx is set, xxx is made dependent on the
+ # STATIC file.
+ifneq ($(strip $(foreach target,$(TARGET), $(call default_reloc,$(target)))),)
+ifneq ($(filter l4linux host,$(MODE)),)
+ $(error DEFAULT_RELOC must not be set if MODE is l4linux or host)
+endif
+ # the relocatable binaries depend on Makefile.inc
+ @$(ECHO) -e '\n$(strip \
+ $(foreach target, $(TARGET), \
+ $(if $(call default_reloc,$(target)),$(target))) \
+ : $@)' >>$@_
+ifneq ($(wildcard $(STATICFILE)),)
+ # Makefile.inc depends on STATIC
+ @$(ECHO) -e '\n$@: $(firstword $(wildcard $(STATICFILE)))' >>$@_
+ # we find out the relocation address here.
+ @$(ECHO) -e '$(foreach target, $(TARGET),$(strip \
+ \nLDFLAGS_$(target)+= -Ttext=$(firstword \
+ $(shell $(AWKP) -v prog=$(target) \
+ "/^[^\#]/{if(\$$2==prog){print $$1; exit}}" \
+ < $(firstword $(wildcard $(STATICFILE)))) \
+ $(call default_reloc,$(target)))))' \
+ >>$@_
+ # and the dummy-rule to rebuild myself if STATIC disappears
+ @$(ECHO) -e '\n$(firstword $(wildcard $(STATICFILE))): ' >>$@_
+else
+ # STATIC does not exist. rebuild myself if STATIC appears
+ @$(ECHO) -e '\n$$(if $$(wildcard $(STATICFILE)), $@: FORCE)' \
+ >>$@_
+ # we find out the relocation address here.
+ @$(ECHO) -e '$(foreach target, $(TARGET),$(strip \
+ \nLDFLAGS_$(target)+= -Ttext=$(firstword \
+ $(call default_reloc,$(target)))))' \
+ >>$@_
+endif # STATIC file
+endif
+endif # MODE != loader
+ @mv $@_ $@
+
+ifeq ($(filter scrub help,$(MAKECMDGOALS)),)
+-include $(BID_OBJ_Makefile).inc
+endif
+
+#
+# Rules Section
+#
+
+# the default target "all" ensures building of the targets. When multiple
+# architectures are used, the targets are build in subdirs.
+
+# the relink-rule: make the TARGETs phony. Specification of build-targets
+# in MAKECMDGOALS is not allowed. Possibility: TARGET=
+#
+ifneq ($(filter relink,$(MAKECMDGOALS)),)
+.PHONY: $(TARGET)
+relink: all
+endif
+
+
+
+###
+#
+# Compilation rules with dependency-generation
+#
+# If we have ld.so, we use it to create our dependencies (see MAKEDEP
+# definition). Otherwise, we fall back to whatever we need. For
+# compilation with gcc, this is using "-MD" and postprocessing the
+# generated files.
+
+ifeq ($(HAVE_LDSO),)
+LIBDEPS = $(foreach file, \
+ $(patsubst -l%,lib%.a,$(filter-out -L%,$(LDFLAGS))) \
+ $(patsubst -l%,lib%.so,$(filter-out -L%,$(LDFLAGS))),\
+ $(word 1, $(foreach dir, \
+ $(patsubst -L%,%,\
+ $(filter -L%,$(LDFLAGS) $(L4ALL_LIBDIR))),\
+ $(wildcard $(dir)/$(file)))))
+
+DEPEND_EXTEND_CMD = $(AWKP) ' \
+/^[^:]*: ..*/{ \
+ while(sub("\\\\$$","")){ \
+ getline nextline ; \
+ $$0=$$0 " " nextline \
+ } \
+ split($$0,field,": "); \
+ sub("^$(*F).o","$*.s $*.i $@",field[1]); \
+ nr=split(field[2],deps) ; \
+ for(i=1;i<=nr;){ \
+ printf("ifeq ($$(shell test y \\\n"); \
+ for(j=0; j<100 && i+j<=nr; j++){ \
+ printf("-a -r %s \\\n", deps[i+j]); \
+ } \
+ printf("&& echo y),)"); \
+ printf("\n%s: FORCE\nelse\n%s: $(BID_OBJ_Makefile) \\\n", \
+ field[1],field[1]); \
+ for(j=0; j<100 && i+j<=nr; j++){ \
+ printf("%s \\\n",deps[i+j]); \
+ } \
+ printf("\nendif\n"); \
+ i+=j; \
+ } \
+}'
+DEPEND_EXTEND_FUNC = ( $(DEPEND_EXTEND_CMD) < $(1) > $(2).new && rm -f $(1) && mv $(2).new $(2) ) || ( rm -f $(1) $(2).new $(2) ; $(DEPEND_IGNORE_ERRORS) )
+DEPEND_FLAG = -MD
+
+.PHONY: FORCE
+endif # HAVE_LDSO empty
+
+%.o: %.cc
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CXX_NAME)) $(CXX) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CXXFLAGS) $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.s.o: %.cc
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CXX_NAME)) $(CXX) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CXXFLAGS) $(PICFLAGS) $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.pr.o: %.cc
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CXX_NAME)) $(CXX) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CXXFLAGS) -DPROFILE -pg $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.pr.s.o: %.cc
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CXX_NAME)) $(CXX) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CXXFLAGS) $(PICFLAGS) -DPROFILE -pg $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.o: %.cpp
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CXX_NAME)) $(CXX) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CXXFLAGS) $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.s.o: %.cpp
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CXX_NAME)) $(CXX) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CXXFLAGS) $(PICFLAGS) $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.pr.o: %.cpp
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CXX_NAME)) $(CXX) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CXXFLAGS) -DPROFILE -pg $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.pr.s.o: %.cpp
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CXX_NAME)) $(CXX) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CXXFLAGS) $(PICFLAGS) -DPROFILE -pg $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.o: %.c
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CPP_NAME)) $(CC) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CFLAGS) $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.s.o: %.c
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CPP_NAME)) $(CC) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CFLAGS) $(PICFLAGS) $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.pr.o: %.c
+ @$(COMP_PR_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CPP_NAME)) $(CC) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CFLAGS) -DPROFILE -pg $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.pr.s.o: %.c
+ @$(COMP_PR_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CPP_NAME)) $(CC) -c $(DEPEND_FLAG) $(CPPFLAGS) $(CFLAGS) $(PICFLAGS) -DPROFILE -pg $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.o: %.S
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CPP_NAME)) $(CC) -c $(DEPEND_FLAG) $(CPPFLAGS) $(ASFLAGS) $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.s.o: %.S
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CPP_NAME)) $(CC) -c $(DEPEND_FLAG) $(CPPFLAGS) $(ASFLAGS) $(PICFLAGS) $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.pr.o: %.S
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CPP_NAME)) $(CC) -c $(DEPEND_FLAG) $(CPPFLAGS) $(ASFLAGS) -DPROFILE -pg $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.pr.s.o: %.S
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,$(INT_CPP_NAME)) $(CC) -c $(DEPEND_FLAG) $(CPPFLAGS) $(ASFLAGS) $(PICFLAGS) -DPROFILE -pg $(call absfilename,$<) -o $@
+ $(DEPEND_VERBOSE)$(call DEPEND_EXTEND_FUNC, $(*F).d, $(dir $@).$(notdir $@).d)
+
+%.c: %.y
+ @$(GEN_MESSAGE)
+ $(VERBOSE)$(YACC) $(YFLAGS) $(call absfilename,$<)
+ $(VERBOSE)mv -f y.tab.c $@
+ $(VERBOSE)if [ -f y.tab.h ]; then mv -f y.tab.h $(@:.c=.h); fi
+
+%.c: %.l
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(LEX) -o$@ $(call absfilename,$<)
+
+%.i: %.c
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(CC) -E -H -dD $(CPPFLAGS) $(CFLAGS) $(call absfilename,$<) -o $@
+ $(VERBOSE)$(INDENT) -o $@ $@
+
+%.s.i: %.c
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(CC) -E -H -dD $(CPPFLAGS) $(CFLAGS) $(PICFLAGS) $(call absfilename,$<) -o $@
+ $(VERBOSE)$(INDENT) -o $@ $@
+
+%.i: %.cc
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(CXX) -E -H -dD $(CPPFLAGS) $(CXXFLAGS) $(call absfilename,$<) -o $@
+ $(VERBOSE)$(INDENT) -sob -o $@ $@
+
+%.s.i: %.cc
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(CXX) -E -H -dD $(CPPFLAGS) $(CXXFLAGS) $(PICFLAGS) $(call absfilename,$<) -o $@
+ $(VERBOSE)$(INDENT) -sob -o $@ $@
+
+%.i: %.cpp
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(CXX) -E -H -dD $(CPPFLAGS) $(CXXFLAGS) $(call absfilename,$<) -o $@
+ $(VERBOSE)$(INDENT) -sob -o $@ $@
+
+%.i: %.S
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(CC) -E -H -dD $(CPPFLAGS) $(ASFLAGS) $(call absfilename,$<) -o $@
+ $(VERBOSE)$(INDENT) -sob -o $@ $@
+
+%.S: %.c
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(CC) -S $(CFLAGS) $(CPPFLAGS) $(call absfilename,$<) -o $@
+
+%.S: %.cc
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(CXX) -S $(CXXFLAGS) $(CPPFLAGS) $(call absfilename,$<) -o $@
+
+%.S: %.cpp
+ @$(COMP_MESSAGE)
+ $(VERBOSE)$(CXX) -S $(CXXFLAGS) $(CPPFLAGS) $(call absfilename,$<) -o $@
+
+%.dpi: %.dpe
+ @$(GEN_MESSAGE)
+ $(VERBOSE)$(call MAKEDEP,perl) $(GEN_DOPECODE) $< >$@
+
+DEPS += $(foreach file,$(ALLOBJS), $(dir $(file)).$(notdir $(file)).d)
+DEPS += $(foreach file,$(ALLDPI), $(dir $(file)).$(notdir $(file)).d)
+
+# Common clean Rules
+
+clean cleanall::
+ $(VERBOSE)$(RM) $(strip $(filter-out $(KEEP_ON_CLEAN),\
+ $(wildcard *.dpi) $(wildcard *.o) $(ALLOBJS) $(DEL_ON_CLEAN)))
+
+# clean: delete all temporary editor files, objects, binaries
+# and most generated files
+cleanall::
+ $(VERBOSE)$(RM) $(TARGET) $(wildcard .*.d) $(wildcard $(BID_OBJ_Makefile).inc)
+
+.PHONY: scrub clean cleanall disasm
+
+endif # $(SYSTEM) is defined
+
+# General rules
+
+# scrub: delete temporary editor files and stuff like this
+# can be extended by lokals
+scrub cleanall::
+ $(VERBOSE)$(SCRUB)
+