diff options
author | Zheng Da <zhengda1936@gmail.com> | 2009-12-21 03:00:41 +0100 |
---|---|---|
committer | Zheng Da <zhengda1936@gmail.com> | 2009-12-21 03:00:41 +0100 |
commit | 7ccfc1fdb1c0030e6e2105d50d76122b8f10c687 (patch) | |
tree | d84241c6a534d9f3881c7ede383a5a424b7f7e59 | |
parent | 1f30702285010c0921c4d8266096c49e6f3bd533 (diff) |
check in mk.
37 files changed, 4793 insertions, 0 deletions
diff --git a/libdde_linux26/mk/Makeconf b/libdde_linux26/mk/Makeconf new file mode 100644 index 00000000..1c927e45 --- /dev/null +++ b/libdde_linux26/mk/Makeconf @@ -0,0 +1,512 @@ +# -*- Makefile -*- +# vim:set ft=make: +# +# DROPS (Dresden Realtime OPerating System) Component +# +# Make configuration file +# +# $Id: Makeconf 418 2008-11-12 03:50:31Z l4check $ +# +# $Author: l4check $ +# +# This file is included by all Makefile-templates. This file defines macros +# for div commands, sets general DROPS-Makefile variables, ensures the +# dependencies from the various Makeconf.locals, defines the messages for +# div actions, and permits the dependency-creation on clean-rules. +# +# The macros BUILD_MULTIPLE_ARCHITECTURES and BUILD_ONE_ARCHITECTURE are +# defined here. +# +# BUILD_MULTIPLE_ARCHITECTURES is set if ARCHS is set to multiple +# architectures in the Makefile. If ARCHS is not set, the default value +# l4_i386 will be assumed, not defining BUILD_MULTIPLE_ARCHITECTURES. +# In the muli-arch case, binary.inc triggers build the files into subdirs, +# dir-name is the architecture. Then, make is called recursively with ARCH +# set to one architecture. +# +# BUILD_ONE_ARCHITECTURE is set if ARCH contains one architecture, and we +# actually build files (in subdirs for multi-arch case, in the same dir in +# the single-arch case). + +ifeq ($(origin _L4DIR_MK_MAKECONF),undefined) +_L4DIR_MK_MAKECONF=y + +# the default target is all +all:: + +# make .general.d dependent on the role-file +$(if $(ROLE),$(OBJ_DIR)/.general.d: $(L4DIR)/mk/$(ROLE)) + +SYSTEM_TARGET = $(SYSTEM_TARGET_$(ARCH)) +SYSTEM_TARGET_arm = arm-linux- + +CARCHFLAGS_amd64 = -mno-red-zone +ASFLAGS_amd64 = -m64 + +LD_EMULATION_amd64= elf_x86_64 +LD_EMULATION_arm = armelf +LD_EMULATION_x86 = elf_i386 +LD_EMULATION = $(LD_EMULATION_$(ARCH)) + +OFORMAT_amd64 = elf64-x86-64 +OFORMAT_arm = default +OFORMAT_x86 = elf32-i386 +OFORMAT = $(OFORMAT_$(ARCH)) + +# This is quite bad: There is no other chance to disable the page-alignedment +# of the linker. The linker aligns the first section at 0x100000 for AMD64! +# We don't want this. Be careful for interactions with objcopy -S! +LDNMAGIC ?= -n +LDFLAGS_amd64 += $(LDNMAGIC) + +CARCHFLAGS_x86_586 = -march=i586 +CARCHFLAGS_x86_pentium = -march=i586 +CARCHFLAGS_x86_pentiummmx = -march=pentium-mmx +CARCHFLAGS_x86_pentiumpro = -march=pentiumpro +CARCHFLAGS_x86_686 = -march=i686 +CARCHFLAGS_x86_pentium2 = -march=pentium2 +CARCHFLAGS_x86_pentium3 = -march=pentium3 +CARCHFLAGS_x86_pentiumm = -march=pentium-m +CARCHFLAGS_x86_pentium4 = -march=pentium4 +CARCHFLAGS_x86_prescott = -march=prescott +CARCHFLAGS_x86_nocona = -march=nocona +CARCHFLAGS_x86_K6 = -march=k6 +CARCHFLAGS_x86_K7 = -march=athlon +CARCHFLAGS_x86_athlon4 = -march=athlon-4 +CARCHFLAGS_x86_K8 = -march=k8 +CARCHFLAGS_x86_opteron = -march=opteron + +IDL_SYSTEMS = x86-l4v2 + +AR = $(SYSTEM_TARGET)ar +AS = $(SYSTEM_TARGET)as +AWKP = gawk --posix +CVS = cvs -q +SVN = svn +CP = cp +DICE_SRCDIR ?= $(L4DIR)/../dice +DICE_OBJDIR ?= $(DICE_SRCDIR) +DICE = $(firstword $(wildcard $(DICE_OBJDIR)/src/dice \ + $(DROPS_STDDIR)/tool/bin/dice \ + $(shell which dice 2>/dev/null) ) \ + did_not_find_dice___please_install_dice ) +DICE_CPP_NAME = cpp0 + +DICE_INCDIR ?= $(DICE_SRCDIR)/include + +ECHO = echo + +GENOFFSETS = $(L4DIR)/tool/bin/genoffsets.pl +GOSH = $(firstword $(wildcard $(L4DIR)/../tools/gosh/gosh \ + $(DROPS_STDDIR)/tool/bin/gosh \ + $(shell which gosh 2>/dev/null) ) \ + did_not_find_gosh___please_install_gosh ) +HOST_CC = gcc +HOST_CXX = g++ +INDENT = indent -sob +INSTALL = install +# the following two variables should be overwritten in Makeconf.bid.local +LD = $(SYSTEM_TARGET)ld +LATEX = latex +PDFLATEX = pdflatex +GREP = grep +LN = ln +MKDIR = mkdir -p +MKFLAGS +=$(MKFLAGS_$@) +NM = $(SYSTEM_TARGET)nm +OBJCOPY = $(SYSTEM_TARGET)objcopy +PWDCMD = sh -c pwd +RANLIB = $(SYSTEM_TARGET)ranlib +RM = rm -f +SCRUB = $(RM) $(wildcard *.old) $(wildcard *~) $(wildcard *.bak) \ + $(wildcard \#*\#) +SED = sed +SHELL = /bin/bash +SIZE = $(SYSTEM_TARGET)size +STRIP = $(SYSTEM_TARGET)strip +TR = tr +GEN_DOPECODE = $(L4DIR)/tool/gen_dopecode/gen_dopecode +ABS2REL = $(L4DIR)/tool/bin/abs2rel.sh +# it's optional to be able to set it as environment variable +FIASCOUX ?= $(L4DIR)/../kernel/fiasco/build-ux/fiasco +DISASM_CMD ?= $(SYSTEM_TARGET)objdump -ld $(1) | less + +# functions that are handy +absfilename_target_dir_needs_to_exist = $(foreach w,$(1),$(addsuffix /$(notdir $(w)),$(shell cd $(dir $(w)) 2>/dev/null&&$(PWDCMD)))) +absfilename = $(shell $(L4DIR)/mk/rel2abs.sh $(1)) +findfile = $(firstword $(wildcard $(addsuffix /$(1),$(2))) $(1)_NOT_FOUND) + +# include this one early to be able to set OBJ_BASE +-include $(L4DIR)/Makeconf.local + +ifeq ($(filter $(IGNORE_OBJDIR_TARGETS),$(MAKECMDGOALS)),) +# output directory +ifeq ($(O)$(OBJ_BASE),) +$(error need to give builddir with O=.../builddir) +else +ifneq ($(O),) +ifeq ($(origin OBJ_BASE),undefined) +OBJ_BASE := $(call absfilename, $(O)) +export OBJ_BASE +endif +endif +endif +endif + +ifeq ($(origin L4DIR_ABS),undefined) +L4DIR_ABS := $(call absfilename,$(L4DIR)) +endif +ifeq ($(origin PKGDIR_ABS),undefined) +PKGDIR_ABS := $(call absfilename,$(PKGDIR)) +endif +ifeq ($(origin SRC_DIR),undefined) +SRC_DIR := $(shell pwd) +endif +ifeq ($(origin SRC_BASE_ABS),undefined) +SRC_BASE ?= $(L4DIR) +SRC_BASE_ABS := $(call absfilename,$(SRC_BASE)) +export SRC_BASE_ABS +endif +ifeq ($(origin OBJ_DIR),undefined) +OBJ_DIR := $(subst $(SRC_BASE_ABS),$(OBJ_BASE),$(SRC_DIR)) +endif +ifeq ($(origin PKGDIR_OBJ),undefined) +PKGDIR_OBJ := $(call absfilename,$(OBJ_DIR)/$(PKGDIR)) +endif + +# if PKGDIR is not in L4DIR, we have an external package, so make up some +# build-dir for it +ifneq ($(patsubst $(L4DIR_ABS)/%,,$(PKGDIR_ABS)),) +ifneq ($(filter-out $(OBJ_BASE)/ext-pkg%,$(PKGDIR_OBJ)),) +PKGDIR_OBJ := $(OBJ_BASE)/ext-pkg$(PKGDIR_OBJ) +OBJ_DIR := $(OBJ_BASE)/ext-pkg$(OBJ_DIR) +endif +endif + +# sanity check the object dir +ifneq ($(SRC_BASE_ABS),$(OBJ_BASE)) +ifeq ($(SRC_DIR),$(OBJ_DIR)) +$(warning Sorry, your object or source path became garbled.) +$(warning OBJ_BASE: $(OBJ_BASE)) +$(warning SRC_BASE_ABS: $(SRC_BASE_ABS)) +$(warning SRC_DIR: $(SRC_DIR)) +$(warning OBJ_DIR: $(OBJ_DIR)) +$(warning PKGDIR: $(PKGDIR)) +$(warning L4DIR_ABS: $(L4DIR_ABS)) +$(warning PKGDIR_ABS: $(PKGDIR_ABS)) +$(warning PKGDIR_OBJ: $(PKGDIR_OBJ)) +$(error Please investigate.) +endif +endif + + +OBJ_DIR_EXPORT = $(OBJ_DIR) +export OBJ_DIR_EXPORT + +VPATH_SRC_BASE ?= $(SRC_DIR) + +# Makeconf.local handling +# dont use -include here, as we have special build conditions in $(L4DIR)/ +ifeq ($(origin BID_ROOT_CONF),undefined) +BID_ROOT_CONF := $(call absfilename, $(OBJ_BASE))/Makeconf.bid.local +endif +ifeq ($(filter $(IGNORE_OBJDIR_TARGETS),$(MAKECMDGOALS)),) +ifeq ($(wildcard $(BID_ROOT_CONF)),) +ifeq ($(BID_IGN_ROOT_CONF),) +$(error No configuration file found in build directory "$(OBJ_BASE)". Please run "make O=/path/to/objdir config" in "$(L4DIR_ABS)" or specify a valid build directory) +endif +else +include $(BID_ROOT_CONF) +endif +endif + +-include $(L4DIR)/Makeconf.$(CONFIG_LABEL) + +-include $(OBJ_BASE)/Makeconf.local +ifneq ($(PKGDIR),) +-include $(PKGDIR)/Makeconf.local +endif +# if it is not already set, we use this in the local dir +MAKECONFLOCAL ?= Makeconf.local +-include $(MAKECONFLOCAL) + +DROPS_STDDIR ?= /home/drops +ifeq ($(STATICFILE),) +STATICFILE = $(OBJ_BASE)/pkg/STATIC $(L4DIR)/pkg/STATIC +endif + +# a nasty workaround for make-3.79/make-3.80. The former needs an additional +# $$ for $-quotation when calling a function. +BID_IDENT = $(1) +ifeq ($(call BID_IDENT,$$),) +BID_DOLLARQUOTE = $$ +endif +BID_COMMA = , + +ifneq ($(PL),) +PL_j := -j $(PL) +export PL +endif + +include $(L4DIR)/mk/config.inc + +ifeq ($(HAVE_LDSO),y) +# MAKEDEP-call: +# arg1 - compiler binary name +# arg2 - [opt] compiler target. Will be written as target within the +# dependency file +# arg3 - [opt] name of the dependency file. If unset, .<arg2>.d will be used. +# arg4 - [opt] alternative binary name +ifeq ($(origin BID_LIBGENDEP), undefined) +BID_LIBGENDEP := $(firstword $(wildcard $(call absfilename, \ + $(OBJ_BASE)/tool/gendep/libgendep.so \ + $(DROPS_STDDIR)/tool/lib/libgendep.so ))) +endif + +ifeq ($(HOST_SYSTEM),linux) + LD_PRELOAD = LD_PRELOAD +endif +ifeq ($(HOST_SYSTEM),darwin) + LD_PRELOAD = DYLD_FORCE_FLAT_NAMESPACE=1 DYLD_INSERT_LIBRARIES +endif +MAKEDEP=$(LD_PRELOAD)=$(BID_LIBGENDEP) GENDEP_TARGET=$(if $(2),$(2),$@) \ + GENDEP_BINARY=$(1) $(if $(3),GENDEP_DEPFILE=$(3)) \ + $(if $(4),GENDEP_BINARY_ALT1=$(4)) +endif + +# macros used here and in packages +checkcc = $(shell if $(CC) $(1) -o /dev/null -c -x c \ + /dev/null > /dev/null 2>&1; then echo "$(1)"; fi) +checkcxx = $(shell if $(CXX) $(1) -o /dev/null -c -x c++ \ + /dev/null > /dev/null 2>&1; then echo "$(1)"; fi) + +# the gcc specific variables: version, base dir, include dir, gcc lib +# note: determining these variables is slow, and the values should +# be set in Makeconf.bid.local. However, this is the place were +# they are determined on a 'make config' in $(L4DIR) +GCCVERSION_f = $(shell $(CC) -dumpversion | sed -e 's/\(.*\)\..*/\1/') +GCCMAJORVERSION_f=$(shell $(CC) -dumpversion | sed -e 's/\([^.]*\).*/\1/') +GCCMINORVERSION_f=$(shell $(CC) -dumpversion | sed -e 's/[^.]*\.\([^.]*\).*/\1/') +GCCSUBVERSION_f = $(shell $(CC) -dumpversion | sed -e 's/.*\.\(.*\)/\1/') +GCCDIR_f = $(shell LC_ALL=C $(CC) -print-search-dirs|sed -ne 's+^install: \(.*[^/][^/]*\)/+\1+p' ) +GCCLIB_f = $(shell $(CC) -print-libgcc-file-name) +GCCLIB_EH_f = $(filter /%,$(shell $(CC) -print-file-name=libgcc_eh.a)) +GCCINCDIR_f = $(addprefix $(call GCCDIR_f),/include /include-fixed) +GCCNOSTACKPROTOPT_f= $(call checkcc,-fno-stack-protector) + +GCCINCDIR = $(GCCDIR)/include $(GCCDIR)/include-fixed +I_GCCINCDIR = $(addprefix -I,$(GCCINCDIR)) + +ifneq ($(PKGDIR),) + ifeq ($(origin PKGNAME),undefined) + PKGNAME := $(notdir $(shell cd $(PKGDIR);pwd)) + endif +endif + +ifeq ($(V),1) + VERBOSE = +endif +ifeq ($(V),0) + VERBOSE = @ +endif + +# indicate if we are using dietlibc or uClibc +ifeq ($(USE_DIETLIBC),y) +# dietlibc explicitly set for all architectures + DEFINES += -DUSE_DIETLIBC=y + USE_DIETLIBC = y + LIBC_TYPE = diet + $(warning The use of dietlibc is deprecated, please switch to uclibc.) + $(warning Dietlibc will soon be removed from the tree.) +else + # uClibc explicitly set for all architectures + DEFINES += -DUSE_UCLIBC=y + USE_UCLIBC = y + LIBC_TYPE = uc +endif + +ifeq ($(RELEASE_MODE),y) +DEFINES += -DL4BID_RELEASE_MODE +endif + +ifeq ($(USE_TASKLIB),y) +DEFINES += -DUSE_TASKLIB=y +endif + +ifeq ($(ARCH),arm) +ifeq ($(RAM_BASE),) +$(error RAM_BASE not given, needed for ARM architecture builds.) +endif +else #arch != arm + RAM_BASE = 0x0 +endif + +DEFINES += -DRAM_BASE=$(RAM_BASE) + + +ifneq ($(filter linux l4linux host,$(MODE)),) +HOST_LINK := 1 +endif + +# +# SUBDIR handling, not within the OBJ-*/ dirs +# +ifeq ($(SYSTEM),) +ifneq ($(SUBDIRS),) +.PHONY: $(SUBDIRS) +$(SUBDIRS): + $(VERBOSE)PWD=$(PWD)/$@ $(MAKE) -C $@ all + +# we know that SUBDIRS isn't empty, hence we can avoid the dir-test +scrub clean cleanall:: + $(VERBOSE)set -e; $(foreach i,$(SUBDIRS), \ + PWD=$(PWD)/$(i) $(MAKE) -C $(i) $@ $(MKFLAGS) $(MKFLAGS_$(i));) + +install:: $(SUBDIRS) + $(VERBOSE)set -e; $(foreach i,$(SUBDIRS), \ + PWD=$(PWD)/$(i) $(MAKE) -C $(i) $@ $(MKFLAGS) $(MKFLAGS_$(i));) + +endif + +all:: $(OBJ_DIR)/Makefile + +$(OBJ_DIR)/Makefile: $(L4DIR)/mk/Makeconf + $(VERBOSE)install -d $(dir $@) + $(VERBOSE)echo '# automatically created -- modifications will be lost' > $@ + $(VERBOSE)echo 'SRC := $(SRC_DIR)' >> $@ + $(VERBOSE)echo 'OBJ := $(OBJ_BASE)' >> $@ + $(VERBOSE)echo '.PHONY: x $$(MAKECMDGOALS)' >> $@ + $(VERBOSE)echo 'x:' >> $@ + $(VERBOSE)echo ' PWD=$$(SRC) $$(MAKE) -C $$(SRC) O=$$(OBJ)' >> $@ + $(VERBOSE)echo '$$(MAKECMDGOALS):' >> $@ + $(VERBOSE)echo ' PWD=$$(SRC) $$(MAKE) -C $$(SRC) O=$$(OBJ) $$@'>> $@ + +else +# we are within an OBJ-*/ dir, create dummy target +$(SUBDIRS): +endif + +# +# Dependency section +# +# + +# the general dependencies: All generated files depend on ".general.d". +# ".general.d" itself depends on the mk-Makeconf, the optional +# Makeconf.local, the Makeconf.bid.local, the packet-Makeconf.local and the +# Makeconf.local. This ensures a rebuilt if any of the configuration- +# or make-files changes. +# +# We have this nasty if-readable-magic to allow the files to disappear +# or to appear. Depending on if the according makeconf exists now, the +# if-readable magic .general.d is used on existance or non-existence. + +BID_DEPEND_GENERAL_D_COND = \ + if [ -r $(1) ] ; then echo -e '$@: $(1)\n$(1):\n' >>$@ ; \ + else echo '$$(if $$(wildcard $(1)), $@: FORCE)' >>$@; fi + +ifeq ($(SYSTEM),) +GENERAL_D_LOC := $(OBJ_DIR)/.general.d +else +GENERAL_D_LOC := .general.d +endif + +$(GENERAL_D_LOC): $(L4DIR)/mk/Makeconf + @$(BUILD_MESSAGE) + @install -d $(dir $@) + $(DEPEND_VERBOSE)echo '$@: $(SRC_DIR)/Makefile ' > $@ + $(DEPEND_VERBOSE)$(call BID_DEPEND_GENERAL_D_COND,\ + $(OBJ_BASE)/Makeconf.bid.local) + $(DEPEND_VERBOSE)$(call BID_DEPEND_GENERAL_D_COND,\ + $(OBJ_BASE)/Makeconf.local) + $(DEPEND_VERBOSE)$(call BID_DEPEND_GENERAL_D_COND,\ + $(L4DIR)/Makeconf.local) + $(DEPEND_VERBOSE)$(call BID_DEPEND_GENERAL_D_COND,\ + $(L4DIR)/Makeconf.$(CONFIG_LABEL)) + $(if $(PKGDIR),$(DEPEND_VERBOSE)$(call BID_DEPEND_GENERAL_D_COND,\ + $(PKGDIR)/Makeconf.local)) + $(DEPEND_VERBOSE)$(call BID_DEPEND_GENERAL_D_COND,\ + $(MAKECONFLOCAL)) + +DEPS += $(GENERAL_D_LOC) + +ifneq ($(DEPENDS_PKGS),) +DEPENDS_PKGS_MISSING := $(strip $(foreach i,$(DEPENDS_PKGS), \ + $(if $(wildcard $(L4DIR)/pkg/$(i)),,$(i)))) + +ifneq ($(DEPENDS_PKGS_MISSING),) +# clear TARGET to prevent building anything +TARGET = +all:: + @echo -e "\033[32mPackage dependencies missing: \033[1m$(DEPENDS_PKGS_MISSING)\033[22m, skipping.\033[0m" +endif +endif + +# +# Messages +# + +# set SHOWMESSAGES=true or 'y' to print textual action descriptions +SHOWMESSAGES ?= true + +# coloring on color-capable terminals +# enabled by setting BID_COLORED_PHASES to y +ifeq ($(BID_COLORED_PHASES),y) +ifeq ($(COLOR_TERMINAL),y) + EMPHSTART = '\033[34m' + EMPHSTOP = '\033[0m' +else + EMPHSTART = + EMPHSTOP = +endif +endif + + +ifneq (,$(filter y true, $(SHOWMESSAGES))) +AR_MESSAGE?= echo -e " ==> Archiving into $@" +BUILD_MESSAGE?= echo -e " ... Building $@" +BUILT_MESSAGE?= echo -e $(EMPHSTART)' ==> "$@" built'$(EMPHSTOP) +COMP_MESSAGE?= echo -e " ... Compiling $@" +COMP_P_MESSAGE?=echo -e " ... Compiling PIC $@" +COMP_PR_MESSAGE?=echo -e " ... Compiling PROFILE $@" +GEN_MESSAGE?= echo -e " ... Generating $@" +LINK_MESSAGE?= echo -e " ==> Linking $@" +LINK_SHARED_MESSAGE?= echo -e " ==> Linking to shared $@" +LINK_PARTIAL_MESSAGE?= echo -e " ==> Partial linking to $@" +DEP_MESSAGE?= echo -e " ... Building dependencies for $<" +CLEAN_MESSAGE?= echo -e " ... Removing created files" +CLEANALL_MESSAGE?=echo -e " ... Removing all created files" +INSTALL_LINK_MESSAGE?=echo -e " ==> Updating symlinks" +INSTALL_DOC_MESSAGE?=echo -e " ==> Installing $(<) documentation" +INSTALL_DOC_LOCAL_MESSAGE?= echo -e " ==> Installing $(<) documentation locally" +INSTALL_MESSAGE?=echo -e " ==> Installing $^" +INSTALL_LOCAL_MESSAGE?=echo -e " ==> Installing $(<) to local build-tree" +UPDATE_HTML_MESSAGE?=echo -e " ! You should remake your doc directory in $(1)" +endif + + +# allows an include $(DEPSVAR) at the end of the makefile +# but prevents rebuilding them on a scrub, clean, cleanall and help +ifneq ($(filter scrub clean cleanall help,$(MAKECMDGOALS)),) +DEPSVAR = +else +DEPSVAR = $(DEPS) +endif + +# +# Some rules +# + +# addfileheader-rule: allows "make addfileheader main.c server.c"-like +# commands and automatically inserts the path within the package +# options may be passed with $(ADDFILEHEADER_OPTIONS) +ADDFILEHEADER_PREFIX = $(patsubst $(call absfilename,$(PKGDIR)/)%,\ + $(PKGNAME)/%,$(call absfilename,./)) +ADDFILEHEADER_FILES = $(filter-out addfileheader,$(MAKECMDGOALS)) +addfileheader: + addfileheader $(ADDFILEHEADER_OPTIONS) -p $(ADDFILEHEADER_PREFIX) $(ADDFILEHEADER_FILES) + + +.PHONY: FORCE + +endif # _L4DIR_MK_MAKECONF undefined diff --git a/libdde_linux26/mk/WhatIsThis b/libdde_linux26/mk/WhatIsThis new file mode 100644 index 00000000..e64452d8 --- /dev/null +++ b/libdde_linux26/mk/WhatIsThis @@ -0,0 +1,2 @@ +# DROPS Building Makros +filelist="*.mk *.inc config.*" diff --git a/libdde_linux26/mk/binary.inc b/libdde_linux26/mk/binary.inc new file mode 100644 index 00000000..14da70a9 --- /dev/null +++ b/libdde_linux26/mk/binary.inc @@ -0,0 +1,729 @@ +# -*- 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 ?= $(addprefix $(OBJ_BASE)/include/$(ARCH)/,$(L4API)) \ + $(addprefix $(OBJ_BASE)/include/,$(L4API)) \ + $(OBJ_BASE)/include/$(ARCH) \ + $(OBJ_BASE)/include \ + $(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 -O2 -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)) +CPPFLAGS+= $(DEFINES) +CPPFLAGS+= $(BID_CPPFLAGS_SYSCALLS) +CPPFLAGS+= $(addprefix -I, $(PRIVATE_INCDIR) $(PRIVATE_INCDIR_$(OSYSTEM)) $(PRIVATE_INCDIR_$@) $(PRIVATE_INCDIR_$@_$(OSYSTEM))) +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) + diff --git a/libdde_linux26/mk/config.help b/libdde_linux26/mk/config.help new file mode 100644 index 00000000..9e0a8728 --- /dev/null +++ b/libdde_linux26/mk/config.help @@ -0,0 +1,379 @@ +CPU architecture +BUILD_ARCH_x86 + Specify for which processor architecture you want to build. You may + select between x86 (PC), arm, and amd64. + + +CPU-Types for architecture +CPU + Specify for which CPU types you want to build code. + Specify at least one CPU type. + + Supported CPUs for x86 architecture are: 586, 686, K6, K7. + Supported CPUs for arm architecture are: sa, int. + + You can build for multiple CPU types, the code will be stored in + different directories. + + +Build code using API +BUILD_ABI_l4v2 + Specify the version of the Kernel Programming Interface. You may + select between L4.Fiasco (previously V2) or Linux. + + +Build for arm architecture +BUILD_SYSTEMS_arm_s + If you want to build code for the arm architecture, say Y here. + + You can build for multiple architectures, the code will be stored in + different directories. + + Most users will say N here. + +CPU-Types for arm architecture +CPU_arm + Specify for which arm architecture CPU types you want to build code. + Specify at least one CPU type. Supported CPUs are: sa. + + You can build for multiple CPU types, the code will be stored in + different directories. + +Build for amd64 architecture +BUILD_SYSTEMS_amd64_s + If you want to build code for the amd64 architecture, say Y here. + + You can build for multiple architectures, the code will be stored in + different directories. + + Most users will say N here. + +CPU-Types for amd64 architecture +CPU_amd64 + Specify for which amd64 architecture CPU types you want to build code. + Specify at least one CPU type. + + You can build for multiple CPU types, the code will be stored in + different directories. + +Build for ppc32 architecture +BUILD_SYSTEMS_ppc32_s + If you want to build code for the ppc32 architecture, say Y here. + + You can build for multiple architectures, the code will be stored in + different directories. + + Most users will say N here. + +CPU-Types for ppc32 architecture +CPU_ppc32 + Specify for which ppc32 architecture CPU types you want to build code. + Specify at least one CPU type. + + You can build for multiple CPU types, the code will be stored in + different directories. + + + + +Build shared libloaders.s.so +BUILD_LOADER + The "loader" package allows to build a shared library containing + common libraries of L4Env. To build this shared library, the other + L4Env libraries must be build in PIC mode, additionally to the + normal, i.e. non-PIC, mode. + + If you want to use the loader, say Y here. + + +Base directory of the DROPS install tree +DROPS_STDDIR + This is the directory where the includes, libraries and binaries + are looked for. On 'make install', files are installed here. + + For users at TUD with access to os:/home/drops, this is /home/drops. + For others, this is usually $(HOME)/src/drops or similar. + + +Final location of the DROPS install tree +DROPS_INSTDIR + In case you are installing into a temporary DROPS_STDDIR subdirectory, + which will be moved later, set DROPS_INSTDIR to this final + destination. + + You will normally use the default setting "$(DROPS_STDDIR)". + DROPS_INSTDIR is merely used by the daily consitency-check of DROPS. + + +DDE-2.4 include path +DDE_INCDIR + This is a space-separated list of paths where the DDE-Linux includes + can be found. + + Upon compilation, the DDE-Linux package installs its header files + like any other DROPS package into subdirs of $(L4DIR)/include or + $(DROPS_STDDIR)/include, respectively. This variable lists these + subdirectories. + + Normally, you do not have to change this value. + +DDE-2.6 include path +DDE26_INCDIR + This is a space-separated list of paths where the includes of the + Linux-2.6 version of the DDE-Linux package (dde_linux26) can be + found. + + Upon compilation, the DDE-Linux 2.6 package installs its header + files like any other DROPS package into subdirs of $(L4DIR)/include + or $(DROPS_STDDIR)/include, respectively. This variable lists these + subdirectories. + + Normally, you do not have to change this value. + + +SDL include path +SDL_INCDIR + This is a space-separated list of paths where the SDL includes can + be found. + + Upon compilation, the SDL package installs its header files + like any other DROPS package into subdirs of $(L4DIR)/include or + $(DROPS_STDDIR)/include, respectively. This variable lists these + subdirectories. + + Normally, you do not have to change this value. + + +Verbose dependency building +DEPEND_VERBOSE_SWITCH + If enabled, the commands for dependency-generation will be shown. If + disabled, DEPEND_VERBOSE is set to '@' to prevent this. + + Most users will say N here. + + +Verbose compilation and building +VERBOSE_SWITCH + If enabled, the commands issued for compilation will be shown. If + disabled, VERBOSE is set to '@' to prevent this. + + +Short messages for compilation +SHOWMESSAGES + If enabled, a short textual description for every compilation step + is printed. + + Most users will say Y here. + + +Colored build-steps +BID_COLORED_PHASES + If enabled, significant messages will be printed in color, depending + on your $TERM setting. + + +Use special C-Compilers +BIDc_USE_SPECIAL_CC + If you want to specify specific versions of C and C++ compilers instead + of using the default ones, enable this option. Defaults are + "$(SYSTEM_TARGET)gcc" and "$(SYSTEM_TARGET)g++". + + Most users will say N here. + +Specific C-Compiler +HOSTCC + The C compiler to use to generate code for the host system (the one + you are using currently). + +Specific C++-Compiler +HOSTCXX + The C++ compiler to use to generate code for the host system (the one + you are using currently). + +Specific C-Compiler +CC_x86 + The C compiler to build x86 code. + +Specific C++-Compiler +CXX_x86 + The C++ compiler to build x86 code. + +Specific C-Compiler +CC_arm + The C compiler to build arm code. + +Specific C++-Compiler +CXX_arm + The C++ compiler to build arm code. + + +YACC-name +YACC + If you would like to use alternative yacc or lex tools, set those names + here. Defaults are 'byacc' and 'flex'. You can also specify cmdline + arguments using this option. + +LEX-name +LEX + If you would like to use alternative yacc or lex tools, set those names + here. Defaults are 'byacc' and 'flex'. You can also specify cmdline + arguments using this option. + +CTAGS-name +CTAGS + If you would like to use alternative ctags tool, set its name here. + You may want to at least also specify a recursive option for your ctags + tool. + +ETAGS-name +ETAGS + If you would like to use alternative etags tool, set its name here. + You may want to at least also specify a recursive option for your etags + tool. + +System has ld.so +HAVE_LDSO + If your system provides the dynamic linker ld.so, and this is used + by your compilers, you should enable this switch. This allows to + use faster, more flexible and more accurate methods for dependency + building. + + Most Linux-users will say Y here. + + +Automatically determine C preprocessor names +INT_CPP_NAME_SWITCH + If you use C-compilers BID does not know so far, there is a chance you + have to help BID about the names of the C and C++ preprocessors. E.g., + gcc tends to change its preprocessor names from subversion to + subversion, and the dependency tool used by BID wants to know about + these names. However, if dependencies are generated well, BID already + selected the corrects names for you. + + Most users will say Y here. + + +Internal C preprocessor name +INT_CPP_x86_NAME + The command name of the preprocessor your x86 C compiler uses. + Note: It is not necessarily the preprocessor as you would invoke it + from the command line. gcc uses its own internal names. + + For gcc versions prior to gcc 2.95.4 it is 'cpp'. + gcc verssion 2.95.4 uses 'cpp0'. gcc version 3.2 uses 'cc1'. + + +Internal C++ preprocessor name +INT_CXX_x86_NAME + The command name of the preprocessor your x86 C++ compiler uses. + Note: It is not necessarily the preprocessor as you would invoke it + from the command line. g++ uses its own internal names. + + For g++ versions prior to gcc 2.95.4 it is 'cpp'. + gcc verssion 2.95.4 uses 'cpp0'. gcc version 3.2 uses 'cc1plus'. + + +Internal C preprocessor name +INT_CPP_arm_NAME + The command name of the preprocessor your arm C compiler uses. + Note: It is not necessarily the preprocessor as you would invoke it + from the command line. gcc uses its own internal names. + + For gcc versions prior to gcc 2.95.4 it is 'cpp'. + gcc verssion 2.95.4 uses 'cpp0'. gcc version 3.2 uses 'cc1'. + + +Internal C++ preprocessor name +INT_CXX_arm_NAME + The command name of the preprocessor your arm C++ compiler uses. + Note: It is not necessarily the preprocessor as you would invoke it + from the command line. g++ uses its own internal names. + + For g++ versions prior to gcc 2.95.4 it is 'cpp'. + gcc verssion 2.95.4 uses 'cpp0'. gcc version 3.2 uses 'cc1plus'. + + +Automatically determine LD names +INT_LD_NAME_SWITCH + If you use C/C++ compilers BID does not know so far, there is a + chance you have to help BID about the names of the linker binaries. + E.g., linker binaries change on cross-compiler environments. The + dependency tool used by BID wants to know about these names. + However, if dependencies are generated well, BID already selected the + corrects names for you. + + Most users will say Y here. + +Internal linker name +INT_LD_x86_NAME + The command name of the linker your x86 C/C++ compiler uses. + +Internal linker name +INT_LD_arm_NAME + The command name of the linker your arm C/C++ compiler uses. + +Strip binaries on install +BID_STRIP_PROGS + If enabled, binaries will be stripped on installation into + $(L4DIR)/bin or $(DROPS_STDDIR)/bin. If you want to load them with + all their symbols (eg to show the symbols with the Fiasco kernel + debugger), say 'N' here. + + If unsure, say 'Y'. + +Generate gstabs-compatible debug Infos with gcc-3+ +BID_GSTAB_SW + If enabled, gcc will be passed the '-gstabs+' cmdline option. gcc will + generate debug information in the stabs format, including GNU + specific extensions. + + Enable this option to show the line information in the fiasco kernel + debugger. Disable BID_STRIP_PROGS then. + + You can safely say 'Y' here. + +GCC: Omit Frame-pointers +BID_GCC_OMIT_FP + + If enabled, gcc will be passed the '-fomit-frame-pointer' cmdline + option, adding an additional register to the register set for the + generated code. Programs will be faster, but backtraces cannot be + done, seriously hindering debugging. + + If unsure, say 'N'. + +Generate Map-files for binaries +BID_GENERATE_MAPFILE + + Enabling this option will generate map-files together with the binaries. + You do not need mapfiles for DROPS to work properly, but you might + become handy for debugging purposes. See ld(1) for details on mapfiles. + + If unsure, say 'N'. + +Build system using dietlibc +USE_DIETLIBC + Uses the dietlibc as the main libc (deprecated). + +Build system using uClibc +USE_UCLIBC + Uses the uClibc as the main libc. + +Enable Release flag +RELEASE_FLAG + This option enables the RELEASE flag possible omitting + debugging/development code. + +Build documentation +BID_BUILD_DOC + Build documentation. + +Build only in l4 directory +BID_BUILD_L4DIR_ONLY + Only build in l4 directory, no kernel, no dice. + +Name for the configuration +CONFIG_LABEL + Name for the configuration. The build system will also try to include + a file Makeconf.<label> from the build directory root and the l4 directory + root. diff --git a/libdde_linux26/mk/config.in b/libdde_linux26/mk/config.in new file mode 100644 index 00000000..ebf52232 --- /dev/null +++ b/libdde_linux26/mk/config.in @@ -0,0 +1,214 @@ +# -*- Shell-script -*- +# vim:se ft=sh: + +mainmenu_name "DROPS Configuration" + +mainmenu_option next_comment +comment 'Target Architecture' + +choice 'Target Architecture' \ + "x86 BUILD_ARCH_x86 \ + arm BUILD_ARCH_arm \ + amd64 BUILD_ARCH_amd64" x86 + +if [ "$BUILD_ARCH_x86" = "y" ] ; then + define_string BUILD_ARCH "x86" + string " CPU type" CPU '586' +fi + +if [ "$BUILD_ARCH_arm" = "y" ] ; then + define_string BUILD_ARCH "arm" +fi + +if [ "$BUILD_ARCH_amd64" = "y" ] ; then + define_string BUILD_ARCH "amd64" + string " CPU type" CPU 'k8' +fi + + +choice ' ABI' \ + "L4.Fiasco BUILD_ABI_l4v2 \ + Linux BUILD_ABI_linux" L4.Fiasco + +if [ "$BUILD_ABI_l4v2" = "y" ] ; then + define_string BUILD_ABI "l4v2" +fi +if [ "$BUILD_ABI_linux" = "y" ] ; then + define_string BUILD_ABI "linux" +fi + +if [ "$BUILD_ARCH_arm" = "y" ] ; then + + choice 'ARM Platform' \ + "integrator PLATFORM_ARM_integrator \ + rv PLATFORM_ARM_rv \ + custom PLATFORM_ARM_custom" integrator + + if [ "$PLATFORM_ARM_integrator" = "y" ] ; then + define_string CPU 'int' + define_string ARM_PLATFORM_TYPE 'integrator' + string "RAM base" RAM_BASE 0x0 + int "RAM size in MB" RAM_SIZE_MB 256 + fi + if [ "$PLATFORM_ARM_rv" = "y" ] ; then + define_string CPU 'rv' + define_string ARM_PLATFORM_TYPE 'rv' + string "RAM base" RAM_BASE 0x0 + int "RAM size in MB" RAM_SIZE_MB 256 + fi + + if [ "$PLATFORM_ARM_custom" = "y" ] ; then + string " CPU type" CPU 'int' + string " Platform name" ARM_PLATFORM_TYPE 'integrator' + string "RAM base" RAM_BASE 0x0 + int "RAM size in MB" RAM_SIZE_MB 256 + fi + + +fi + +endmenu + + +mainmenu_option next_comment +comment 'Paths and Directories' +string 'DROPS_STDDIR' DROPS_STDDIR '/path/to/drops' +string 'DROPS_INSTDIR' DROPS_INSTDIR '$(DROPS_STDDIR)' +endmenu + +mainmenu_option next_comment +comment 'Verboseness and Messages' +bool 'Verbose dependency building' DEPEND_VERBOSE_SWITCH +if [ "$DEPEND_VERBOSE_SWITCH" = "n" ] ; then + define_string DEPEND_VERBOSE @ +fi +bool 'Verbose compilation and building' VERBOSE_SWITCH +if [ "$VERBOSE_SWITCH" = "n" ] ; then + define_string VERBOSE @ +fi +bool 'Short messages for compilation' SHOWMESSAGES +if [ "$SHOWMESSAGES" = "y" ] ; then + bool 'Colored build-steps' BID_COLORED_PHASES +fi +endmenu + +mainmenu_option next_comment +comment 'Compilers and Tools' +bool 'Use special C-Compilers' BIDc_USE_SPECIAL_CC +if [ "$BIDc_USE_SPECIAL_CC" = "y" ] ; then + string 'HOST_CC' HOST_CC 'gcc' + string 'HOST_CXX' HOST_CXX 'g++' + if [ "$BUILD_ARCH" = "x86" ] ; then + string 'CC' CC '$(SYSTEM_TARGET_x86)gcc -m32' + string 'CXX' CXX '$(SYSTEM_TARGET_x86)g++ -m32' + fi + if [ "$BUILD_ARCH" = "arm" ] ; then + string 'CC' CC '$(SYSTEM_TARGET_arm)gcc' + string 'CXX' CXX '$(SYSTEM_TARGET_arm)g++' + fi + if [ "$BUILD_ARCH" = "amd64" ] ; then + string 'CC' CC '$(SYSTEM_TARGET_amd64)gcc -m64' + string 'CXX' CXX '$(SYSTEM_TARGET_amd64)g++ -m64' + fi +else + define_string HOST_CC 'gcc' + define_string HOST_CXX 'g++' + if [ "$BUILD_ARCH" = "x86" ] ; then + define_string CC '$(SYSTEM_TARGET_x86)gcc -m32' + define_string CXX '$(SYSTEM_TARGET_x86)g++ -m32' + fi + if [ "$BUILD_ARCH" = "arm" ] ; then + define_string CC '$(SYSTEM_TARGET_arm)gcc' + define_string CXX '$(SYSTEM_TARGET_arm)g++' + fi + if [ "$BUILD_ARCH" = "amd64" ] ; then + define_string CC '$(SYSTEM_TARGET_amd64)gcc -m64' + define_string CXX '$(SYSTEM_TARGET_amd64)g++ -m64' + fi +fi +comment "Tools" +string 'YACC' YACC byacc +string 'LEX' LEX flex +string 'CTAGS' CTAGS ctags +string 'ETAGS' ETAGS etags + +comment "Options" +bool 'System has ld.so (highly recommended if so)' HAVE_LDSO +if [ "$HAVE_LDSO" = "y" ] ; then + bool 'Automatically determine internal gcc preprocessor names' INT_CPP_NAME_SWITCH + if [ "$INT_CPP_NAME_SWITCH" = "n" ] ; then + if [ "$BUILD_ARCH" = "x86" ] ; then + string 'Internal name of x86 gcc preprocessor' INT_CPP_NAME "cpp0" + string 'Internal name of x86 g++ preprocessor' INT_CXX_NAME "cpp0" + fi + if [ "$BUILD_ARCH" = "arm" ] ; then + string 'Internal name of arm gcc preprocessor' INT_CPP_NAME "cpp0" + string 'Internal name of arm g++ preprocessor' INT_CXX_NAME "cpp0" + fi + if [ "$BUILD_ARCH" = "amd64" ] ; then + string 'Internal name of amd64 gcc preprocessor' INT_CPP_NAME "cpp0" + string 'Internal name of amd64 g++ preprocessor' INT_CXX_NAME "cpp0" + fi + fi + bool 'Automatically determine internal ld names' INT_LD_NAME_SWITCH + if [ "$INT_LD_NAME_SWITCH" = "n" ] ; then + if [ "$BUILD_ARCH" = "x86" ] ; then + string 'Internal name of x86 gcc/g++ linker' INT_LD_NAME "ld" + fi + if [ "$BUILD_ARCH" = "arm" ] ; then + string 'Internal name of arm gcc/g++ linker' INT_LD_NAME "ld" + fi + if [ "$BUILD_ARCH" = "amd64" ] ; then + string 'Internal name of amd64 gcc/g++ linker' INT_LD_amd64_NAME "ld" + fi + fi +fi +bool 'Strip binaries on install' BID_STRIP_PROGS +bool 'Generate stabs-compatible debug Infos with gcc-3+' BID_GSTAB_SW +if [ "$BID_GSTAB_SW" = "y" ] ; then + define_string BID_CFLAGS_GSTAB "-gstabs+" +fi +bool 'GCC: Omit Frame-pointers' BID_GCC_OMIT_FP +if [ "$BID_GCC_OMIT_FP" = "y" ] ; then + define_string BID_CFLAGS_OMIT_FP "-fomit-frame-pointer" +fi +bool 'Generate Map-files for binaries' BID_GENERATE_MAPFILE +bool 'Build doc directories' BID_BUILD_DOC + +endmenu + +mainmenu_option next_comment + comment 'Advanced' + + define_bool USE_UCLIBC "y" + define_bool USE_DIETLIBC "n" + + define_bool BUILD_LOADER "y" + define_string BUILD_LOADER_PICS 'libl4util.a libl4util_root.a libsigma0.a libnames.a libloaderif.a libcon.a libl4rm.a libbootmod.a libcon.a libconstream-server.a libdm_generic.a libdm_mem.a libgeneric_ts.a liblogserver.a liblogserver_capsule.a libsemaphore.a libthread.a libslab.a libgeneric_fprov.a libl4env_err.a libl4env.a libroot.a libc_be_l4env_start_stop.a libc_be_minimal_log_io.a libc_be_simple_mem.a libc_be_mmap.a libc_be_mmap_util.a libuclibc_support.a libuclibm_support.a librtc.a libl4env-l4lx.a' + + bool 'Use system-call entry code in the KIP (absolute)' L4_CALL_SYSCALLS + if [ "$L4_CALL_SYSCALLS" = "y" ] ; then + define_bool L4_ABS_SYSCALLS "y" + define_string BID_CPPFLAGS_SYSCALLS "-DCONFIG_L4_CALL_SYSCALLS -DCONFIG_L4_ABS_SYSCALLS" + fi + + bool 'Use hierarchical task system (EXPERIMENTAL)' USE_TASKLIB + bool 'Enable RELEASE flag' RELEASE_MODE + bool 'Do not build anything outside l4 directory' BID_BUILD_L4DIR_ONLY + + string 'Configuration label' CONFIG_LABEL + + mainmenu_option next_comment + comment 'Paths' + + define_string LINUX24_INCDIR '$(OBJ_BASE)/include/linux-24 $(DROPS_STDDIR)/include/linux-24' + define_string LINUX26_INCDIR '$(OBJ_BASE)/include/$(ARCH)/l4/linux-26-headers $(DROPS_STDDIR)/include/$(ARCH)/l4/linux-26-headers $(OBJ_BASE)/include/l4/linux-26-headers $(DROPS_STDDIR)/include/l4/linux-26-headers' + + string 'DDE-2.4 include path (DDE_INCDIR)' DDE_INCDIR '$(OBJ_BASE)/include/$(ARCH)/l4/dde_linux $(DROPS_STDDIR)/include/$(ARCH)/l4/dde_linux' + string 'DDE-2.6 include path (DDE26_INCDIR)' DDE26_INCDIR '$(OBJ_BASE)/include/$(ARCH)/l4/dde_linux26 $(DROPS_STDDIR)/include/$(ARCH)/l4/dde_linux26 $(OBJ_BASE)/include/l4/dde_linux26 $(DROPS_STDDIR)/include/l4/dde_linux26' + string 'SDL include path (SDL_INCDIR)' SDL_INCDIR '$(OBJ_BASE)/include/l4/sdl $(DROPS_STDDIR)/include/l4/sdl' + if [ "$BUILD_SYSTEMS_x86_l4secv2emu" = "y" ] ; then + string 'Fiasco build directory (FIASCO_DIR)' FIASCO_DIR '$(L4DIR)/kernel/fiasco/build_test/' + fi + endmenu +endmenu diff --git a/libdde_linux26/mk/config.inc b/libdde_linux26/mk/config.inc new file mode 100644 index 00000000..841ef9b7 --- /dev/null +++ b/libdde_linux26/mk/config.inc @@ -0,0 +1,137 @@ +# -*- Makefile -*- +# vim:set ft=make: +# DROPS (Dresden Realtime OPerating System) Component +# +# Makefile-Include for compiling templates (prog.mk, lib.mk) +# + +# Makefile-Include for binary, lib, subdir and other directories. +# Definitions and rules for the DROPS configuration tool. + +# Supported targets: +# +# config:: - run the menu-driven configuration tool +# txtconfig:: - run the configuration tool +# oldconfig:: - (re)create the configuration header based on a prior +# configuration or default values +# +# +# Required Parameters: +# +# PKGDIR +# +# +# Optional Parameters: +# +# DROPSCONF - if nonempty, the configuration tool is run for +# target config::. If empty, the configuration tool +# is not run. +# DROPSCONF_TITLE - the main title in the configuration tool. +# DROPSCONF_DEFCONFIG - default config file +# DROPSCONF_CONFIG_IN - configuration defintion file +# DROPSCONF_CONFIG - config file +# DROPSCONF_CONFIG_H - generated config header file +# DROPSCONF_MACRO - macro to indicate inclusion of config header file +# DROPSCONF_HELPFILE - options help file +# DROPSCONF_TOOL - the menudriven configuration tool +# DROPSCONF_TOOL_TXT - the configuration tool +# DROPSCONF_TOOL_OLD - helper for recreating the config header file + +DROPSCONF ?= +DROPSCONF_TITLE ?= DROPS Configuration Tool +DROPSCONF_DEFCONFIG ?= defconfig +DROPSCONF_CONFIG_IN ?= config.in +DROPSCONF_CONFIG ?= $(OBJ_DIR)/.config +DROPSCONF_CONFIG_H ?= $(OBJ_DIR)/config.h +DROPSCONF_CONFIG_MK ?= $(OBJ_DIR)/Makeconf.bid.local +DROPSCONF_DONTINC_MK ?= +DROPSCONF_MACRO ?= CONFIG_H_INCLUDED +DROPSCONF_HELPFILE ?= config.help +DROPSCONF_LXDIALOG ?= $(OBJ_BASE)/tool/config/lxdialog/lxdialog +DROPSCONF_TOOL ?= $(firstword $(wildcard \ + $(L4DIR)/tool/config/Menuconfig \ + $(DROPS_STDDIR)/tool/bin/Menuconfig) \ + did_not_find_BID_Menuconfig) +DROPSCONF_TOOL_TXT ?= $(firstword $(wildcard \ + $(L4DIR)/tool/config/Configure \ + $(DROPS_STDDIR)/tool/bin/Configure) \ + did_not_find_BID_Configure) +DROPSCONF_TOOL_OLD ?= $(firstword $(wildcard \ + $(L4DIR)/tool/config/Configure \ + $(DROPS_STDDIR)/tool/bin/Configure) \ + did_not_find_BID_Configure) -d +DROPSCONF_VARDEFS = $(foreach v,TITLE DEFCONFIG CONFIG_IN CONFIG CONFIG_H \ + MACRO HELPFILE UNDEF LXDIALOG,DROPSCONF_$v='$(DROPSCONF_$v)') + +ifneq ($(DROPSCONF),) +.o: $(DROPSCONF_CONFIG_H) + +$(DROPSCONF_CONFIG_H): $(DROPSCONF_CONFIG) + +$(DROPSCONF_CONFIG_H) $(DROPSCONF_CONFIG): $(DROPSCONF_CONFIG_IN) + @$(GEN_MESSAGE) + $(VERBOSE)install -d $(dir $(DROPSCONF_CONFIG)) + $(VERBOSE)install -d $(dir $(DROPSCONF_CONFIG_H)) + $(VERBOSE)if tty >/dev/null; then \ + $(DROPSCONF_VARDEFS) $(DROPSCONF_TOOL_OLD); \ + else \ + true | $(DROPSCONF_VARDEFS) $(DROPSCONF_TOOL_OLD) \ + $(if $(VERBOSE),>/dev/null,) || \ + ( echo -e "\nError: Unattended mode -- Some defaults for config options are missing." ; \ + false ) \ + fi + +$(DROPSCONF_CONFIG_MK): $(DROPSCONF_CONFIG) + $(VERBOSE)sed -e "s/\(^[^= ]*=\)'\([^']*\)'/\1\2/" \ + <$(DROPSCONF_CONFIG) >$@ + $(VERBOSE)$(MAKE) DROPSCONF_CONFIG_MK_POST_HOOK + +DROPSCONF_CONFIG_MK_POST_HOOK:: + +config:: $(DROPSCONF_LXDIALOG) + $(VERBOSE)install -d $(dir $(DROPSCONF_CONFIG_H)) + $(VERBOSE)$(DROPSCONF_VARDEFS) $(DROPSCONF_TOOL) + $(VERBOSE)test ! -r $(DROPSCONF_CONFIG) -o \ + ! $(DROPSCONF_CONFIG) -nt $(DROPSCONF_CONFIG_MK) || \ + $(MAKE) $(DROPSCONF_CONFIG_MK) + +txtconfig:: + $(VERBOSE)install -d $(dir $(DROPSCONF_CONFIG_H)) + $(VERBOSE)$(DROPSCONF_VARDEFS) $(DROPSCONF_TOOL_TXT) + @$(MAKE) $(DROPSCONF_CONFIG_MK) + +oldconfig:: + $(VERBOSE)install -d $(dir $(DROPSCONF_CONFIG_H)) + $(VERBOSE)$(DROPSCONF_VARDEFS) $(DROPSCONF_TOOL_OLD) + @$(MAKE) $(DROPSCONF_CONFIG_MK) + +$(DROPSCONF_LXDIALOG): + $(VERBOSE)install -d $(@D) + $(VERBOSE)PWD=$(call absfilename,$(L4DIR)/tool/config) $(MAKE) -C $(L4DIR)/tool/config + +clean:: + +cleanall:: + $(VERBOSE)$(RM) $(DROPSCONF_CONFIG) $(DROPSCONF_CONFIG_H) \ + $(DROPSCONF_CONFIG_MK) .menuconfig.log \ + $(DROPSCONF_CONFIG).old +help:: + @echo " config - run the menu-driven configuration tool" + @echo " txtconfig - run the configuration tool" + @echo " oldconfig - (re)create the configuration header based on a prior" + @echo " configuration or default values" + +# special switch not to include DROPSCONF_CONFIG_MK +ifeq ($(DROPSCONF_DONTINC_MK),) +# do not prebuild the config file on "make config" +ifeq ($(filter config oldconfig txtconfig help scrub clean cleanall $(DROPSCONF_CONFIG_MK),$(MAKECMDGOALS)),) +-include $(DROPSCONF_CONFIG_MK) +endif +endif + +# end of DROPSCONF defined +else +config txtconfig oldconfig:: +endif + +.PHONY: config oldconfig txtconfig diff --git a/libdde_linux26/mk/defconfig/config.l4check.amd64 b/libdde_linux26/mk/defconfig/config.l4check.amd64 new file mode 100644 index 00000000..7213f8d2 --- /dev/null +++ b/libdde_linux26/mk/defconfig/config.l4check.amd64 @@ -0,0 +1,82 @@ +# +# Automatically generated by configuration tool: don't edit +# + +# +# Target Architecture +# +BUILD_ARCH_x86=n +BUILD_ARCH_arm=n +BUILD_ARCH_amd64=y +BUILD_ARCH='amd64' +CPU='k8' +BUILD_ABI_l4v2=y +BUILD_ABI_linux=n +BUILD_ABI='l4v2' + +# +# Paths and Directories +# +DROPS_INSTDIR='$(DROPS_STDDIR)' + +# +# Verboseness and Messages +# +DEPEND_VERBOSE_SWITCH=n +DEPEND_VERBOSE='@' +VERBOSE_SWITCH=y +SHOWMESSAGES=y +BID_COLORED_PHASES=y + +# +# Compilers and Tools +# +BIDc_USE_SPECIAL_CC=n +HOST_CC='gcc' +HOST_CXX='g++' +CC='$(SYSTEM_TARGET_amd64)gcc -m64' +CXX='$(SYSTEM_TARGET_amd64)g++ -m64' + +# +# Tools +# +YACC='byacc' +LEX='flex' +CTAGS='ctags' +ETAGS='etags' + +# +# Options +# +HAVE_LDSO=y +INT_CPP_NAME_SWITCH=y +INT_LD_NAME_SWITCH=y +BID_STRIP_PROGS=n +BID_GSTAB_SW=n +BID_GCC_OMIT_FP=n +BID_GENERATE_MAPFILE=n +BID_BUILD_DOC=n + +# +# Advanced +# +USE_UCLIBC=y +USE_DIETLIBC=n +BUILD_LOADER=y +BUILD_LOADER_PICS='libl4util.a libl4util_root.a libsigma0.a libnames.a libloaderif.a libcon.a libl4rm.a libbootmod.a libcon.a libconstream-server.a libdm_generic.a libdm_mem.a libgeneric_ts.a liblogserver.a liblogserver_capsule.a libsemaphore.a libthread.a libslab.a libgeneric_fprov.a libl4env_err.a libl4env.a libroot.a libc_be_l4env_start_stop.a libc_be_minimal_log_io.a libc_be_simple_mem.a libc_be_mmap.a libc_be_mmap_util.a libuclibc_support.a librtc.a libl4env-l4lx.a' +L4_CALL_SYSCALLS=y +L4_ABS_SYSCALLS=y +BID_CPPFLAGS_SYSCALLS='-DCONFIG_L4_CALL_SYSCALLS -DCONFIG_L4_ABS_SYSCALLS' +USE_TASKLIB=n +RELEASE_MODE=n +BID_BUILD_L4DIR_ONLY=n +CONFIG_LABEL='__none__' + +# +# Paths +# +LINUX24_INCDIR='$(OBJ_BASE)/include/linux-24 $(DROPS_STDDIR)/include/linux-24' +LINUX26_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/linux-26-headers $(DROPS_STDDIR)/include/$(ARCH)/l4/linux-26-headers $(OBJ_BASE)/include/l4/linux-26-headers $(DROPS_STDDIR)/include/l4/linux-26-headers' +DDE_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/dde_linux $(DROPS_STDDIR)/include/$(ARCH)/l4/dde_linux' +DDE26_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/dde_linux26 $(DROPS_STDDIR)/include/$(ARCH)/l4/dde_linux26 $(OBJ_BASE)/include/l4/dde_linux26 $(DROPS_STDDIR)/include/l4/dde_linux26' +SDL_INCDIR='$(OBJ_BASE)/include/l4/sdl $(DROPS_STDDIR)/include/l4/sdl' diff --git a/libdde_linux26/mk/defconfig/config.l4check.arm-int-l4v2 b/libdde_linux26/mk/defconfig/config.l4check.arm-int-l4v2 new file mode 100644 index 00000000..c6aba286 --- /dev/null +++ b/libdde_linux26/mk/defconfig/config.l4check.arm-int-l4v2 @@ -0,0 +1,89 @@ +# +# Automatically generated by configuration tool: don't edit +# + +# +# Target Architecture +# +BUILD_ARCH_x86=n +BUILD_ARCH_arm=y +BUILD_ARCH_amd64=n +BUILD_ARCH='arm' +BUILD_ABI_l4v2=y +BUILD_ABI_linux=n +BUILD_ABI='l4v2' +PLATFORM_ARM_integrator=y +PLATFORM_ARM_rv=n +PLATFORM_ARM_custom=n +CPU='int' +ARM_PLATFORM_TYPE='integrator' +RAM_BASE='0x0' +RAM_SIZE_MB=256 + +# +# Paths and Directories +# +DROPS_INSTDIR='$(DROPS_STDDIR)' + +# +# Verboseness and Messages +# +DEPEND_VERBOSE_SWITCH=n +DEPEND_VERBOSE='@' +VERBOSE_SWITCH=y +SHOWMESSAGES=y +BID_COLORED_PHASES=y + +# +# Compilers and Tools +# +BIDc_USE_SPECIAL_CC=n +HOST_CC='gcc' +HOST_CXX='g++' +CC='$(SYSTEM_TARGET_arm)gcc' +CXX='$(SYSTEM_TARGET_arm)g++' + +# +# Tools +# +YACC='byacc' +LEX='flex' +CTAGS='ctags' +ETAGS='etags' + +# +# Options +# +HAVE_LDSO=y +INT_CPP_NAME_SWITCH=y +INT_LD_NAME_SWITCH=y +BID_STRIP_PROGS=n +BID_GSTAB_SW=y +BID_CFLAGS_GSTAB='-gstabs+' +BID_GCC_OMIT_FP=n +BID_GENERATE_MAPFILE=n +BID_BUILD_DOC=n + +# +# Advanced +# +USE_UCLIBC=y +USE_DIETLIBC=n +BUILD_LOADER=y +BUILD_LOADER_PICS='libl4util.a libl4util_root.a libsigma0.a libnames.a libloaderif.a libcon.a libl4rm.a libbootmod.a libcon.a libconstream-server.a libdm_generic.a libdm_mem.a libgeneric_ts.a liblogserver.a liblogserver_capsule.a libsemaphore.a libthread.a libslab.a libgeneric_fprov.a libl4env_err.a libl4env.a libroot.a libc_be_l4env_start_stop.a libc_be_minimal_log_io.a libc_be_simple_mem.a libc_be_mmap.a libc_be_mmap_util.a libuclibc_support.a librtc.a libl4env-l4lx.a' +L4_CALL_SYSCALLS=y +L4_ABS_SYSCALLS=y +BID_CPPFLAGS_SYSCALLS='-DCONFIG_L4_CALL_SYSCALLS -DCONFIG_L4_ABS_SYSCALLS' +USE_TASKLIB=n +RELEASE_MODE=n +BID_BUILD_L4DIR_ONLY=n +CONFIG_LABEL='__none__' + +# +# Paths +# +LINUX24_INCDIR='$(OBJ_BASE)/include/linux-24 $(DROPS_STDDIR)/include/linux-24' +LINUX26_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/linux-26-headers $(DROPS_STDDIR)/include/$(ARCH)/l4/linux-26-headers $(OBJ_BASE)/include/l4/linux-26-headers $(DROPS_STDDIR)/include/l4/linux-26-headers' +DDE_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/dde_linux $(DROPS_STDDIR)/include/$(ARCH)/l4/dde_linux' +DDE26_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/dde_linux26 $(DROPS_STDDIR)/include/$(ARCH)/l4/dde_linux26 $(OBJ_BASE)/include/l4/dde_linux26 $(DROPS_STDDIR)/include/l4/dde_linux26' +SDL_INCDIR='$(OBJ_BASE)/include/l4/sdl $(DROPS_STDDIR)/include/l4/sdl' diff --git a/libdde_linux26/mk/defconfig/config.l4check.x86-586-l4v2 b/libdde_linux26/mk/defconfig/config.l4check.x86-586-l4v2 new file mode 100644 index 00000000..a9196fc3 --- /dev/null +++ b/libdde_linux26/mk/defconfig/config.l4check.x86-586-l4v2 @@ -0,0 +1,83 @@ +# +# Automatically generated by configuration tool: don't edit +# + +# +# Target Architecture +# +BUILD_ARCH_x86=y +BUILD_ARCH_arm=n +BUILD_ARCH_amd64=n +BUILD_ARCH='x86' +CPU='586' +BUILD_ABI_l4v2=y +BUILD_ABI_linux=n +BUILD_ABI='l4v2' + +# +# Paths and Directories +# +DROPS_INSTDIR='$(DROPS_STDDIR)' + +# +# Verboseness and Messages +# +DEPEND_VERBOSE_SWITCH=n +DEPEND_VERBOSE='@' +VERBOSE_SWITCH=y +SHOWMESSAGES=y +BID_COLORED_PHASES=y + +# +# Compilers and Tools +# +BIDc_USE_SPECIAL_CC=n +HOST_CC='gcc' +HOST_CXX='g++' +CC='$(SYSTEM_TARGET_x86)gcc -m32' +CXX='$(SYSTEM_TARGET_x86)g++ -m32' + +# +# Tools +# +YACC='byacc' +LEX='flex' +CTAGS='ctags' +ETAGS='etags' + +# +# Options +# +HAVE_LDSO=y +INT_CPP_NAME_SWITCH=y +INT_LD_NAME_SWITCH=y +BID_STRIP_PROGS=n +BID_GSTAB_SW=y +BID_CFLAGS_GSTAB='-gstabs+' +BID_GCC_OMIT_FP=n +BID_GENERATE_MAPFILE=n +BID_BUILD_DOC=y + +# +# Advanced +# +USE_UCLIBC=y +USE_DIETLIBC=n +BUILD_LOADER=y +BUILD_LOADER_PICS='libl4util.a libl4util_root.a libsigma0.a libnames.a libloaderif.a libcon.a libl4rm.a libbootmod.a libcon.a libconstream-server.a libdm_generic.a libdm_mem.a libgeneric_ts.a liblogserver.a liblogserver_capsule.a libsemaphore.a libthread.a libslab.a libgeneric_fprov.a libl4env_err.a libl4env.a libroot.a libc_be_l4env_start_stop.a libc_be_minimal_log_io.a libc_be_simple_mem.a libc_be_mmap.a libc_be_mmap_util.a libuclibc_support.a librtc.a libl4env-l4lx.a' +L4_CALL_SYSCALLS=y +L4_ABS_SYSCALLS=y +BID_CPPFLAGS_SYSCALLS='-DCONFIG_L4_CALL_SYSCALLS -DCONFIG_L4_ABS_SYSCALLS' +USE_TASKLIB=n +RELEASE_MODE=n +BID_BUILD_L4DIR_ONLY=n +CONFIG_LABEL='__none__' + +# +# Paths +# +LINUX24_INCDIR='$(OBJ_BASE)/include/linux-24 $(DROPS_STDDIR)/include/linux-24' +LINUX26_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/linux-26-headers $(DROPS_STDDIR)/include/$(ARCH)/l4/linux-26-headers $(OBJ_BASE)/include/l4/linux-26-headers $(DROPS_STDDIR)/include/l4/linux-26-headers' +DDE_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/dde_linux $(DROPS_STDDIR)/include/$(ARCH)/l4/dde_linux' +DDE26_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/dde_linux26 $(DROPS_STDDIR)/include/$(ARCH)/l4/dde_linux26 $(OBJ_BASE)/include/l4/dde_linux26 $(DROPS_STDDIR)/include/l4/dde_linux26' +SDL_INCDIR='$(OBJ_BASE)/include/l4/sdl $(DROPS_STDDIR)/include/l4/sdl' diff --git a/libdde_linux26/mk/defconfig/config.x86 b/libdde_linux26/mk/defconfig/config.x86 new file mode 100644 index 00000000..a9196fc3 --- /dev/null +++ b/libdde_linux26/mk/defconfig/config.x86 @@ -0,0 +1,83 @@ +# +# Automatically generated by configuration tool: don't edit +# + +# +# Target Architecture +# +BUILD_ARCH_x86=y +BUILD_ARCH_arm=n +BUILD_ARCH_amd64=n +BUILD_ARCH='x86' +CPU='586' +BUILD_ABI_l4v2=y +BUILD_ABI_linux=n +BUILD_ABI='l4v2' + +# +# Paths and Directories +# +DROPS_INSTDIR='$(DROPS_STDDIR)' + +# +# Verboseness and Messages +# +DEPEND_VERBOSE_SWITCH=n +DEPEND_VERBOSE='@' +VERBOSE_SWITCH=y +SHOWMESSAGES=y +BID_COLORED_PHASES=y + +# +# Compilers and Tools +# +BIDc_USE_SPECIAL_CC=n +HOST_CC='gcc' +HOST_CXX='g++' +CC='$(SYSTEM_TARGET_x86)gcc -m32' +CXX='$(SYSTEM_TARGET_x86)g++ -m32' + +# +# Tools +# +YACC='byacc' +LEX='flex' +CTAGS='ctags' +ETAGS='etags' + +# +# Options +# +HAVE_LDSO=y +INT_CPP_NAME_SWITCH=y +INT_LD_NAME_SWITCH=y +BID_STRIP_PROGS=n +BID_GSTAB_SW=y +BID_CFLAGS_GSTAB='-gstabs+' +BID_GCC_OMIT_FP=n +BID_GENERATE_MAPFILE=n +BID_BUILD_DOC=y + +# +# Advanced +# +USE_UCLIBC=y +USE_DIETLIBC=n +BUILD_LOADER=y +BUILD_LOADER_PICS='libl4util.a libl4util_root.a libsigma0.a libnames.a libloaderif.a libcon.a libl4rm.a libbootmod.a libcon.a libconstream-server.a libdm_generic.a libdm_mem.a libgeneric_ts.a liblogserver.a liblogserver_capsule.a libsemaphore.a libthread.a libslab.a libgeneric_fprov.a libl4env_err.a libl4env.a libroot.a libc_be_l4env_start_stop.a libc_be_minimal_log_io.a libc_be_simple_mem.a libc_be_mmap.a libc_be_mmap_util.a libuclibc_support.a librtc.a libl4env-l4lx.a' +L4_CALL_SYSCALLS=y +L4_ABS_SYSCALLS=y +BID_CPPFLAGS_SYSCALLS='-DCONFIG_L4_CALL_SYSCALLS -DCONFIG_L4_ABS_SYSCALLS' +USE_TASKLIB=n +RELEASE_MODE=n +BID_BUILD_L4DIR_ONLY=n +CONFIG_LABEL='__none__' + +# +# Paths +# +LINUX24_INCDIR='$(OBJ_BASE)/include/linux-24 $(DROPS_STDDIR)/include/linux-24' +LINUX26_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/linux-26-headers $(DROPS_STDDIR)/include/$(ARCH)/l4/linux-26-headers $(OBJ_BASE)/include/l4/linux-26-headers $(DROPS_STDDIR)/include/l4/linux-26-headers' +DDE_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/dde_linux $(DROPS_STDDIR)/include/$(ARCH)/l4/dde_linux' +DDE26_INCDIR='$(OBJ_BASE)/include/$(ARCH)/l4/dde_linux26 $(DROPS_STDDIR)/include/$(ARCH)/l4/dde_linux26 $(OBJ_BASE)/include/l4/dde_linux26 $(DROPS_STDDIR)/include/l4/dde_linux26' +SDL_INCDIR='$(OBJ_BASE)/include/l4/sdl $(DROPS_STDDIR)/include/l4/sdl' diff --git a/libdde_linux26/mk/doc.mk b/libdde_linux26/mk/doc.mk new file mode 100644 index 00000000..2e102e3a --- /dev/null +++ b/libdde_linux26/mk/doc.mk @@ -0,0 +1,301 @@ +# -*- Makefile -*- +# +# DROPS (Dresden Realtime OPerating System) Component +# +# Makefile-Template for doc directories +# +# install.inc is used, see there for further documentation + +ifeq ($(origin _L4DIR_MK_DOC_MK),undefined) +_L4DIR_MK_DOC_MK=y + +ROLE = doc.mk + +include $(L4DIR)/mk/Makeconf +$(GENERAL_D_LO): $(L4DIR)/mk/doc.mk + +ifeq ($(IN_OBJ_DIR),) +################################################################## +# +# Empty IN_OBJ_DIR means we are in the source directory and have +# to first generate a Makefile in the build-dir. +# +################################################################## + +all install clean cleanall help:: $(OBJ_DIR)/Makefile.build + $(VERBOSE)PWD=$(OBJ_DIR) $(MAKE) -C $(OBJ_DIR) O=$(OBJ_BASE) -f Makefile.build $@ + + +$(OBJ_DIR)/Makefile.build: $(SRC_DIR)/Makefile + $(VERBOSE)install -d $(dir $@) + $(VERBOSE)echo 'IN_OBJ_DIR=1' > $@ + $(VERBOSE)echo 'L4DIR=$(L4DIR_ABS)' >> $@ + $(VERBOSE)echo 'SRC_DIR=$(SRC_DIR)' >> $@ + $(VERBOSE)echo 'OBJ_BASE=$(OBJ_BASE)' >> $@ + $(VERBOSE)echo 'PKGDIR_ABS=$(PKGDIR_ABS)' >> $@ + $(VERBOSE)echo 'vpath %.fig $(SRC_DIR)' >> $@ + $(VERBOSE)echo 'vpath %.tex $(SRC_DIR)' >> $@ + $(VERBOSE)echo 'include $(SRC_DIR)/Makefile' >> $@ + +else +################################################################### +# +# We are in the build directory and can process the documentation +# +################################################################### + +# default is to install all targets +INSTALL_TARGET_MASK ?= % + +ifneq ($(TARGET),) +# if no SRC_DOX is given, but TARGET, extract it from TARGET +ifeq ($(origin SRC_DOX),undefined) +SRC_DOX := $(filter $(addsuffix .cfg, $(TARGET)),$(wildcard *.cfg)) +ifneq ($(SRC_DOX),) +$(error SRC_DOX is undefined, but TARGET is defined. This is invalid since 04/23/2003) +endif +endif +# the same for SRC_TEX +ifeq ($(origin SRC_TEX),undefined) +SRC_TEX := $(filter $(TARGET:.ps=.tex),$(wildcard *.tex)) \ + $(filter $(TARGET:.pdf=.tex),$(wildcard *.tex)) + $(filter $(TARGET:.dvi=.tex),$(wildcard *.tex)) +ifneq ($(SRC_TEX),) +$(error SRC_TEX is undefined, but TARGET is defined. This is invalid since 04/23/2003) +endif +endif +endif + +TARGET_DOX = $(SRC_DOX:.cfg=) $(SRC_DOX_REF:.cfg=) \ + $(SRC_DOX_GUIDE:.cfg=) $(SRC_DOX_INT:.cfg=) +INSTALL_TARGET_DOX ?= $(filter $(INSTALL_TARGET_MASK), $(TARGET_DOX)) +TARGET_TEX ?= $(SRC_TEX:.tex=.ps) $(SRC_TEX:.tex=.pdf) +DEPS += $(foreach x,$(SRC_TEX:.tex=.dvi),$(dir $x).$(notdir $x).d) + +# if no TARGET is given, generate it from all types of targets +TARGET ?= $(TARGET_DOX) $(TARGET_TEX) +DEPS += $(foreach file,$(TARGET),$(dir $(file)).$(notdir $(file)).d) + +all:: $(TARGET) +$(TARGET): $(OBJ_DIR)/.general.d + +#################################################################### +# +# Doxygen specific +# +#################################################################### +DOXY_FLAGS += $(DOXY_FLAGS_$@) + +OUTPUTDIR = $(shell perl -n -e '/^\s*OUTPUT_DIRECTORY\s*=\s*(\S+)/ && print "$$1\n"' $(1)) + +# we refer to %/html sometimes. However, make fails on a rule of the form +# "% %/html:%.cfg", thus the workaround (others than static-pattern-rules +# won't work) +$(addprefix $(OBJ_DIR)/,$(addsuffix /html,$(TARGET_DOX))):$(OBJ_DIR)/%/html:$(OBJ_DIR)/% + +# We can give an internal rule for doxygen, as the directory specified +# in the config-file should be the name of the config file with the +# .cfg removed. +$(OBJ_DIR)/% $(OBJ_DIR)/%/html:$(SRC_DIR)/%.cfg + #generate the flags-file + $(VERBOSE)$(MKDIR) $@ + $(VERBOSE)$(ECHO) '@INCLUDE=$(notdir $<);$(DOXY_FLAGS);OUTPUT_DIRECTORY=$(OBJ_DIR)/$(call OUTPUTDIR,$<)' | $(TR) \; \\n >$@.flags + $(VERBOSE)cd $(SRC_DIR) && $(call MAKEDEP,doxygen) OBJ_DIR=$(OBJ_DIR) doxygen $@.flags + $(VERBOSE)( [ -r $@/latex/Makefile ] && \ + echo | PWD=$@/latex $(MAKE) -C $@/latex ) || true + $(VERBOSE)if [ -d $@ ] ; then touch $@ ; fi + +# Installation rules follow +# +# define LOCAL_INSTALLDIR prior to including install.inc, where the install- +# rules are defined. Same for INSTALLDIR. +INSTALLDIR_HTML ?= $(DROPS_STDDIR)/doc/html +INSTALLFILE_HTML ?= $(CP) -pR $(1) $(2) +INSTALLDIR_HTML_LOCAL ?= $(OBJ_BASE)/doc/html +INSTALLFILE_HTML_LOCAL ?= for f in $(wildcard $(call absfilename,$(1))); do $(LN) -sf $$f $(2); done + +INSTALLDIR = $(INSTALLDIR_HTML) +INSTALLFILE = $(INSTALLFILE_HTML) +INSTALLDIR_LOCAL = $(INSTALLDIR_HTML_LOCAL) +INSTALLFILE_LOCAL = $(INSTALLFILE_HTML_LOCAL) + +all:: $(TARGET) \ + $(addprefix $(INSTALLDIR_LOCAL)/, $(addsuffix .title, $(INSTALL_TARGET_DOX))) + +$(OBJ_DIR)/$(SRC_DOX_REF:.cfg=.title): BID_DOC_DOXTYPE=ref +$(OBJ_DIR)/$(SRC_DOX_GUIDE:.cfg=.title): BID_DOC_DOXTYPE=guide +$(OBJ_DIR)/$(SRC_DOX_INT:.cfg=.title): BID_DOC_DOXTYPE=int + +# first line: type +# second line: title that will appear at the generated index page +$(OBJ_DIR)/%.title:$(SRC_DIR)/%.cfg $(OBJ_DIR)/.general.d + $(VERBOSE)$(ECHO) $(BID_DOC_DOXTYPE)>$@ + $(VERBOSE)MAKEFLAGS= $(MAKE) -s -f $(L4DIR)/mk/makehelpers.inc -f $< \ + BID_print VAR=PROJECT_NAME >>$@ + +# Install the title file locally +# The installed title file depends on the installed doku for message reasons +$(foreach f,$(INSTALL_TARGET_DOX),$(INSTALLDIR_LOCAL)/$(f).title):$(INSTALLDIR_LOCAL)/%.title:$(OBJ_DIR)/%.title $(INSTALLDIR_LOCAL)/% + $(VERBOSE)$(call INSTALLFILE_LOCAL,$<,$@) + @$(call UPDATE_HTML_MESSAGE,$(INSTALLDIR_LOCAL)) + +# Install the docu locally, the title file will depend on +$(foreach f,$(INSTALL_TARGET_DOX),$(INSTALLDIR_LOCAL)/$(f)):$(INSTALLDIR_LOCAL)/%:$(OBJ_DIR)/% $(OBJ_DIR)/%/html + @$(INSTALL_DOC_LOCAL_MESSAGE) + $(VERBOSE)$(INSTALL) -d $@ + $(VERBOSE)$(call INSTALLFILE_LOCAL,$</html/*,$@) + +# Install the title file globally +# The installed title file depends on the installed doku for message reasons +$(foreach f,$(INSTALL_TARGET_DOX),$(INSTALLDIR)/$(f).title):$(INSTALLDIR)/%.title:$(OBJ_DIR)/%.title $(INSTALLDIR)/% + $(VERBOSE)$(call INSTALLFILE,$<,$@) + @$(call UPDATE_HTML_MESSAGE,$(INSTALLDIR)) + +# Install the docu globally, the title file will depend on +$(foreach f,$(INSTALL_TARGET_DOX),$(INSTALLDIR)/$(f)):$(INSTALLDIR)/%:$(OBJ_DIR)/% $(OBJ_DIR)/%/html + @$(INSTALL_DOC_MESSAGE) + $(if $(INSTALLFILE),$(VERBOSE)$(INSTALL) -d $@) + $(VERBOSE)$(call INSTALLFILE,$</html/*,$@) + +install:: $(addprefix $(INSTALLDIR)/,$(addsuffix .title,$(INSTALL_TARGET_DOX))) +.PHONY: $(addprefix $(INSTALLDIR)/,$(INSTALL_TARGET_DOX) \ + $(addsuffix .title,$(INSTALL_TARGET_DOX))) + + +################################################################# +# +# Latex specific +# +################################################################# + +FIG2EPS_PROG ?= fig2dev -L eps +FIG2PDF_PROG ?= fig2dev -L pdf +FIG2PNG_PROG ?= fig2dev -L png + +$(SRC_TEX:.tex=.dvi) $(TARGET): $(SRC_FIG:.fig=.pdf) $(SRC_FIG:.fig=.png) $(SRC_FIG:.fig=.eps) + +%.eps: %.fig $(OBJ_DIR)/.general.d + @$(GEN_MESSAGE) + $(VERBOSE)$(FIG2EPS_PROG) $< $@ + +%.pdf: %.fig $(OBJ_DIR)/.general.d + @$(GEN_MESSAGE) + $(VERBOSE)$(FIG2PDF_PROG) $< $@ + +%.png: %.fig $(OBJ_DIR)/.general.d + @$(GEN_MESSAGE) + $(VERBOSE)$(FIG2PNG_PROG) $< $@ + +%.ps: %.dvi $(OBJ_DIR)/.general.d + @$(GEN_MESSAGE) + $(VERBOSE)$(call MAKEDEP,dvips) dvips -o $@ $< + $(VERBOSE)$(VIEWERREFRESH_PS) + +%.pdf: %.tex $(OBJ_DIR)/.general.d + @$(GEN_MESSAGE) + $(VERBOSE)$(PDFLATEX) $< || \ + (($(GREP) 'TeX capacity exceeded' $*.log && \ + echo -e "\n\033[31mIncrease pool_size to 200000 in" \ + "/etc/texmf/texmf.cnf!\033[m\n" && false) || false) + $(VERBOSE)$(GREP) '\citation' $*.aux && \ + bibtex $* || true + $(VERBOSE)(export size=1; touch $@; \ + until [ $$size -eq `ls -o $@ | awk '{print $$4}'` ]; do\ + export size=`ls -o $@ | awk '{print $$4}'` ;\ + $(PDFLATEX) $< ;\ + done) +# one more time, just to be sure ... + $(VERBOSE)$(PDFLATEX) $< + +%.dvi: %.tex $(OBJ_DIR)/.general.d + @$(GEN_MESSAGE) + $(VERBOSE)$(call MAKEDEP,$(LATEX)) $(LATEX) $< + $(VERBOSE)if grep -q '\indexentry' $*.idx; then makeindex $*; fi + $(VERBOSE)if grep -q '\citation' $*.aux; then bibtex $*; fi + # Do we really need to call latex unconditionally again? Isn't it + # sufficient to check the logfile for the "rerun" text? + $(VERBOSE)$(LATEX) $< + $(VERBOSE)latex_count=5 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' $*.log &&\ + [ $$latex_count -gt 0 ] ; do \ + $(LATEX) $< \ + let latex_count=$$latex_count-1 ;\ + done + $(VERBOSE)$(VIEWERREFRESH_DVI) + +SHOWTEX ?= $(firstword $(SRC_TEX)) +SHOWDVI ?= $(SHOWTEX:.tex=.dvi) +SHOWPS ?= $(SHOWTEX:.tex=.ps) +SHOWPDF ?= $(SHOWTEX:.tex=.pdf) + +VIEWER_DVI ?= xdvi +VIEWER_PS ?= gv +VIEWER_PDF ?= xpdf +VIEWERREFRESH_DVI ?= killall -USR1 xdvi xdvi.bin xdvi.real || true +VIEWERREFRESH_PS ?= killall -HUP $(VIEWER_PS) || true + +dvi: $(SHOWDVI) +show showdvi: dvi + $(VERBOSE)$(VIEWER_DVI) $(SHOWDVI) & + +ps: $(SHOWPS) +showps: ps + $(VERBOSE)$(VIEWER_PS) $(SHOWPS) & + +pdf: $(SHOWPDF) +showpdf: pdf + $(VERBOSE)$(VIEWER_PDF) $(SHOWPDF) & + +clean:: + $(VERBOSE)$(RM) $(addprefix $(OBJ_DIR)/, \ + $(addsuffix .title,$(TARGET_DOX))) + $(VERBOSE)$(RM) $(addprefix $(OBJ_DIR)/, \ + $(addsuffix .flags,$(TARGET_DOX))) + $(VERBOSE)$(RM) $(wildcard $(addprefix $(OBJ_DIR)/, $(foreach ext, \ + aux bbl blg dvi idx ilg ind log lod ltf toc out, \ + $(SRC_TEX:.tex=.$(ext))) texput.log )) + +cleanall:: clean + $(VERBOSE)$(RM) -r $(wildcard $(addprefix $(OBJ_DIR)/, \ + $(TARGET)) $(wildcard .*.d)) + $(VERBOSE)$(RM) $(wildcard $(addprefix $(OBJ_DIR)/, \ + $(SRC_TEX:.tex=.ps) $(SRC_TEX:.tex=.pdf))) + $(VERBOSE)$(RM) $(wildcard $(addprefix $(OBJ_DIR)/, \ + $(SRC_FIG:.fig=.eps) $(SRC_FIG:.fig=.pdf) $(SRC_FIG:.fig=.png))) + $(VERBOSE)$(RM) $(wildcard $(addprefix $(OBJ_DIR)/, \ + Makefile Makefile.build)) + +.PHONY: all clean cleanall config help install oldconfig txtconfig +.PHONY: ps pdf dvi showps showpdf showdvi show + +help:: + @echo "Specify a target:" + @echo "all - generate documentation and install locally" +ifneq (,$(INSTALL_TARGET_DOX)) + @echo "install - generate documentation and install globally" +endif + @echo "dvi - compile the primary TeX file into dvi" + @echo "showdvi - invoke the dvi viewer on the primary TeX file" + @echo "ps - compile the primary TeX file into ps" + @echo "showps - invoke the ps viewer on the primary TeX file" + @echo "pdf - compile the primary TeX file into pdf" + @echo "showpdf - invoke the pdf viewer on the primary TeX file" + @echo "clean - delete generated intermediate files" + @echo "cleanall - delete all generated files" + @echo "help - this help" + @echo +ifneq (,$(SRC_TEX)) + @echo "Primary TeX file: $(SHOWTEX)" + @echo "Other documentation to be built: $(filter-out $(SHOWPDF) $(SHOWPS) $(SHOWDVI),$(TARGET))" +else +ifneq (,$(TARGET_DOX)) + @echo "Primary Doxygen file: $(addsuffix .cfg, $(TARGET_DOX))" +endif + @echo "Documentation to be built: $(TARGET)" +endif + +-include $(DEPSVAR) + +endif # IN_OBJ_DIR + +endif # _L4DIR_MK_DOC_MK undefined diff --git a/libdde_linux26/mk/export_defs.inc b/libdde_linux26/mk/export_defs.inc new file mode 100644 index 00000000..8fde1316 --- /dev/null +++ b/libdde_linux26/mk/export_defs.inc @@ -0,0 +1,35 @@ +# Makefile snippet to generate l4defs.inc file +# vim:set ft=make: +# + +PKGDIR = . +SYSTEMS = $(BUILD_ARCH)-$(BUILD_ABI) +MODE = l4env + +OBJ_DIR = $(SRC_DIR)/build + +ifneq ($(SYSTEM),) + +# take crt0.o from the install directory +L4_CRT0 = $(patsubst $(L4_BUILDDIR)%, $(DROPS_STDDIR)/%, $(CRT0)) +# use the DICE directory in the install directory +L4_DICEDIR = $(patsubst $(L4DIR)/%, $(DROPS_STDDIR)/%, $(DICE_INCDIR)) +# let LDFLAGS and CFLAGS only contain directories within the install path +L4_LDFLAGS = $(filter-out -L$(L4_BUILDDIR)%, $(patsubst -T$(L4_BUILDDIR)%, -T$(DROPS_STDDIR)/%, $(LDFLAGS))) +L4_CPPFLAGS = $(filter-out -I$(L4_BUILDDIR)%, $(patsubst -I$(DICE_INCDIR), -I$(L4_DICEDIR), $(CPPFLAGS))) + +# the target file +L4DEF_FILE ?= l4defs.inc + +all:: + @echo -e $(EMPHSTART)"Creating $(L4DEF_FILE)"$(EMPHSTOP) + @echo "# Definitions for L4 BID" > $(L4DEF_FILE) + @echo "# --- Automatically created on install, do not modify ---" >> $(L4DEF_FILE) + @echo "L4_CRT0 = $(L4_CRT0)" >> $(L4DEF_FILE) + @echo "L4_LDFLAGS = $(L4_LDFLAGS)" >> $(L4DEF_FILE) + @echo "L4_CPPFLAGS = $(L4_CPPFLAGS)" >> $(L4DEF_FILE) +else +all:: +endif + +include $(L4DIR)/mk/prog.mk diff --git a/libdde_linux26/mk/idl.mk b/libdde_linux26/mk/idl.mk new file mode 100644 index 00000000..1301dc5b --- /dev/null +++ b/libdde_linux26/mk/idl.mk @@ -0,0 +1,206 @@ +# -*- Makefile -*- +# +# DROPS (Dresden Realtime OPerating System) Component +# +# Makefile-Template for idl directories +# +# $Id: idl.mk 240 2007-11-27 03:55:44Z l4check $ +# +# $Author: l4check $ +# +# install.inc is used, see there for further documentation +# - from install.inc, we use the feature to install files +# to the local install directory on 'all' target. +# Therefore, we set INSTALLDIR_LOCAL and INSTALLFILE_LOCAL. +# Note that we changed INSTALLDIR_IDL_LOCAL AND INSTALLDIR_IDL +# binary.inc is used, see there for further documentation + +ifeq ($(origin _L4DIR_MK_IDL_MK),undefined) +_L4DIR_MK_IDL_MK=y + +ROLE = idl.mk + +DICE_REQ := --require="3.2.0" + +# define LOCAL_INSTALLDIR prior to including install.inc, where the install- +# rules are defined. Same for INSTALLDIR. +INSTALLDIR_IDL ?= $(DROPS_STDDIR)/include/$(ARCH)/$(L4API)/$(INSTALL_INC_PREFIX) +INSTALLDIR_IDL_LOCAL ?= $(OBJ_BASE)/include/$(ARCH)/$(L4API)/$(INSTALL_INC_PREFIX) +INSTALLFILE_IDL ?= $(INSTALL) -m 644 $(1) $(2) +INSTALLFILE_IDL_LOCAL ?= $(LN) -sf $(call absfilename,$(1)) $(2) + +INSTALLFILE = $(INSTALLFILE_IDL) +INSTALLDIR = $(INSTALLDIR_IDL) +INSTALLFILE_LOCAL = $(INSTALLFILE_IDL_LOCAL) +INSTALLDIR_LOCAL = $(INSTALLDIR_IDL_LOCAL) + +INSTALL_INC_PREFIX ?= l4/$(PKGNAME) + +# our default MODE is 'l4env' +MODE ?= l4env + +IDL_EXPORT_STUB ?= % +IDL_EXPORT_IDL ?= % + +include $(L4DIR)/mk/Makeconf +include $(L4DIR)/mk/binary.inc +$(GENERAL_D_LOC): $(L4DIR)/mk/idl.mk + +ifneq ($(SYSTEM),) # if we have a system, really build +####################################################### +# +# SYSTEM valid, we are in an OBJ-<xxx> system subdir +# +####################################################### + +IDL_EXPORT_STUB ?= % +IDL_TYPE ?= dice + +# C++ specific rules +IDL_C = c +IDL_H = h +IDL_CPP = $(CC) +ifneq (,$(findstring BmCPP,$(IDL_FLAGS))) +IDL_C = cc +IDL_H = hh +IDL_CPP = $(CXX) +else +ifneq (,$(findstring Bmcpp,$(IDL_FLAGS))) +IDL_C = cc +IDL_H = hh +IDL_CPP = $(CXX) +endif +endif + +IDL_DEP = $(addprefix .,$(addsuffix .d,$(notdir $(IDL)))) +IDL_SKELETON_C = $(IDL:.idl=-server.$(IDL_C)) +IDL_SKELETON_H = $(IDL_SKELETON_C:.$(IDL_C)=.$(IDL_H)) +IDL_STUB_C = $(IDL:.idl=-client.$(IDL_C)) +IDL_STUB_H = $(IDL_STUB_C:.$(IDL_C)=.$(IDL_H)) +IDL_OPCODE_H = $(IDL:.idl=-sys.$(IDL_H)) + +IDL_FILES = $(IDL_SKELETON_C) $(IDL_SKELETON_H) $(IDL_STUB_C) $(IDL_STUB_H) \ + $(IDL_OPCODE_H) + +# Makro that expands to the list of generated files +# arg1 - name of the idl file. Path and extension will be stripped +IDL_FILES_EXPAND = $(addprefix $(notdir $(basename $(1))),-server.$(IDL_C) -server.$(IDL_H) -client.$(IDL_C) -client.$(IDL_H) -sys.$(IDL_H)) + +INSTALL_TARGET = $(patsubst %.idl,%-sys.$(IDL_H), \ + $(filter $(IDL_EXPORT_SKELETON) $(IDL_EXPORT_STUB),$(IDL)))\ + $(patsubst %.idl,%-server.$(IDL_H), \ + $(filter $(IDL_EXPORT_SKELETON),$(IDL))) \ + $(patsubst %.idl,%-client.$(IDL_H), \ + $(filter $(IDL_EXPORT_STUB), $(IDL))) + +all:: $(IDL_FILES) +.DELETE_ON_ERROR: + +# the dependencies for the generated files +DEPS += $(IDL_DEP) + +ifneq (,$(filter-out corba dice, $(IDL_TYPE))) +$(error IDL_TYPE is neither <dice> nor <corba>) +endif + +# the IDL file is found one directory up +vpath %.idl $(SRC_DIR) + +# DICE mode +IDL_FLAGS += $(addprefix -P,$(CPPFLAGS)) +IDL_FLAGS += $(IDL_FLAGS_$(<F)) + +ifeq ($(L4API),l4v2) +IDL_FLAGS += -Bifiasco +endif + +ifeq ($(L4API),l4v4) +IDL_FLAGS += -Biv4 +endif + +ifeq ($(L4API),l4x2) +IDL_FLAGS += -Bix2 +endif + +ifeq ($(L4API),linux) +IDL_FLAGS += -Bisock +endif + +ifeq ($(L4API),l4secv2emu) +IDL_FLAGS += -fforce-c-bindings -P-DL4API_l4v2 +endif + +ifeq ($(ARCH),x86) +IDL_FLAGS += -Bpia32 +endif + +ifeq ($(ARCH),arm) +IDL_FLAGS += -Bparm +endif + +ifeq ($(ARCH),amd64) +IDL_FLAGS += -Bpamd64 +endif + +ifeq ($(IDL_TYPE),corba) +IDL_FLAGS += --x=corba +endif + +# We don't use gendep for generating the dependencies because gendep can only +# catch open() calls from _one_ applications. Here two applications, dice and +# the preprocessor perform open. +%-server.$(IDL_C) %-server.$(IDL_H) %-client.$(IDL_C) %-client.$(IDL_H) %-sys.$(IDL_H): %.idl .general.d + @$(GEN_MESSAGE) + $(VERBOSE)CC="$(IDL_CPP)" $(DICE) $(DICE_REQ) $(IDL_FLAGS) -MD $< + $(VERBOSE)mv $*.d .$(<F).d + $(DEPEND_VERBOSE)$(ECHO) "$(call IDL_FILES_EXPAND,$<): $(DICE) $<" >>.$(<F).d + $(DEPEND_VERBOSE)$(ECHO) "$(DICE) $<:" >>.$(<F).d + + +clean cleanall:: + $(VERBOSE)$(RM) $(wildcard $(addprefix $(INSTALLDIR_LOCAL)/, $(IDL_FILES))) + $(VERBOSE)$(RM) $(wildcard $(IDL_FILES)) + +# include install.inc to define install rules +include $(L4DIR)/mk/install.inc + +else +##################################################### +# +# No SYSTEM defined, we are in the idl directory +# +##################################################### + +# we install the IDL-files specified in IDL_EXPORT_IDL +INSTALL_TARGET = $(filter $(IDL_EXPORT_IDL), $(IDL)) + +# include install.inc to define install rules +include $(L4DIR)/mk/install.inc + +# install idl-files before going down to subdirs +$(foreach arch,$(TARGET_SYSTEMS), $(OBJ_DIR)/OBJ-$(arch)): $(addprefix $(INSTALLDIR_LOCAL)/,$(INSTALL_TARGET)) + +endif # architecture is defined, really build +##################################################### +# +# Common part +# +##################################################### + +-include $(DEPSVAR) +.PHONY: all clean cleanall config help install oldconfig txtconfig + +help:: + @echo " all - generate .c and .h from idl files and install locally" +ifneq ($(SYSTEM),) + @echo " to $(INSTALLDIR_LOCAL)" +endif + @echo " scrub - delete backup and temporary files" + @echo " clean - delete generated source files" + @echo " cleanall - delete all generated, backup and temporary files" + @echo " help - this help" + @echo + @echo " idls are: $(IDL)" + + +endif # _L4DIR_MK_IDL_MK undefined diff --git a/libdde_linux26/mk/include.mk b/libdde_linux26/mk/include.mk new file mode 100644 index 00000000..4725374b --- /dev/null +++ b/libdde_linux26/mk/include.mk @@ -0,0 +1,88 @@ +# -*- Makefile -*- +# +# DROPS (Dresden Realtime OPerating System) Component +# +# Makefile-Template for include directories +# +# $Id: include.mk 240 2007-11-27 03:55:44Z l4check $ +# +# $Author: l4check $ + +# +# supported targets: +# +# all - the default, link the includes into the +# local include dir +# install - install the includes into the global +# include dir +# config - do nothing, may be overwritten +# relink - reinstall locally + + +INSTALLDIR_INC ?= $(DROPS_STDDIR)/include +INSTALLDIR_INC_LOCAL ?= $(OBJ_BASE)/include + +INSTALLDIR = $(INSTALLDIR_INC) +INSTALLDIR_LOCAL = $(INSTALLDIR_INC_LOCAL) + +ifeq ($(origin TARGET),undefined) +# use POSIX -print here +TARGET_CMD = (cd $(INCSRC_DIR); find . -name '*.[ih]' -print) +else +TARGET_CMD = echo $(TARGET) +endif +INSTALL_INC_PREFIX ?= l4/$(PKGNAME) +INCSRC_DIR ?= $(SRC_DIR) + +include $(L4DIR)/mk/Makeconf +$(GENERAL_D_LOC): $(L4DIR)/mk/include.mk +-include $(DEPSVAR) + +do_link = if (readlink($$dst) ne $$src) { \ + if ($$notify eq 1) { \ + $$notify=0; $(if $(VERBOSE),print " ... Updating symlinks\n";,)\ + } \ + system("ln","-sf$(if $(VERBOSE),,v)",$$src,$$dst) && exit 1; \ + } +do_inst = system("install","-$(if $(VERBOSE),,v)m","644",$$src,$$dst) && exit 1; +installscript = perl -e ' \ + chomp($$srcdir="$(INCSRC_DIR)"); \ + $$notify=1; \ + while(<>) { \ + split; while(@_) { \ + $$_=shift @_; s|^\./||; $$src=$$_; \ + if(s|^ARCH-([^/]*)/L4API-([^/]*)/([^ ]*)$$|\1/\2/$(INSTALL_INC_PREFIX)/\3| ||\ + s|^ARCH-([^/]*)/([^ ]*)$$|\1/$(INSTALL_INC_PREFIX)/\2| || \ + s|^L4API-([^/]*)/([^ ]*)$$|\1/$(INSTALL_INC_PREFIX)/\2| || \ + s|^([^ ]*)$$|$(INSTALL_INC_PREFIX)/\1|) { \ + $$src="$$srcdir/$$src" if $$src !~ /^\//; \ + $$dstdir=$$dst="$(if $(1),$(INSTALLDIR_LOCAL),$(INSTALLDIR))/$$_";\ + $$dstdir=~s|/[^/]*$$||; \ + -d $$dstdir || system("install","-$(if $(VERBOSE),,v)d",$$dstdir) && exit 1; \ + $(if $(1),$(do_link),$(do_inst)) \ + } \ + } \ + }' + +headers:: + +all:: headers + @$(TARGET_CMD) | $(call installscript,1) + +install:: + @$(INSTALL_LINK_MESSAGE) + @$(TARGET_CMD) | $(call installscript); + +cleanall:: + $(VERBOSE)$(RM) .general.d + +help:: + @echo " all - install files to $(INSTALLDIR_LOCAL)" + @echo " install - install files to $(INSTALLDIR)" + @echo " scrub - delete backup and temporary files" + @echo " clean - same as scrub" + @echo " cleanall - same as scrub" + @echo " help - this help" + +scrub clean cleanall:: + $(VERBOSE)$(SCRUB) diff --git a/libdde_linux26/mk/install.inc b/libdde_linux26/mk/install.inc new file mode 100644 index 00000000..3cdbecf3 --- /dev/null +++ b/libdde_linux26/mk/install.inc @@ -0,0 +1,66 @@ +# -*- Makefile -*- +# vim:set ft=make: +# +# DROPS (Dresden Realtime OPerating System) Component +# +# Makefile-Include for install-rules +# +# $Id: install.inc 11 2007-02-26 19:08:41Z l4check $ +# +# $Author: l4check $ +# +# This file is useful only when actually building files, thus if +# BUILD_ONE_ARCHITECTURE (see Makeconf) is defined. +# INSTALL_TARGET and INSTALL_TARGET_$(ARCH) contain the targets to be +# installed. If they are both empty, and NOTARGETSTOINSTALL is not set, +# they are set to TARGET and TARGET_$(ARCH). +# +# INSTALLDIR and INSTALLDIR_LOCAL is the dir the files will be installed +# in and must be set prior to including this file. INSTALLDIR is used by the +# target "install" and "INSTALLDIR_LOCAL" by the target "all". +# +# The target "all" is made depending on the installed files in +# INSTALLDIR_LOCAL. "install" on the files in INSTALLDIR. An other +# difference is that "all" results in using the variable +# $(INSTALLFILE_LOCAL) to install the files and "install" in using +# $(INSTALLFILE). This allows the difference between linking and actually +# copying (with stripping for bins). + +ifndef INSTALL_TARGET_$(OSYSTEM) +ifndef NOTARGETSTOINSTALL +INSTALL_TARGET?=$(TARGET) +endif +endif +INSTALL_TARGET += $(INSTALL_TARGET_$(OSYSTEM)) + +all:: $(addprefix $(INSTALLDIR_LOCAL)/,$(INSTALL_TARGET)) +install:: $(addprefix $(INSTALLDIR)/,$(INSTALL_TARGET)) + +# with prog.mk, we copy +ifeq ($(ROLE),prog.mk) +$(foreach f,$(INSTALL_TARGET),$(INSTALLDIR_LOCAL)/$(f)):$(INSTALLDIR_LOCAL)/%:% + @$(INSTALL_LOCAL_MESSAGE) + $(if $(INSTALLFILE_LOCAL),$(VERBOSE)$(INSTALL) -d $(dir $@)) + $(VERBOSE)$(call INSTALLFILE_LOCAL,$<,$@) +else +# with others, we symlink +# we check for each locally installed lib if the symlink is correct +.PHONY: $(addprefix $(INSTALLDIR_LOCAL)/,$(INSTALL_TARGET)) +$(foreach f,$(INSTALL_TARGET),$(INSTALLDIR_LOCAL)/$(f)):$(INSTALLDIR_LOCAL)/%:% + @$(if $(INSTALLFILE_LOCAL),if [ ! $< -ef $@ ] ; then \ + $(if $(INSTALL_LOCAL_MESSAGE),$(INSTALL_LOCAL_MESSAGE);) \ + $(INSTALL) -d $(dir $@); \ + $(call INSTALLFILE_LOCAL,$<,$@); \ + fi) +endif + +$(foreach f,$(INSTALL_TARGET),$(INSTALLDIR)/$(f)):$(INSTALLDIR)/%:% + @$(INSTALL_MESSAGE) + $(if $(INSTALLFILE),$(VERBOSE)$(INSTALL) -d $(dir $@)) + $(VERBOSE)$(call INSTALLFILE,$<,$@) + +# unconditionally install on "make install" +.PHONY: $(addprefix $(INSTALLDIR)/,$(INSTALL_TARGET)) + +.general.d: $(L4DIR)/mk/install.inc + diff --git a/libdde_linux26/mk/lib.mk b/libdde_linux26/mk/lib.mk new file mode 100644 index 00000000..3ae24dbe --- /dev/null +++ b/libdde_linux26/mk/lib.mk @@ -0,0 +1,113 @@ +# -*- Makefile -*- +# +# DROPS (Dresden Realtime OPerating System) Component +# +# Makefile-Template for library directories +# +# $Id: lib.mk 240 2007-11-27 03:55:44Z l4check $ +# +# $Author: l4check $ +# +# install.inc is used, see there for further documentation +# binary.inc is used, see there for further documentation + + +ifeq ($(origin _L4DIR_MK_LIB_MK),undefined) +_L4DIR_MK_LIB_MK=y + +ROLE = lib.mk + +# define INSTALLDIRs prior to including install.inc, where the install- +# rules are defined. Same for INSTALLDIR. +INSTALLDIR_LIB ?= $(DROPS_STDDIR)/lib/$(subst -,/,$(SYSTEM)) +INSTALLDIR_LIB_LOCAL ?= $(OBJ_BASE)/lib/$(subst -,/,$(SYSTEM)) +INSTALLFILE_LIB ?= $(INSTALL) -m 644 $(1) $(2) +INSTALLFILE_LIB_LOCAL ?= $(LN) -sf $(call absfilename,$(1)) $(2) + +INSTALLFILE = $(INSTALLFILE_LIB) +INSTALLDIR = $(INSTALLDIR_LIB) +INSTALLFILE_LOCAL = $(INSTALLFILE_LIB_LOCAL) +INSTALLDIR_LOCAL = $(INSTALLDIR_LIB_LOCAL) + +# our mode +MODE ?= l4env + +# include all Makeconf.locals, define common rules/variables +include $(L4DIR)/mk/Makeconf +include $(L4DIR)/mk/binary.inc +$(GENERAL_D_LOC): $(L4DIR)/mk/lib.mk + +ifneq ($(SYSTEM),) # if we a system, really build + +TARGET_LIB := $(TARGET) $(TARGET_$(OSYSTEM)) +TARGET_SHARED := $(filter %.s.so,$(TARGET_LIB)) +TARGET_STANDARD := $(filter-out %.s.so,$(TARGET_LIB)) +TARGET_PROFILE := $(patsubst %.a,%.pr.a,\ + $(filter $(BUILD_PROFILE),$(TARGET_STANDARD))) +TARGET_PROFILE_SHARED := $(filter %.s.so,$(TARGET_PROFILE)) +TARGET_PIC := $(patsubst %.a,%.p.a,\ + $(filter $(BUILD_PIC),$(TARGET_STANDARD))) +TARGET_PROFILE_PIC := $(patsubst %.a,%.p.a,\ + $(filter $(BUILD_PIC),$(TARGET_PROFILE))) +TARGET += $(TARGET_$(OSYSTEM)) $(TARGET_PIC) +TARGET += $(TARGET_PROFILE) $(TARGET_PROFILE_SHARED) $(TARGET_PROFILE_PIC) + +# define some variables different for lib.mk and prog.mk +LDFLAGS += $(addprefix -L, $(PRIVATE_LIBDIR) $(PRIVATE_LIBDIR_$(OSYSTEM)) $(PRIVATE_LIBDIR_$@) $(PRIVATE_LIBDIR_$@_$(OSYSTEM))) +LDFLAGS += $(addprefix -L, $(L4LIBDIR)) $(LIBCLIBDIR) +LDFLAGS += $(LIBS) $(LDFLAGS_$@) $(LDNOSTDLIB) + +LDSCRIPT = $(call findfile,main_rel.ld,$(L4LIBDIR)) + +# install.inc eventually defines rules for every target +include $(L4DIR)/mk/install.inc + +DEPS += $(foreach file,$(TARGET), $(dir $(file)).$(notdir $(file)).d) + +$(filter-out %.s.so %.o.a %.o.pr.a, $(TARGET)):%.a: $(OBJS) + @$(AR_MESSAGE) + $(VERBOSE)$(RM) $@ + $(VERBOSE)$(AR) crs $@ $(OBJS) + @$(BUILT_MESSAGE) + +# shared lib +$(filter %.s.so, $(TARGET)):%.s.so: $(OBJS) $(CRTP) $(LIBDEPS) + @$(LINK_SHARED_MESSAGE) + $(VERBOSE)$(call MAKEDEP,$(LD)) $(LD) -m $(LD_EMULATION) \ + -o $@ -shared $(addprefix -T,$(LDSCRIPT)) $(CRTP) $(OBJS) $(LDFLAGS) + @$(BUILT_MESSAGE) + +# build an object file (which looks like a lib to a later link-call), which +# is either later included as a whole or not at all (important for static +# constructors) +$(filter %.o.a %.o.pr.a, $(TARGET)):%.a: $(OBJS) $(LIBDEPS) + @$(LINK_PARTIAL_MESSAGE) + $(VERBOSE)$(call MAKEDEP,$(LD)) $(LD) -m $(LD_EMULATION) \ + -o $@ -r $(OBJS) $(LDFLAGS) + @$(BUILT_MESSAGE) + +endif # architecture is defined, really build + +.PHONY: all clean cleanall config help install oldconfig txtconfig +-include $(DEPSVAR) +help:: + @echo " all - compile and install the libraries locally" +ifneq ($(SYSTEM),) + @echo " to $(INSTALLDIR_LOCAL)" +endif + @echo " install - compile and install the libraries globally" +ifneq ($(SYSTEM),) + @echo " to $(INSTALLDIR)" +endif + @echo " scrub - delete backup and temporary files" + @echo " clean - delete generated object files" + @echo " cleanall - delete all generated, backup and temporary files" + @echo " help - this help" + @echo +ifneq ($(SYSTEM),) + @echo " libraries are: $(TARGET)" +else + @echo " build for architectures: $(TARGET_SYSTEMS)" +endif + +endif # _L4DIR_MK_LIB_MK undefined diff --git a/libdde_linux26/mk/makehelpers.inc b/libdde_linux26/mk/makehelpers.inc new file mode 100644 index 00000000..60030cf3 --- /dev/null +++ b/libdde_linux26/mk/makehelpers.inc @@ -0,0 +1,15 @@ +# -*- Makefile -*- +# vim:set ft=make: +# +# DROPS (Dresden Realtime OPerating System) Component +# +# Makefile-include to extract variables from Makefile-compatible files +# +# We use this file to browse doxygen files in the doc.mk rules. + +BID_print: + @echo $($(VAR)) +BID_printm: + @$(foreach v, $(VARS), echo '$(v)=$($(v))';) + +.PHONY: BID_print BID_printm diff --git a/libdde_linux26/mk/modes.inc b/libdde_linux26/mk/modes.inc new file mode 100644 index 00000000..d39d07f6 --- /dev/null +++ b/libdde_linux26/mk/modes.inc @@ -0,0 +1,575 @@ +# -*- Makefile -*- +# vim:et:ts=8:ft=make: +# +# Makefile-Include for defining modes + +# Default memory backend when linking against uClibc. The -u +# switch is necessary since mmap_anon is referenced using a weak symbol. +MALLOC_BACKEND ?= -u mmap_anon -lc_be_simple_mem + +MMAP_BACKEND ?= -lc_be_sigma0_mem + +# Default is uClibc without reentrant functions. If, for example +# two independant threads of the same application call malloc at the same +# time, WANT_THREADSAFE _must_ be defined. +ifneq ("$(WANT_THREADSAFE)","") +UCLIBC_IMPLEMENTATION := -luc_c_r +else +UCLIBC_IMPLEMENTATION := -luc_c +endif + +ROOTLIB = -lroot +ROOTPLIB = -lroot.p + +CRT0_DEFAULT = $(call findfile,crt0.o,$(L4LIBDIR)) +CRTP_DEFAULT = $(call findfile,crt0.s.o,$(L4LIBDIR)) +LDS_DEFAULT = $(call findfile,main_stat.ld,$(L4LIBDIR)) + +ifeq ($(MODE),loader) +LDS_LOADER = $(call findfile,main_dyn.ld,$(L4LIBDIR)) +else +LDS_LOADER = $(LDS_DEFAULT) +endif + +LIBC_INCLUDE = -nostdinc \ + -I$(OBJ_BASE)/include/$(ARCH)/uclibc \ + -I$(OBJ_BASE)/include/uclibc \ + -I$(OBJ_BASE)/include/uclibc++ \ + -I$(DROPS_STDDIR)/include/$(ARCH)/uclibc \ + -I$(DROPS_STDDIR)/include/uclibc \ + -I$(DROPS_STDDIR)/include/uclibc++ \ + $(I_GCCINCDIR) +LIBC_LIB = -luc_c + +############################################################################# +# +# X86 (IA32) +# + +# +# x86_tiny - minimal environment (only l4util, no log, no names) +# +BID_SUPPORTED_x86_tiny = y +LIBCINCDIR_x86_tiny = $(LIBC_INCLUDE) +LIBCLIBDIR_x86_tiny = +LIBCLIBS_x86_tiny = -nostdlib $(GCCLDNOSTDLIB) \ + -luc_c \ + -luc_be_minimal_io \ + -luc_be_l4_start_stop \ + $(MMAP_BACKEND) \ + -luc_c -luclibc_support -ll4util -lsigma0 \ + -luc_c $(GCCLIB) -luc_c -ll4sys +L4LIBS_x86_tiny = -static -lmain -ll4util -ll4sys +CRT0_x86_tiny = $(CRT0_DEFAULT) +CRTN_x86_tiny = +LDSCRIPT_x86_tiny = $(LDS_DEFAULT) + + +# +# x86_sigma0 - minimal environment (util, names, log) +# +BID_SUPPORTED_x86_sigma0 = y +LIBCINCDIR_x86_sigma0 = $(LIBC_INCLUDE) +LIBCLIBDIR_x86_sigma0 = +LIBCLIBS_x86_sigma0 = -nostdlib $(GCCLDNOSTDLIB) \ + -luc_c \ + -luc_be_minimal_io \ + -luc_be_l4_start_stop \ + $(MMAP_BACKEND) \ + -luc_c -luclibc_support \ + -llogserver -lnames -lsigma0 \ + -ll4util_root -ll4util $(ROOTLIB) \ + -luc_c $(GCCLIB) -luc_c -ll4sys +L4LIBS_x86_sigma0 = -static -lmain -lnames \ + -llogserver -ll4util_root -ll4util -ll4sys +CRT0_x86_sigma0 = $(CRT0_DEFAULT) +CRTN_x86_sigma0 = +LDSCRIPT_x86_sigma0 = $(LDS_DEFAULT) + +# +# all_libc - compiles C libs +# +BID_SUPPORTED_all_libc = y +LIBCINCDIR_all_libc = $(LIBC_INCLUDE) +LIBCLIBDIR_all_libc = +LIBCLIBS_all_libc = -nostdlib $(GCCLDNOSTDLIB) $(LIBC_LIB) \ + $(LIBCBACKEND_LIB) $(GCCLIB) $(LIBC_LIB) +L4LIBS_all_libc = +CRT0_all_libc = $(CRT0_DEFAULT) +CRTN_all_libc = +LDSCRIPT_all_libc = $(LDS_DEFAULT) + + +# +# all_linux - compilation without anything, but unlike host mode still +# (potentially) cross compiled +# +BID_SUPPORTED_all_linux = y +LIBCINCDIR_all_linux = +LIBCLIBDIR_all_linux = +LIBCLIBS_all_linux = +L4LIBS_all_linux = +CRT0_all_linux = +CRTN_all_linux = +LDSCRIPT_all_linux = + + +# +# all_host - compilation for the host system +# +BID_SUPPORTED_all_host = y +LIBCINCDIR_all_host = +LIBCLIBDIR_all_host = +LIBCLIBS_all_host = +L4LIBS_all_host = +CRT0_all_host = +CRTN_all_host = +LDSCRIPT_all_host = + +# +# x86_l4linux - L4Env functions for L4Linux programs +# +BID_SUPPORTED_x86_l4linux = y +LIBCINCDIR_x86_l4linux = $(I_GCCINCDIR) +LIBCLIBDIR_x86_l4linux = -L$(DROPS_STDDIR)/lib +LIBCLIBS_x86_l4linux = -ldm_generic -ldm_mem -lnames \ + $(ROOTLIB) -lloaderif -ll4env \ + -ll4env_err -lslab \ + -llogserver_capsule -ll4util -ll4sys-l4x +CRT0_x86_l4linux = +CRTN_x86_l4linux = +LDSCRIPT_x86_l4linux = + + +# +# x86_l4linux_kern - build L4Linux kernel modules +# +BID_SUPPORTED_x86_l4linux_kern = y +LIBCINCDIR_x86_l4linux_kern = -nostdinc -I$(L4LINUX22_DIR)/include \ + -D__KERNEL__ -DLINUX_ON_L4 $(I_GCCINCDIR) +LIBCLIBDIR_x86_l4linux_kern = +LIBCLIBS_x86_l4linux_kern = +CRT0_x86_l4linux_kern = +CRTN_x86_l4linux_kern = +LDSCRIPT_x86_l4linux_kern = + + +# +# x86_l4env -- l4env, the default +# +BID_SUPPORTED_x86_l4env = y +LIBCINCDIR_x86_l4env = $(LIBC_INCLUDE) +LIBCLIBDIR_x86_l4env = +L4LIBS_x86_l4env = -static -lgeneric_ts -ll4env \ + -ll4rm -ldm_generic -ldm_mem -lthread \ + -lsemaphore -llogserver_capsule \ + -lnames -ll4util_root -ll4util -lsigma0 \ + $(ROOTLIB) -ll4env -ll4env_err -ll4rm \ + -ldm_generic -ldm_mem -lthread -lslab \ + -ll4sys +LIBCLIBS_x86_l4env = -nostdlib $(GCCLDNOSTDLIB) \ + $(UCLIBC_IMPLEMENTATION) \ + -luclibc_support \ + $(MALLOC_BACKEND) \ + -lc_be_mmap \ + -lc_be_mmap_util \ + -lc_be_l4env_start_stop \ + -lc_be_minimal_log_io \ + -luc_be_simple_sleep \ + -ll4env -llogserver_capsule -ll4rm \ + -ldm_generic -ldm_mem -lthread \ + -lgeneric_ts $(UCLIBC_IMPLEMENTATION) \ + $(GCCLIB) $(UCLIBC_IMPLEMENTATION) \ + -ll4sys +CRT0_x86_l4env = $(CRT0_DEFAULT) +CRTN_x86_l4env = +LDSCRIPT_x86_l4env = $(LDS_DEFAULT) + +# +# x86_l4env_minimal - uClibc with just write(1, ...) as io backend +# +BID_SUPPORTED_x86_l4env_minimal = y +LIBCINCDIR_x86_l4env_minimal = $(LIBC_INCLUDE) +LIBCLIBDIR_x86_l4env_minimal = +LIBCLIBS_x86_l4env_minimal = -nostdlib $(GCCLDNOSTDLIB) \ + $(MALLOC_BACKEND) \ + $(UCLIBC_IMPLEMENTATION) \ + -lc_be_l4env_start_stop -lgeneric_ts \ + -lc_be_minimal_log_io -lc_be_mmap_util \ + $(MALLOC_BACKEND) -lc_be_mmap \ + -lc_be_mmap_util \ + -ll4rm -ldm_mem -ldm_generic -lthread \ + -lsemaphore -ll4env -ll4env_err -lslab \ + -llogserver_capsule -ll4rm -lthread \ + -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(UCLIBC_IMPLEMENTATION) $(GCCLIB) \ + $(UCLIBC_IMPLEMENTATION) \ + -lc_be_l4env_start_stop -luclibc_support \ + -ll4sys +L4LIBS_x86_l4env_minimal = -static -ll4rm -ldm_mem \ + -ldm_generic -lthread -lsemaphore -ll4env \ + -ll4env_err -lslab -llogserver_capsule \ + -ll4rm -lthread -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(ROOTLIB) -ll4sys +CRT0_x86_l4env_minimal = $(CRT0_DEFAULT) +CRTN_x86_l4env_minimal = +LDSCRIPT_x86_l4env_minimal = $(LDS_DEFAULT) + +# +# x86_l4env_base - uclibc with backends: +# basic_io, io, basic_mmap, mmap_util, syslog, simple_sleep, time, +# file_table +# +BID_SUPPORTED_x86_l4env_base = y +LIBCINCDIR_x86_l4env_base = $(LIBC_INCLUDE) +LIBCLIBDIR_x86_l4env_base = +LIBCLIBS_x86_l4env_base = -nostdlib $(GCCLDNOSTDLIB) \ + -u printf -lc_be_io.o $(MALLOC_BACKEND) \ + -lc_be_time -lrtc -ll4rm -ldm_mem \ + -ldm_generic -lthread -lsemaphore -ll4env \ + -ll4env_err -lslab -llogserver_capsule \ + -ll4rm -lthread -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(UCLIBC_IMPLEMENTATION) \ + $(GCCLIB) \ + $(MALLOC_BACKEND) -ll4rm -ldm_mem \ + -ldm_generic -lc_be_time -lc_be_mmap \ + -lc_be_mmap_util -lc_be_l4env_start_stop \ + -lgeneric_ts \ + -lc_be_syslog -lc_be_file-table \ + -luc_be_simple_sleep -ll4vfs_common_io \ + -ll4vfs_basic_io -ll4vfs_connection \ + -ll4vfs_basic_name_server \ + -ll4vfs_name_server \ + -ll4vfs_name_space_provider \ + -ll4vfs_extendable -ll4sys \ + $(UCLIBC_IMPLEMENTATION) +L4LIBS_x86_l4env_base = -static -ll4rm -ldm_mem -ldm_generic \ + -lthread -lsemaphore -ll4env -ll4env_err \ + -lslab -llogserver_capsule -ll4rm \ + -lthread -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(ROOTLIB) -ll4sys +CRT0_x86_l4env_base = $(CRT0_DEFAULT) +CRTN_x86_l4env_base = +LDSCRIPT_x86_l4env_base = $(LDS_DEFAULT) + +# +# x86_loader - applications to be loaded by the L4Env loader. +# Will be merged with l4env_base and become the default mode. +# +BID_SUPPORTED_x86_loader = y +LIBCINCDIR_x86_loader = $(LIBC_INCLUDE) +LIBCLIBDIR_x86_loader = +LIBCLIBS_x86_loader = -nostdlib $(GCCLDNOSTDLIB) \ + -luc_c $(GCCLIB) -luc_c +L4LIBS_x86_loader = -lloader.s -ll4sys +CRT0_x86_loader = $(CRT0_DEFAULT) +CRTN_x86_loader = +LDSCRIPT_x86_loader = $(LDS_LOADER) + + +############################################################################# +# +# ARM +# + +# +# arm_tiny +# +BID_SUPPORTED_arm_tiny = y +LIBCINCDIR_arm_tiny = $(LIBC_INCLUDE) +LIBCLIBDIR_arm_tiny = +LIBCLIBS_arm_tiny = -nostdlib $(GCCLDNOSTDLIB) \ + -lmain -luc_c -luclibc_support \ + -luc_be_l4_start_stop \ + -luc_be_minimal_io \ + $(MMAP_BACKEND) -ll4util \ + -lsigma0 $(GCCLIB) -luc_c +L4LIBS_arm_tiny = -static -lmain -ll4util -ll4sys +CRT0_arm_tiny = $(CRT0_DEFAULT) +CRTN_arm_tiny = +LDSCRIPT_arm_tiny = $(LDS_DEFAULT) + +# +# sigma0 +# +BID_SUPPORTED_arm_sigma0 = y +LIBCINCDIR_arm_sigma0 = $(LIBC_INCLUDE) +LIBCLIBDIR_arm_sigma0 = +LIBCLIBS_arm_sigma0 = -nostdlib $(GCCLDNOSTDLIB) \ + -lmain \ + -luc_c \ + -luclibc_support \ + -luc_be_l4_start_stop \ + -luc_be_minimal_io \ + $(MMAP_BACKEND) \ + -lsigma0 $(GCCLIB) -luc_c +L4LIBS_arm_sigma0 = -static -lmain -llogserver -lnames \ + -ll4util_root -ll4util $(ROOTLIB) -ll4sys +CRT0_arm_sigma0 = $(CRT0_DEFAULT) +CRTN_arm_sigma0 = +LDSCRIPT_arm_sigma0 = $(LDS_DEFAULT) + +# +# arm_l4env_minimal +# +BID_SUPPORTED_arm_l4env_minimal = y +LIBCINCDIR_arm_l4env_minimal = $(LIBC_INCLUDE) +LIBCLIBDIR_arm_l4env_minimal = +LIBCLIBS_arm_l4env_minimal = -nostdlib $(GCCLDNOSTDLIB) \ + $(MALLOC_BACKEND) \ + $(UCLIBC_IMPLEMENTATION) \ + -lc_be_l4env_start_stop -lgeneric_ts \ + -lc_be_minimal_log_io -lc_be_mmap_util \ + $(MALLOC_BACKEND) -lc_be_mmap \ + -lc_be_mmap_util \ + -ll4rm -ldm_mem -ldm_generic -lthread \ + -lsemaphore -ll4env -ll4env_err -lslab \ + -llogserver_capsule -ll4rm -lthread \ + -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(UCLIBC_IMPLEMENTATION) $(GCCLIB) \ + $(UCLIBC_IMPLEMENTATION) \ + -lc_be_l4env_start_stop -luclibc_support \ + -ll4sys +L4LIBS_arm_l4env_minimal = -static -ll4rm -ldm_mem \ + -ldm_generic -lthread -lsemaphore -ll4env \ + -ll4env_err -lslab -llogserver_capsule \ + -ll4rm -lthread -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(ROOTLIB) -ll4sys +CRT0_arm_l4env_minimal = $(CRT0_DEFAULT) +CRTN_arm_l4env_minimal = +LDSCRIPT_arm_l4env_minimal = $(LDS_DEFAULT) + +# +# arm_l4env -- default mode +# +BID_SUPPORTED_arm_l4env = y +LIBCINCDIR_arm_l4env = $(LIBC_INCLUDE) +LIBCLIBDIR_arm_l4env = +L4LIBS_arm_l4env = -static -lgeneric_ts -ll4env \ + -ll4rm -ldm_generic -ldm_mem -lthread \ + -lsemaphore -llogserver_capsule -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(ROOTLIB) -ll4env -ll4env_err \ + -ll4rm -ldm_generic -ldm_mem -lthread \ + -lslab -ll4sys +LIBCLIBS_arm_l4env = -nostdlib $(GCCLDNOSTDLIB) \ + -luc_c -luclibc_support \ + $(MALLOC_BACKEND) \ + -lc_be_mmap -lc_be_mmap_util \ + -luc_be_l4_start_stop \ + -lc_be_minimal_log_io \ + -ll4env -llogserver_capsule -ll4rm \ + -ldm_generic -ldm_mem -lthread \ + -luc_c $(GCCLIB) -luc_c +CRT0_arm_l4env = $(CRT0_DEFAULT) +CRTN_arm_l4env = +LDSCRIPT_arm_l4env = $(LDS_DEFAULT) + +BID_SUPPORTED_arm_l4env_base = y +LIBCINCDIR_arm_l4env_base = $(LIBC_INCLUDE) +LIBCLIBDIR_arm_l4env_base = +LIBCLIBS_arm_l4env_base = -nostdlib $(GCCLDNOSTDLIB) \ + -u printf -lc_be_io.o $(MALLOC_BACKEND) \ + -lc_be_time -lrtc -ll4rm -ldm_mem \ + -ldm_generic -lthread -lsemaphore -ll4env \ + -ll4env_err -lslab -llogserver_capsule \ + -ll4rm -lthread -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(UCLIBC_IMPLEMENTATION) \ + $(GCCLIB) \ + $(MALLOC_BACKEND) -ll4rm -ldm_mem \ + -ldm_generic -lc_be_time -lc_be_mmap \ + -lc_be_mmap_util -lc_be_l4env_start_stop \ + -lgeneric_ts \ + -lc_be_syslog -lc_be_file-table \ + -luc_be_simple_sleep -ll4vfs_common_io \ + -ll4vfs_basic_io -ll4vfs_connection \ + -ll4vfs_basic_name_server \ + -ll4vfs_name_server \ + -ll4vfs_name_space_provider \ + -ll4vfs_extendable -ll4sys \ + $(UCLIBC_IMPLEMENTATION) +L4LIBS_arm_l4env_base = -static -ll4rm -ldm_mem -ldm_generic \ + -lthread -lsemaphore -ll4env -ll4env_err \ + -lslab -llogserver_capsule -ll4rm \ + -lthread -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(ROOTLIB) -ll4sys +CRT0_arm_l4env_base = $(CRT0_DEFAULT) +CRTN_arm_l4env_base = +LDSCRIPT_arm_l4env_base = $(LDS_DEFAULT) + +# +# arm_loader - applications to be loaded by the L4Env loader. +# +BID_SUPPORTED_arm_loader = y +LIBCINCDIR_arm_loader = $(LIBC_INCLUDE) +LIBCLIBDIR_arm_loader = +LIBCLIBS_arm_loader = -nostdlib $(GCCLDNOSTDLIB) \ + -luc_c $(GCCLIB) -luc_c +L4LIBS_arm_loader = -lloader.s -ll4sys +CRT0_arm_loader = $(CRT0_DEFAULT) +CRTN_arm_loader = +LDSCRIPT_arm_loader = $(LDS_LOADER) + +# +# arm_l4linux - L4Env functions for L4Linux programs +# +BID_SUPPORTED_arm_l4linux = y +LIBCINCDIR_arm_l4linux = $(I_GCCINCDIR) +LIBCLIBDIR_arm_l4linux = -L$(DROPS_STDDIR)/lib +LIBCLIBS_arm_l4linux = -ldm_generic -ldm_mem -lnames \ + $(ROOTLIB) -lloaderif -ll4env \ + -ll4env_err -lslab \ + -llogserver_capsule -ll4util -ll4sys-l4x +CRT0_arm_l4linux = +CRTN_arm_l4linux = +LDSCRIPT_arm_l4linux = + + +############################################################################# +# +# AMD64 +# + +# +# amd64_tiny (without names and logserver) +# +BID_SUPPORTED_amd64_tiny = y +LIBCINCDIR_amd64_tiny = $(LIBC_INCLUDE) +LIBCLIBDIR_amd64_tiny = +LIBCLIBS_amd64_tiny = -nostdlib $(GCCLDNOSTDLIB) \ + -luc_c \ + -luc_be_minimal_io \ + -luc_be_l4_start_stop \ + $(MMAP_BACKEND) \ + -luc_c -luclibc_support -ll4util -lsigma0 \ + -luc_c $(GCCLIB) -luc_c -ll4sys +L4LIBS_amd64_tiny = -static -lmain -ll4util -ll4sys +CRT0_amd64_tiny = $(CRT0_DEFAULT) +CRTN_amd64_tiny = +LDSCRIPT_amd64_tiny = $(LDS_DEFAULT) + +# +# amd64_sigma0 - sigma0 mode +# +BID_SUPPORTED_amd64_sigma0 = y +LIBCINCDIR_amd64_sigma0 = $(LIBC_INCLUDE) +LIBCLIBDIR_amd64_sigma0 = +LIBCLIBS_amd64_sigma0 = -nostdlib $(GCCLDNOSTDLIB) \ + -luc_c \ + -luc_be_minimal_io \ + -luc_be_l4_start_stop \ + $(MMAP_BACKEND) \ + -luc_c -luclibc_support \ + -llogserver -lnames -lsigma0 \ + -ll4util_root -ll4util $(ROOTLIB) \ + -luc_c $(GCCLIB) -luc_c -ll4sys +L4LIBS_amd64_sigma0 = -static -lmain -lnames \ + -llogserver -ll4util_root -ll4util -ll4sys +CRT0_amd64_sigma0 = $(CRT0_DEFAULT) +CRTN_amd64_sigma0 = +LDSCRIPT_amd64_sigma0 = $(LDS_DEFAULT) + +# +# amd64_l4env - l4env, the default +# +BID_SUPPORTED_amd64_l4env = y +LIBCINCDIR_amd64_l4env = $(LIBC_INCLUDE) +LIBCLIBDIR_amd64_l4env = +L4LIBS_amd64_l4env = -static -lgeneric_ts -ll4env \ + -ll4rm -ldm_generic -ldm_mem -lthread \ + -lsemaphore -llogserver_capsule \ + -lnames -ll4util_root -ll4util $(ROOTLIB) \ + -ll4env -ll4env_err -ll4rm -ldm_generic \ + -ldm_mem -lthread -lslab -ll4sys +LIBCLIBS_amd64_l4env = -nostdlib $(GCCLDNOSTDLIB) \ + $(UCLIBC_IMPLEMENTATION) \ + -luclibc_support \ + $(MALLOC_BACKEND) \ + -lc_be_mmap \ + -lc_be_mmap_util \ + -lc_be_l4env_start_stop \ + -lc_be_minimal_log_io \ + -luc_be_simple_sleep \ + -ll4env -llogserver_capsule -ll4rm \ + -ldm_generic -ldm_mem -lthread \ + -lgeneric_ts -lsigma0 \ + $(UCLIBC_IMPLEMENTATION) \ + $(GCCLIB) $(UCLIBC_IMPLEMENTATION) \ + -ll4sys +CRT0_amd64_l4env = $(CRT0_DEFAULT) +CRTN_amd64_l4env = +LDSCRIPT_amd64_l4env = $(LDS_DEFAULT) + +BID_SUPPORTED_amd64_l4env_base = y +LIBCINCDIR_amd64_l4env_base = $(LIBC_INCLUDE) +LIBCLIBDIR_amd64_l4env_base = +LIBCLIBS_amd64_l4env_base = -nostdlib $(GCCLDNOSTDLIB) \ + -u printf -lc_be_io.o $(MALLOC_BACKEND) \ + -lc_be_time -lrtc -ll4rm -ldm_mem \ + -ldm_generic -lthread -lsemaphore -ll4env \ + -ll4env_err -lslab -llogserver_capsule \ + -ll4rm -lthread -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(UCLIBC_IMPLEMENTATION) \ + $(GCCLIB) \ + $(MALLOC_BACKEND) -ll4rm -ldm_mem \ + -ldm_generic -lc_be_time -lc_be_mmap \ + -lc_be_mmap_util -lc_be_l4env_start_stop \ + -lgeneric_ts \ + -lc_be_syslog -lc_be_file-table \ + -luc_be_simple_sleep -ll4vfs_common_io \ + -ll4vfs_basic_io -ll4vfs_connection \ + -ll4vfs_basic_name_server \ + -ll4vfs_name_server \ + -ll4vfs_name_space_provider \ + -ll4vfs_extendable -ll4sys \ + $(UCLIBC_IMPLEMENTATION) +L4LIBS_amd64_l4env_base = -static -ll4rm -ldm_mem -ldm_generic \ + -lthread -lsemaphore -ll4env -ll4env_err \ + -lslab -llogserver_capsule -ll4rm \ + -lthread -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(ROOTLIB) -ll4sys +CRT0_amd64_l4env_base = $(CRT0_DEFAULT) +CRTN_amd64_l4env_base = +LDSCRIPT_amd64_l4env_base = $(LDS_DEFAULT) + +# +# amd64_l4env_minimal - libc with just write(1, ...) as io backend +# +BID_SUPPORTED_amd64_l4env_minimal = y +LIBCINCDIR_amd64_l4env_minimal = $(LIBC_INCLUDE) +LIBCLIBDIR_amd64_l4env_minimal = +LIBCLIBS_amd64_l4env_minimal = -nostdlib $(GCCLDNOSTDLIB) \ + $(MALLOC_BACKEND) \ + $(UCLIBC_IMPLEMENTATION) \ + -lc_be_l4env_start_stop -lgeneric_ts \ + -lc_be_minimal_log_io -lc_be_mmap_util \ + $(MALLOC_BACKEND) -lc_be_mmap \ + -lc_be_mmap_util \ + -ll4rm -ldm_mem -ldm_generic -lthread \ + -lsemaphore -ll4env -ll4env_err -lslab \ + -llogserver_capsule -ll4rm -lthread \ + -ldm_generic -lnames \ + -ll4util_root -ll4util -lsigma0 \ + $(UCLIBC_IMPLEMENTATION) $(GCCLIB) \ + $(UCLIBC_IMPLEMENTATION) \ + -lc_be_l4env_start_stop -ll4sys +L4LIBS_amd64_l4env_minimal = -static -ll4rm -ldm_mem \ + -ldm_generic -lthread -lsemaphore -ll4env \ + -ll4env_err -lslab -llogserver_capsule \ + -ll4rm -lthread -ldm_generic -lnames \ + -ll4util_root -ll4util $(ROOTLIB) -ll4sys +CRT0_amd64_l4env_minimal = $(CRT0_DEFAULT) +CRTN_amd64_l4env_minimal = +LDSCRIPT_amd64_l4env_minimal = $(LDS_DEFAULT) + +.general.d: $(L4DIR_ABS)/mk/modes.inc diff --git a/libdde_linux26/mk/prog.mk b/libdde_linux26/mk/prog.mk new file mode 100644 index 00000000..6ffca2f6 --- /dev/null +++ b/libdde_linux26/mk/prog.mk @@ -0,0 +1,160 @@ +# -*- Makefile -*- +# +# DROPS (Dresden Realtime OPerating System) Component +# +# Makefile-Template for binary directories +# +# $Id: prog.mk 397 2008-08-22 02:50:28Z l4check $ +# +# $Author: l4check $ +# +# Makeconf is used, see there for further documentation +# install.inc is used, see there for further documentation +# binary.inc is used, see there for further documentation + +ifeq ($(origin _L4DIR_MK_PROG_MK),undefined) +_L4DIR_MK_PROG_MK=y + +ROLE = prog.mk + +include $(L4DIR)/mk/Makeconf +$(GENERAL_D_LOC): $(L4DIR)/mk/prog.mk + +# define INSTALLDIRs prior to including install.inc, where the install- +# rules are defined. +ifeq ($(MODE),host) +INSTALLDIR_BIN ?= $(DROPS_STDDIR)/bin/host +INSTALLDIR_BIN_LOCAL ?= $(OBJ_BASE)/bin/host +else +INSTALLDIR_BIN ?= $(DROPS_STDDIR)/bin/$(subst -,/,$(SYSTEM)) +INSTALLDIR_BIN_LOCAL ?= $(OBJ_BASE)/bin/$(subst -,/,$(SYSTEM)) +endif +ifeq ($(BID_STRIP_PROGS),y) +INSTALLFILE_BIN ?= $(STRIP) --strip-unneeded $(1) -o $(2) && \ + chmod 755 $(2) +INSTALLFILE_BIN_LOCAL ?= $(STRIP) --strip-unneeded $(1) -o $(2) && \ + chmod 755 $(2) +else +INSTALLFILE_BIN ?= $(INSTALL) -m 755 $(1) $(2) +INSTALLFILE_BIN_LOCAL ?= $(INSTALL) -m 755 $(1) $(2) +endif + +INSTALLFILE = $(INSTALLFILE_BIN) +INSTALLDIR = $(INSTALLDIR_BIN) +INSTALLFILE_LOCAL = $(INSTALLFILE_BIN_LOCAL) +INSTALLDIR_LOCAL = $(INSTALLDIR_BIN_LOCAL) + +# our mode +MODE ?= l4env + +# include all Makeconf.locals, define common rules/variables +include $(L4DIR)/mk/binary.inc + +ifneq ($(SYSTEM),) # if we have a system, really build + +TARGET_STANDARD := $(TARGET) $(TARGET_$(OSYSTEM)) +TARGET_PROFILE := $(addsuffix .pr,$(filter $(BUILD_PROFILE),$(TARGET))) +TARGET += $(TARGET_$(OSYSTEM)) $(TARGET_PROFILE) + +# define some variables different for lib.mk and prog.mk +ifeq ($(MODE),loader) +LDFLAGS += --dynamic-linker libld-l4.s.so +endif +ifeq ($(BID_GENERATE_MAPFILE),y) +LDFLAGS += -Map $(strip $@).map +endif +LDFLAGS += $(addprefix -L, $(PRIVATE_LIBDIR) $(PRIVATE_LIBDIR_$(OSYSTEM)) $(PRIVATE_LIBDIR_$@) $(PRIVATE_LIBDIR_$@_$(OSYSTEM))) +LDFLAGS += $(addprefix -L, $(L4LIBDIR)) $(LIBCLIBDIR) +LDFLAGS += $(addprefix -T, $(LDSCRIPT)) $(LIBS) $(L4LIBS) $(LIBCLIBS) $(LDFLAGS_$@) +# Not all host linkers understand this option +ifneq ($(HOST_LINK),1) +LDFLAGS += --warn-common +endif + +ifeq ($(notdir $(LDSCRIPT)),main_stat.ld) +# ld denies -gc-section when linking against shared libraries +ifeq ($(findstring FOO,$(patsubst -l%.s,FOO,$(LIBS) $(L4LIBS) $(LIBCLIBS))),) +LDFLAGS += -gc-sections +endif +endif + +include $(L4DIR)/mk/install.inc + +#VPATHEX = $(foreach obj, $(OBJS), $(firstword $(foreach dir, \ +# . $(VPATH),$(wildcard $(dir)/$(obj))))) + +# target-rule: + +# Make looks for obj-files using VPATH only when looking for dependencies +# and applying implicit rules. Though make adapts its automatic variables, +# we cannot use them: The dependencies contain files which have not to be +# linked to the binary. Therefore the foreach searches the obj-files like +# make does, using the VPATH variable. +# Use a surrounding strip call to avoid ugly linebreaks in the commands +# output. + +# Dependencies: When we have ld.so, we use MAKEDEP to build our +# library dependencies. If not, we fall back to LIBDEPS, an +# approximation of the correct dependencies for the binary. Note, that +# MAKEDEP will be empty if we dont have ld.so, LIBDEPS will be empty +# if we have ld.so. + +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))))) +endif + +DEPS += $(foreach file,$(TARGET), $(dir $(file)).$(notdir $(file)).d) + +LINK_PROGRAM-C-host-1 := $(CC) +LINK_PROGRAM-CXX-host-1 := $(CXX) + +LINK_PROGRAM := $(LINK_PROGRAM-C-host-$(HOST_LINK)) +ifneq ($(SRC_CC),) +LINK_PROGRAM := $(LINK_PROGRAM-CXX-host-$(HOST_LINK)) +endif + +ifeq ($(LINK_PROGRAM),) +LINK_PROGRAM := $(LD) -m $(LD_EMULATION) +endif + +$(TARGET): $(OBJS) $(LIBDEPS) $(CRT0) $(CRTN) + @$(LINK_MESSAGE) + $(VERBOSE)$(call MAKEDEP,$(INT_LD_NAME),,,ld) $(LINK_PROGRAM) -o $@ $(CRT0) $(OBJS) $(LDFLAGS) $(CRTN) + @$(BUILT_MESSAGE) + +endif # architecture is defined, really build + +-include $(DEPSVAR) +.PHONY: all clean cleanall config help install oldconfig txtconfig +help:: + @echo " all - compile and install the binaries" +ifneq ($(SYSTEM),) + @echo " to $(INSTALLDIR_LOCAL)" +endif + @echo " install - compile and install the binaries" +ifneq ($(SYSTEM),) + @echo " to $(INSTALLDIR)" +endif + @echo " relink - relink and install the binaries" +ifneq ($(SYSTEM),) + @echo " to $(INSTALLDIR_LOCAL)" +endif + @echo " disasm - disassemble first target" + @echo " scrub - delete backup and temporary files" + @echo " clean - delete generated object files" + @echo " cleanall - delete all generated, backup and temporary files" + @echo " help - this help" + @echo +ifneq ($(SYSTEM),) + @echo " binaries are: $(TARGET)" +else + @echo " build for architectures: $(TARGET_SYSTEMS)" +endif + +endif # _L4DIR_MK_PROG_MK undefined diff --git a/libdde_linux26/mk/ptest b/libdde_linux26/mk/ptest new file mode 100755 index 00000000..e85d53b6 --- /dev/null +++ b/libdde_linux26/mk/ptest @@ -0,0 +1,444 @@ +#! /usr/bin/perl -W +# +# Run package tests using Fiasco-UX +# +# +# Adam Lackorzynski <adam@os.inf.tu-dresden.de> +# Ronald Aigner <ra3@os.inf.tu-dresden.de> +# +# This script is derived from the autocheck script which can be found in +# kernel/fiasco/tools. It has been slightly modified to suit the demands of +# the package tests. +# + +# make it pass for now +#exit 0; + +use strict; +use Getopt::Long; + +my $FIASCOUX; +my $FIASCOUX_PARAM; +my $L4DIR; +my $OBJ_BASE; +my $OBJDIR = 'OBJ-x86_586-l4v2'; +my $EXPECTED_OUT = 'expected.txt'; +my $TMP_OUT = 'tmp_out.txt'; +my $PKGNAME; +my $COMPARE_CMD = 'diff -u $EXPECTED_OUT $TMP_OUT'; + +my $ALARM_TIMEOUT = 60; # in seconds + +my %templs = ( + roottask => '%s/pkg/roottask/server/src/%s/roottask', + sigma0 => '%s/pkg/sigma0/server/src/%s/sigma0', +); + +my $Verbose = 0; +my $Quiet = 0; +my $Generate = 0; +my $Memory = 32; +my $Plainrun = 0; +my $No_fb = 0; +my $Use_Symbols = 0; +my $Use_Lines = 0; + +my %progs; +my %results; +my %output; +my @Baseservers; +my $Client; +my $Server; +my $Fiasco_Dir; + +# filehandle for fiasco output +my $Input; +my $Output; + +my $Exit_code = 0; +my $pid = 0; + +my $FILTER_LEVEL_FIASCO = 0; +my $FILTER_LEVEL_ROOTTASK = 1; +my $FILTER_LEVEL_USER = 2; +my $Filter_state = $FILTER_LEVEL_FIASCO; +my $Filter_level = $FILTER_LEVEL_USER; + +sub usage() { + print <<EOU; +$0 [options] -c <client> -s <server> + + --l4dir, -l path Path to an L4 directory + --fiascoux, -f file Path to the Fiasco-UX binary + --fiascoux_param, -p params Parameters for Fiasco-UX + --memory, -m megabyte Number of Megabytes used by Fiasco. (default: 32) + --objdir, -O objdir Object dir, currently: $OBJDIR + --verbose, -v Be verbose (e.g. show output of L4 apps) + --quiet, -q Tell nothing, just set the exit code + --generate Generate the output file instead of comparing to it + --server, -s file The server to be tested + --client, -c file The file to run as test-application + --base, -b file Additional base servers required by the application + Can be a comma seperated list. (Only specify the + binary names!) (default: log, names, dm_phys) + --timeout, -t timeout Time in seconds to wait before shooting down a + runaway fiasco. (default: 60) + --expectfail Expect failure. Return 0 on failure, 1 on success. + + Environment variables: + L4DIR Path to an L4 directory + OBJ_BASE Path to build directory + FIASCOUX Path to the Fiasco-UX binary + EXPECTED_OUT Filename of the file containing the expected output + TMP_OUT Filename of the tempfile containing Fiasco's output + COMPARE_CMD Command to compare output and expected output + + Notes: + Environment variables override options! +EOU +} + +## +# Check if L4DIR looks like an L4 directory +sub check_for_l4dir() { + unless (-d "$L4DIR/pkg/l4sys/include" || + -d "$L4DIR/../kernel/fiasco/src/kern/ux") { + die "$L4DIR doesn't look like an L4 directory!"; + } +} + +## +# Just check if the supplied binary in $FIASCOUX is really +# a Fiasco UX version. Native versions will just segfault. +sub check_for_fiasco_ux() { + + unless ((-x $FIASCOUX && -f $FIASCOUX) || + (-l $FIASCOUX && -x readlink $FIASCOUX && -f readlink $FIASCOUX)) { + die "$FIASCOUX: Does not exist or isn't an executable file"; + } + + system("$FIASCOUX -h >/dev/null 2>&1"); + die "$FIASCOUX doesn't seem to be a UX version." if $?; + + $FIASCOUX =~ /(.*)\/([^\/]*)$/; + $Fiasco_Dir = $1; +} + +# check for user app in binary path of L4 +sub check_user_app($) +{ + my $app_with_args = shift; + + # extract arch and api from OBJ-dir + $OBJDIR =~ /OBJ-([^-]*)-(.*)/; + my $arch = $1; + my $api = $2; + + my @check = split(/\s+/, $app_with_args); + my $app = shift @check; + + my $p = sprintf "%s/bin/%s/%s/%s", $OBJ_BASE, $arch, $api, $app; + die "There's no $p!" unless -f $p; + + return $p.'\\ '.join('\\ ', @check) if @check; + $p; +} + +## +# Check for userland (roottask, sigma0, ...) +sub check_for_userland() { + foreach my $t (keys %templs) { + my $p = sprintf $templs{$t}, $OBJ_BASE, $OBJDIR; + die "There's no $p!" unless -f $p; + $progs{$t} = $p; + } + + # check for base-servers + my @servers = @Baseservers; + @Baseservers = {}; + if (scalar(@servers) eq 0) { + @servers = ( "log", "names", "dm_phys" ); + } + + # iterate over servers and test if they exist in the bin dir + foreach my $s (@servers) { + push @Baseservers, check_user_app($s); + } + + # test client and server + push @Baseservers, check_user_app($Client) if defined($Client); + push @Baseservers, check_user_app($Server); +} + +## +# Does the comparison of the output +sub run_diff { + print STDERR "Running compare command \"$COMPARE_CMD\".\n" if $Verbose; + open(TMP, "$COMPARE_CMD |") or die "Cannot run diff: $!"; + my @diff = <TMP>; + close TMP; + + # reset console in interactive mode + system "if tty -s; then stty echo icrnl icanon; fi"; + + # check if there are differences between expected and generated output + if (@diff == 0) { + print STDERR "Output of test in $PKGNAME ok.\n"; + return $Exit_code; + } + + print STDERR "Test in $PKGNAME generated unexpected output:\n"; + @diff = splice @diff, 1000 if @diff > 1000; + print STDERR @diff, "\n"; + return 1 - $Exit_code; +} + +## +# Called if second alarm signal received +# +# Now all the output of Fiasco-UX should be through and we can savely kill +# Fiasco-UX. We then check the generated output and terminate ourselves. +sub got_sig_alarm_second { + print STDERR "Timeout for flushing Fiasco-UX output\n" if $Verbose; + print STDERR "Sending SIGKILL to $pid and diff output\n" if $Verbose; + + kill KILL => $pid; + alarm 0; + + # some sanity checks + if ( $Filter_state < $FILTER_LEVEL_USER ) { + print $Output "\n"; + print $Output "User tasks did not start. Maybe overlapping modules?\n"; + print $Output "Run \"" . fiascoux_cmdline() . "\" manually to check.\n"; + } + close $Output; + + # in generate mode, simply return + if ($Generate) { + system "stty echo"; + exit 0; + } + + exit run_diff(); +} + +## +# Called if first alarm signal received +# +# To flush Fiasco Output we send it a SIGINT (^C). Then we set up a second +# timeout and return, so the filter can process the output which we forced to +# be flushed. +sub got_sig_alarm_first { + print STDERR "Timeout for Fiasco-UX hit!\n" if $Verbose; + print STDERR "Sending SIGINT to $pid\n" if $Verbose; + + kill INT => $pid; + $SIG{ALRM} = \&got_sig_alarm_second; + alarm 2; # time to flush output + + # return to keep on filtering the output of Fiasco +} + +## +# Runs the timer and kills fiasco if runaway +# +# - sets the signal handler +# - initializes the timeout +sub set_alarm { + $SIG{ALRM} = \&got_sig_alarm_first; + alarm $ALARM_TIMEOUT; + print STDERR "Set alarm to $ALARM_TIMEOUT seconds\n" if $Verbose; +} + +## +# Build the fiasco command line +# +# Adds the binaries with the appropriate parameters. +sub fiascoux_cmdline() { + (my $p = $FIASCOUX) =~ s/\/[^\/]+$//; + my $cmdline = "$FIASCOUX"; + $cmdline .= " $FIASCOUX_PARAM" if defined $FIASCOUX_PARAM; + $cmdline .= " -symbols $Fiasco_Dir/Symbols" if $Use_Symbols; + $cmdline .= " -lines $Fiasco_Dir/Lines" if $Use_Lines; + $cmdline .= " -m $Memory"; + $cmdline .= " -R $progs{roottask}"; # -quiet"; + $cmdline .= "\"" if $Use_Symbols || $Use_Lines; + $cmdline .= " -symbols" if $Use_Symbols; + $cmdline .= " -lines" if $Use_Lines; + $cmdline .= "\"" if $Use_Symbols || $Use_Lines; + $cmdline .= " -S $progs{sigma0}"; # --quiet"; + # when we change this to not cd into Fiasco dir, then + # prepend $p to $irq0 + $cmdline .= " -I ".$p."/irq0"; + if ($No_fb eq 1) { + $cmdline .= " -F /bin/true"; + } else { + $cmdline .= " -F ".$p."/con_ux"; + } + # add -l to base-servers, which already contains client and server + for my $s (@Baseservers) { + if (ref($s) ne "HASH") { # just checking for Hashes that smuggled in + $cmdline .= " -l ".$s; + } + } + $cmdline; +} + +## +# filters the output of fiasco +# +# We want to see everything once roottask are finished loading. +# Therefore, we need some state machine to skip everything before and while +# roottask is running. +sub filter_fiasco_out +{ + $_ = shift; + + # filter escape sequences + s/[[:cntrl:]]\[(\d;)?\d{0,2}m//g; + s/
//g; + s/[[:cntrl:]]\[K//g; + s/[[:cntrl:]]\[\d+;\d+[Hfr]//g; + + # check if we have to change state + if (/^Roottask: Loading \d+ modules\./ && + $Filter_state eq $FILTER_LEVEL_FIASCO) { + $Filter_state = $FILTER_LEVEL_ROOTTASK; + print STDERR "Changed state to Roottask-Output\n" if $Verbose; + } + if ( /^$/ && $Filter_state eq $FILTER_LEVEL_ROOTTASK) { + $Filter_state = $FILTER_LEVEL_USER; + print STDERR "Changed state to Userland-Output\n" if $Verbose; + } + + # skip everything before and from roottask + return undef if $Filter_state < $Filter_level; + + # if we are not supposed to filter anything, then return the line + return $_ if $Filter_level eq $FILTER_LEVEL_FIASCO; + + # filter empty lines + return undef if /^$/; + + # filter JDB warning and prompt + return undef if /^Terminal probably too small, should be at least/; + return undef if /^\([a-f0-9]\.\d\d\) jdb:/; + return undef if /^--.*ESP:.*EIP:.*/; + + # filter memory dump + return undef if /^([a-f0-9]){8}:/; + + $_; +} + +## +# call_test +sub run_fiasco { + my $cmdline = fiascoux_cmdline(); + print "Calling: $cmdline\n" if $Verbose; + + $pid = open($Input, "$cmdline|"); + die "Can't start Fiasco: $!" unless defined $pid; + print "Run Fiasco-UX in $pid\n" if $Verbose; + + # if in generate mode, we redirect output to EXPECTED_OUT + # otherwise we redirect stdout to the TMP_OUT file + my $filename = $Generate ? $EXPECTED_OUT : $TMP_OUT; + open($Output, ">$filename") || die "Cannot open output file $filename"; + my $oldfh = select($Output); $| = 1; select($oldfh); + print STDERR "Opened $filename, now setting timer\n" if $Verbose; + + # the parent sets up the timer (it will eventually call the run_diff sub) + set_alarm(); + + my $o; + while (<$Input>) { + # we have to strip some lines + $o = filter_fiasco_out($_); + next unless defined $o; + print $Output $o; + } + print STDERR "Fiasco terminated.\n" if $Verbose; + close $Input; + close $Output; + # when we drop out of this loop fiasco terminated + alarm 0; + + # in generate mode, simply return + exit 0 if $Generate; + + exit run_diff(); +} + +## +# Plain run of Fiasco UX +# +# Not timer, no filter, simply run UX +sub run_plain_fiasco { + my $cmdline = fiascoux_cmdline(); + print "Running UX: \"$cmdline\"\n"; + exec($cmdline) or die "Can't start Fiasco: $!"; + exit 1; +} + + +# ------------------------------------------------------------- + +unless (GetOptions("help|h", sub { usage(); exit(0); }, + "l4dir|l=s", \$L4DIR, + "builddir=s", \$OBJ_BASE, + "fiascoux|f=s", \$FIASCOUX, + "fiascoux_param|p=s", \$FIASCOUX_PARAM, + "memory|m=s", \$Memory, + "objdir|O=s", \$OBJDIR, + "verbose|v!", \$Verbose, + "quiet|q!", \$Quiet, + "generate!", \$Generate, + "expectfail!", \$Exit_code, + "client|c=s", \$Client, + "server|s=s", \$Server, + "base|b=s", \@Baseservers, + "timeout|t=s", \$ALARM_TIMEOUT, + "plainrun!", \$Plainrun, + "filterlevel=i", \$Filter_level, + "nofb!", \$No_fb, + "symbols!", \$Use_Symbols, + "lines!", \$Use_Lines, + )) { + usage(); + exit(1); +} + +@Baseservers = split(/,/,join(',',@Baseservers)); + +$L4DIR = $ENV{L4DIR} || die "Need an L4DIR set!" unless $L4DIR; +$OBJ_BASE = $ENV{OBJ_BASE} || die "Need an builddir (OBJ_BASE) set!" unless $OBJ_BASE; +$FIASCOUX = $ENV{FIASCOUX} || die "Need a Fiasco-UX path!" unless $FIASCOUX; +if ($ENV{EXPECTED_OUT}) { $EXPECTED_OUT = $ENV{EXPECTED_OUT}; } +die "Need filename of expected output!" unless $EXPECTED_OUT; +if ($ENV{TMP_OUT}) { $TMP_OUT = $ENV{TMP_OUT}; } +die "No valid temporary file set!" unless $TMP_OUT; +$PKGNAME = $ENV{PKGNAME} || $Server + || die "No package-name set!" unless $PKGNAME; +if ($ENV{COMPARE_CMD}) { $COMPARE_CMD = $ENV{COMPARE_CMD}; } +die "No compare command set!" unless $COMPARE_CMD; + +check_for_l4dir(); +check_for_fiasco_ux(); +check_for_userland(); + +## +# The package test script: +# This script forks off Fiasco and sets up a timeout. When the timeout +# strikes, it sends a SIGINT to Fiasco to force a flush of the output buffer. +# Then it sends a SIGKILL to terminate Fiasco. +print "Main called by $$.\n" if $Verbose; + +# if plainrun, start run_plain_fiasco (it never returns) +run_plain_fiasco() if $Plainrun; + +# this function forks off fiasco +run_fiasco(); + +# when we reach this point, something terribly went wrong +die "Oops, error in script!\n"; diff --git a/libdde_linux26/mk/redo_defconfigs b/libdde_linux26/mk/redo_defconfigs new file mode 100755 index 00000000..e26644ad --- /dev/null +++ b/libdde_linux26/mk/redo_defconfigs @@ -0,0 +1,21 @@ +#! /bin/sh + +set -x + +TMPDIR=$(mktemp -d) + +exithandler() +{ + rm -r $TMPDIR +} + +trap exithandler EXIT + +cd .. + +for i in mk/defconfig/config.*; do + DROPSCONF_DEFCONFIG=$i make O=$TMPDIR oldconfig + diff -u $i $TMPDIR/.Makeconf.bid + grep -v '^DROPS_STDDIR=' $TMPDIR/.Makeconf.bid > $i + rm $TMPDIR/{.Makeconf.bid,.Makeconf.bid.converted,Makeconf.bid.local,Makeconf.bid.local.indep} +done diff --git a/libdde_linux26/mk/rel2abs.sh b/libdde_linux26/mk/rel2abs.sh new file mode 100755 index 00000000..33dd8a5b --- /dev/null +++ b/libdde_linux26/mk/rel2abs.sh @@ -0,0 +1,72 @@ +#! /bin/bash +# +# Convert relative path to absolute one +# +# Adam Lackorzynski <adam@os.inf.tu-dresden.de> +# + +help() +{ + echo PWD=\$PWD $0 relpath1 [relpath2 [..]] + exit $1 +} + +convertpath() +{ + relpath=$1 + basepath=$PWD + # sanity checks + [ -z "$relpath" -o -z "$basepath" ] && help 1 + [ "${basepath#/}" = "${basepath}" ] && help 1 + [ "${basepath/\/..\//}" = "${basepath}" ] || help 1 + [ "${basepath/\/.\//}" = "${basepath}" ] || help 1 + [ "${basepath/%\/../}" = "${basepath}" ] || help 1 + [ "${basepath/%\/./}" = "${basepath}" ] || help 1 + + + # remove slashes at the end + while [ "${relpath%/}" != "${relpath}" ]; + do relpath="${relpath%/}"; done + + # remove double/multi slashes + while [ "${relpath/\/\///}" != "${relpath}" ]; + do relpath=${relpath/\/\///}; done + + # is relpath relative? + if [ "${relpath#/}" != "${relpath}" ]; then + basepath='' + relpath=${relpath#/} + fi + + relpath="$relpath/" + + while [ -n "$relpath" ]; + do + elem=${relpath%%/*} + relpath=${relpath#*/} + + case $elem in + .) # skip + ;; + ..) + basepath=${basepath%/*} + ;; + *) + basepath=$basepath/$elem + ;; + esac + + done + + [ -z "$basepath" ] && basepath=/$basepath + + echo $basepath +} + +while [ -n "$1" ]; +do + convertpath $1 + shift +done + +exit 0 diff --git a/libdde_linux26/mk/runux.mk b/libdde_linux26/mk/runux.mk new file mode 100644 index 00000000..c19a30ac --- /dev/null +++ b/libdde_linux26/mk/runux.mk @@ -0,0 +1,194 @@ +# -*- Makefile -*- +# +# DROPS (Dresden Realtime OPerating System) Component +# +# Makefile-Template to run tests with Fiasco-UX +# +# install.inc is used, see there for further documentation + +ifeq ($(origin _L4DIR_MK_RUNUX_MK),undefined) +_L4DIR_MK_RUNUX_MK=y + +ROLE = runux.mk +.general.d: $(L4DIR)/mk/runux.mk + +# set a mode, so binary.inc is satisfied +MODE ?= l4env + +# include all Makeconf.locals, define common rules/variables +include $(L4DIR)/mk/Makeconf +include $(L4DIR)/mk/binary.inc + +# if we have a system set, build +ifneq ($(SYSTEM),) + +## +# !WARNING! +# +# This is a preliminary test to allow l4check to run Fiasco-UX tests for +# multiple SYSTEMS. This currently only works for x86. +ifneq ($(ARCH),x86) +$(error "$(ROLE) currently does not support $(ARCH).") +endif + +# now check if the current API has a FIASCOUX variable set and if so use it +# XXX could be overloaded by $(OSYSTEM) == $(ARCH)-$(L4API) or $(SYSTEM) +ifneq ($(FIASCOUX_$(L4API)),) +FIASCOUX = $(FIASCOUX_$(L4API)) +else +$(warning "Using generic(?) Fiasco UX "$(FIASCOUX)" to test $(L4API).") +endif + +# the testapplication +# test if variables are set +ifeq ($(TEST_SERVER),) +DO_TARGET := no_ptest +else +DO_TARGET := ptest +endif +# TEST_CLIENT might be empty. Testing server stand-alone +ifneq ($(TEST_CLIENT),) +TEST_CLIENT_PARAM = $(addprefix -c ,$(TEST_CLIENT)) +endif +ifneq ($(BASE_SERVERS),) +$(warning $(BASE_SERVERS)) +BASESERVERS = $(foreach server, $(BASE_SERVERS), -b $(server) $(BASE_SERVERS_PARAM_$(server))) +endif + +# expected output and what to do on mismatch +EXPECTED_OUT ?= expected.txt +TIMEOUT ?= 10 +DEBUG_PERL ?= 0 +TMP_OUT ?= tmp_out.txt + +# specify files to delete when doing 'make clean' +DEL_ON_CLEAN = $(TMP_OUT) core + +ifneq ($(DEBUG_PERL),0) +DEBUG_PERL_ = -v +else +DEBUG_PERL_ = +endif + +ifneq ($(MEMORY),) +MEMORY_ = -m $(MEMORY) +endif + +ifneq ($(FIASCOUX_PARAM),) +FIASCOUX_PARAM_ = -p $(FIASCOUX_PARAM) +endif + +# allow failure of test +# +# If EXPECT_FAIL is set, the test if the output matches must fail, otherwise +# ptest will return an error. +ifeq ($(EXPECT_FAIL),1) +EXPECT_FAIL_ = --expectfail +else +EXPECT_FAIL_ = +endif + +# do keep ALL output +# +# if FILTER_KEEP_ALL is set, the Fiasco UX output is only filtered for escape +# sequences. All other output is printed into temporary file +ifeq ($(FILTER_KEEP_ALL),1) +FILTER_KEEP_ = --filterlevel=0 +else +FILTER_KEEP_ = +endif + +# no framebuffer device +# +# If NO_FBUF_DEV is set, Fiasco UX will not open an X window to display +# graphical output. This is useful for testing graphical applications. +ifeq ($(NO_FBUF_DEV),1) +NO_FBUF_DEV_ = --nofb +else +NO_FBUF_DEV_ = +endif + +# enable symbols and lines per default +USE_SYMBOLS ?= y +USE_LINES ?= y + +ifeq ($(USE_SYMBOLS),y) +USE_SYMBOLS_ = --symbols +else +USE_SYMBOLS_ = +endif +ifeq ($(USE_LINES),y) +USE_LINES_ = --lines +else +USE_LINES_ = +endif + +all:: $(DO_TARGET) + +# install.inc eventually defines rules for every target +include $(L4DIR)/mk/install.inc + +no_ptest: + @echo "No test defined, skipping" + +ptest:: $(EXPECTED_OUT) $(BID_OBJ_Makefile).inc + $(VERBOSE)echo "Running Fiasco UX to test $(TEST_SERVER)" + $(VERBOSE)EXPECTED_OUT=$(EXPECTED_OUT) PKGNAME=$(PKGNAME) \ + L4DIR=$(L4DIR) OBJ_BASE=$(OBJ_BASE) TMP_OUT=$(TMP_OUT) \ + COMPARE_CMD=$(COMPARE_CMD) \ + $(L4DIR)/mk/ptest -s $(TEST_SERVER) $(TEST_CLIENT_PARAM) \ + -f $(FIASCOUX) $(FIASCOUX_PARAM_) -t $(TIMEOUT) \ + -O OBJ-$(SYSTEM) \ + $(BASESERVERS) $(DEBUG_PERL_) $(MEMORY_) $(EXPECT_FAIL_) \ + $(FILTER_KEEP_) $(NO_FBUF_DEV_) $(USE_SYMBOLS_) $(USE_LINES_) + +genexp:: $(EXPECTED_OUT) $(BID_OBJ_Makefile).inc + +$(EXPECTED_OUT): + $(VERBOSE)echo "Running Fiasco UX to generate expected output" + $(VERBOSE)EXPECTED_OUT=$(EXPECTED_OUT) PKGNAME=$(PKGNAME) \ + L4DIR=$(L4DIR) OBJ_BASE=$(OBJ_BASE) TMP_OUT=$(TMP_OUT) \ + COMPARE=$(COMPARE_CMD) \ + $(L4DIR)/mk/ptest -s $(TEST_SERVER) $(TEST_CLIENT_PARAM) \ + -f $(FIASCOUX) $(FIASCOUX_PARAM_) -t $(TIMEOUT) \ + -O OBJ-$(SYSTEM) \ + $(BASESERVERS) $(DEBUG_PERL_) $(MEMORY_) $(EXPECT_FAIL_) \ + $(FILTER_KEEP_) $(NO_FBUF_DEV_) $(USE_SYMBOLS_) $(USE_LINES_) \ + --generate + $(VERBOSE)touch .expect-autogenerated + +plainrun:: $(BID_OBJ_Makefile).inc + $(VERBOSE)echo "Starting Fiasco UX" + $(VERBOSE)EXPECTED_OUT=$(EXPECTED_OUT) PKGNAME=$(PKGNAME) \ + L4DIR=$(L4DIR) OBJ_BASE=$(OBJ_BASE) TMP_OUT=$(TMP_OUT) \ + COMPARE_CMD=$(COMPARE_CMD) \ + $(L4DIR)/mk/ptest -s $(TEST_SERVER) $(TEST_CLIENT_PARAM) \ + -f $(FIASCOUX) $(FIASCOUX_PARAM_) -t $(TIMEOUT) \ + -O OBJ-$(SYSTEM) \ + $(BASESERVERS) $(DEBUG_PERL_) $(MEMORY_) $(FILTER_KEEP_) \ + $(NO_FBUF_DEV_) $(USE_SYMBOLS_) $(USE_LINES_) --plainrun + +endif # system defined + +ptest genexp plainrun:: $(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_DIR)/OBJ-$$d $(MAKE) -C $(OBJ_DIR)/OBJ-$$d -f $(BID_OBJ_Makefile) \ + $@ ; done ) + +.PHONY: all ptest genexp plainrun clean cleanall help no_ptest +-include $(DEPSVAR) + +help:: + @echo "Specify a target:" + @echo "all - run test" + @echo "test - run test" + @echo "genexp - generate file with expected output" + @echo "plainrun - just run binaries (no filter, no comparison)" + @echo "clean - delete generated intermediate files" + @echo "cleanall - delete all generated files (include genexp target)" + @echo "help - this help" + @echo + +endif # _L4DIR_MK_RUNUX_MK undefined diff --git a/libdde_linux26/mk/subdir.mk b/libdde_linux26/mk/subdir.mk new file mode 100644 index 00000000..0f31b2d1 --- /dev/null +++ b/libdde_linux26/mk/subdir.mk @@ -0,0 +1,72 @@ +# -*- Makefile -*- +# +# DROPS (Dresden Realtime OPerating System) Component +# +# Makefile-Template for directories containing only subdirs +# +# 05/2002 Jork Loeser <jork.loeser@inf.tu-dresden.de> + +include $(L4DIR)/mk/Makeconf + +ifeq ($(PKGDIR),.) +TARGET ?= $(patsubst %/Makefile,%,$(wildcard $(addsuffix /Makefile, \ + idl include src lib server examples doc))) +$(if $(wildcard include/Makefile), idl lib server examples: include) +$(if $(wildcard idl/Makefile), lib server examples: idl) +$(if $(wildcard lib/Makefile), server examples: lib) +else +TARGET ?= $(patsubst %/Makefile,%,$(wildcard $(addsuffix /Makefile, \ + idl src lib server examples doc))) +endif +SUBDIR_TARGET := $(if $(filter doc,$(MAKECMDGOALS)),$(TARGET), \ + $(filter-out doc,$(TARGET))) + +all:: $(SUBDIR_TARGET) $(SUBDIRS) +install:: + +clean cleanall scrub:: + $(VERBOSE)set -e; $(foreach d,$(TARGET), test -f $d/broken || \ + if [ -f $d/Makefile ] ; then PWD=$(PWD)/$d $(MAKE) -C $d $@ $(MKFLAGS) $(MKFLAGS_$(d)); fi; ) + +install oldconfig txtconfig relink:: + $(VERBOSE)set -e; $(foreach d,$(TARGET), test -f $d/broken -o -f $d/obsolete || \ + if [ -f $d/Makefile ] ; then PWD=$(PWD)/$d $(MAKE) -C $d $@ $(MKFLAGS) $(MKFLAGS_$(d)); fi; ) + +# first the subdir-targets (this is were "all" will be build, e.g. in lib +# or server. +$(filter-out ptest,$(SUBDIR_TARGET)): + $(VERBOSE)test -f $@/broken -o -f $@/obsolete || \ + if [ -f $@/Makefile ] ; then PWD=$(PWD)/$@ $(MAKE) -C $@ $(MKFLAGS) ; fi +# Second, the rules for going down into sub-pkgs with "lib" and "server" +# targets. Going down into sub-pkgs. + $(if $(SUBDIRS),$(if $(filter $@,idl include lib server examples doc),\ + $(VERBOSE)set -e; for s in $(SUBDIRS); do \ + PWD=$(PWD)/$$s $(MAKE) -C $$s $@ $(MKFLAGS); done )) + +idl include lib server examples doc: + +# the test target is something special: +TEST_DEPENDS ?= server + +# check if the test directory exists, check if its broken or obsolete +# to be able to specify additional dependencies, we make it a :: target +ptest:: $(TEST_DEPENDS) + $(VERBOSE)test -f $@/broken -o -f $@/obsolete || \ + if [ -f $@/Makefile ] ; then PWD=$(PWD)/$@ $(MAKE) -C $@ $(MKFLAGS) ; fi + +install-symlinks: + $(warning target install-symlinks is obsolete. Use 'include' instead (warning only)) + $(VERBOSE)$(MAKE) include + +help:: + @echo " all - build subdirs: $(SUBDIR_TARGET)" + $(if $(filter doc,$(TARGET)), \ + @echo " doc - build documentation") + @echo " scrub - call scrub recursively" + @echo " clean - call clean recursively" + @echo " cleanall - call cleanall recursively" + @echo " install - build subdirs, install recursively then" + @echo " oldconfig - call oldconfig recursively" + @echo " txtconfig - call txtconfig recursively" + +.PHONY: $(TARGET) all clean cleanall help install oldconfig txtconfig diff --git a/libdde_linux26/mk/tmpl/MAINTAINER b/libdde_linux26/mk/tmpl/MAINTAINER new file mode 100644 index 00000000..85eb7179 --- /dev/null +++ b/libdde_linux26/mk/tmpl/MAINTAINER @@ -0,0 +1 @@ +mailaddr <enter your mail address here> diff --git a/libdde_linux26/mk/tmpl/Makefile b/libdde_linux26/mk/tmpl/Makefile new file mode 100644 index 00000000..eb46c32a --- /dev/null +++ b/libdde_linux26/mk/tmpl/Makefile @@ -0,0 +1,9 @@ +PKGDIR ?= . +L4DIR ?= $(PKGDIR)/../.. + +# the default is to build the listed directories, provided that they +# contain a Makefile. If you need to change this, uncomment the following +# line and adapt it. +# TARGET = idl include src lib server examples doc + +include $(L4DIR)/mk/subdir.mk diff --git a/libdde_linux26/mk/tmpl/examples/Makefile b/libdde_linux26/mk/tmpl/examples/Makefile new file mode 100644 index 00000000..065f6d87 --- /dev/null +++ b/libdde_linux26/mk/tmpl/examples/Makefile @@ -0,0 +1,10 @@ +PKGDIR ?= .. +L4DIR ?= $(PKGDIR)/../.. + +# create examples demonstrating the use of you package in subdirectories +# and list those subdirs in the TARGET variable. +TARGET = + +include $(L4DIR)/mk/subdir.mk + + diff --git a/libdde_linux26/mk/tmpl/idl/Makefile b/libdde_linux26/mk/tmpl/idl/Makefile new file mode 100644 index 00000000..902a1714 --- /dev/null +++ b/libdde_linux26/mk/tmpl/idl/Makefile @@ -0,0 +1,13 @@ +# +# makefile for package IDL directory +# + +PKGDIR ?= .. +L4DIR ?= $(PKGDIR)/../.. + +# create an idl file an assign its name to IDL +IDL = +# the default idl type is DCE/dice. Uncomment the next line to change this. +# IDL_TYPE= <your choice> + +include $(L4DIR)/mk/idl.mk diff --git a/libdde_linux26/mk/tmpl/include/Makefile b/libdde_linux26/mk/tmpl/include/Makefile new file mode 100644 index 00000000..8d31023f --- /dev/null +++ b/libdde_linux26/mk/tmpl/include/Makefile @@ -0,0 +1,9 @@ +PKGDIR ?= .. +L4DIR ?= $(PKGDIR)/../.. + +# All haeder files found in this directory tree will be automatically +# installed in a way that they can be included with +# #include <l4/pkgname/yourfile.h> later. +# No need to list them in this Makefile. + +include $(L4DIR)/mk/include.mk diff --git a/libdde_linux26/mk/tmpl/inst b/libdde_linux26/mk/tmpl/inst new file mode 100755 index 00000000..5e553544 --- /dev/null +++ b/libdde_linux26/mk/tmpl/inst @@ -0,0 +1,8 @@ +#!/bin/sh + +# install default directory hierarchy and default Makefiles +# +# Call this script from a newly created package directory. + +set -e +tar c -C "${0%/*}" -f- --exclude=.svn --exclude=inst . | tar xvf - diff --git a/libdde_linux26/mk/tmpl/lib/Makefile b/libdde_linux26/mk/tmpl/lib/Makefile new file mode 100644 index 00000000..67d58733 --- /dev/null +++ b/libdde_linux26/mk/tmpl/lib/Makefile @@ -0,0 +1,9 @@ +PKGDIR ?= .. +L4DIR ?= $(PKGDIR)/../.. + +# the default is to build the listed directories, provided that they +# contain a Makefile. If you need to change this, uncomment the following +# line and adapt it. +# TARGET = idl src lib server examples doc + +include $(L4DIR)/mk/subdir.mk diff --git a/libdde_linux26/mk/tmpl/lib/src/Makefile b/libdde_linux26/mk/tmpl/lib/src/Makefile new file mode 100644 index 00000000..dfa73716 --- /dev/null +++ b/libdde_linux26/mk/tmpl/lib/src/Makefile @@ -0,0 +1,14 @@ +PKGDIR?= ../.. +L4DIR ?= $(PKGDIR)/../.. + +# the name of your library +TARGET = lib$(PKGNAME).a + +# list your .c files here +SRC_C = + +# if your library implements the client side of an idl defined in an +# idl-file of your package, list the idl file name(s) here (no path needed) +CLIENTIDL = + +include $(L4DIR)/mk/lib.mk diff --git a/libdde_linux26/mk/tmpl/ptest/Makefile b/libdde_linux26/mk/tmpl/ptest/Makefile new file mode 100644 index 00000000..2fc7ed3b --- /dev/null +++ b/libdde_linux26/mk/tmpl/ptest/Makefile @@ -0,0 +1,6 @@ +PKGDIR ?= .. +L4DIR ?= $(PKGDIR)/../.. + +TARGET = run + +include $(L4DIR)/mk/subdir.mk diff --git a/libdde_linux26/mk/tmpl/ptest/run/Makefile b/libdde_linux26/mk/tmpl/ptest/run/Makefile new file mode 100644 index 00000000..321601f0 --- /dev/null +++ b/libdde_linux26/mk/tmpl/ptest/run/Makefile @@ -0,0 +1,10 @@ +PKGDIR ?= ../.. +L4DIR ?= $(PKGDIR)/../.. + +# insert the binary name of the server to test +TEST_SERVER = + +# insert the binary name of the application testing the server +TEST_CLIENT = + +include $(L4DIR)/mk/runux.mk diff --git a/libdde_linux26/mk/tmpl/server/Makefile b/libdde_linux26/mk/tmpl/server/Makefile new file mode 100644 index 00000000..67d58733 --- /dev/null +++ b/libdde_linux26/mk/tmpl/server/Makefile @@ -0,0 +1,9 @@ +PKGDIR ?= .. +L4DIR ?= $(PKGDIR)/../.. + +# the default is to build the listed directories, provided that they +# contain a Makefile. If you need to change this, uncomment the following +# line and adapt it. +# TARGET = idl src lib server examples doc + +include $(L4DIR)/mk/subdir.mk diff --git a/libdde_linux26/mk/tmpl/server/src/Makefile b/libdde_linux26/mk/tmpl/server/src/Makefile new file mode 100644 index 00000000..8b0c2471 --- /dev/null +++ b/libdde_linux26/mk/tmpl/server/src/Makefile @@ -0,0 +1,18 @@ +PKGDIR ?= ../.. +L4DIR ?= $(PKGDIR)/../.. + +TARGET = $(PKGNAME) +# the default relocation address. This may be superseded by a STATIC file. +DEFAULT_RELOC = 0x01800000 + +# list your .c files here +SRC_C = main.c + +# if your server implements the server side of an idl defined in an idl-file +# of your package, list the idl file name(s) here (no path needed) +SERVERIDL = + +# list additional library paths and libraries here +LIBS = + +include $(L4DIR)/mk/prog.mk diff --git a/libdde_linux26/mk/tmpl/server/src/main.c b/libdde_linux26/mk/tmpl/server/src/main.c new file mode 100644 index 00000000..65eddcf8 --- /dev/null +++ b/libdde_linux26/mk/tmpl/server/src/main.c @@ -0,0 +1,5 @@ + +int main(int argc, char **argv) +{ + return 0; +} |