]> rtime.felk.cvut.cz Git - omk/sssa.git/commitdiff
Adaptation for AQuoSA
authorMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 29 Apr 2009 08:16:12 +0000 (10:16 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 29 Apr 2009 08:29:08 +0000 (10:29 +0200)
This patch was provided by Tommaso Cucinotta. I do not want all these
changes to appear in our version if OMK, since they are not compatible
with future OMK development. Therefore, I'm creating this separate
branch, which will be used mainly for FRESCOR project.

rules/linux/kernelcfg2mk
snippets/base.omk
snippets/config_h.omk
snippets/include.omk
snippets/linux.omk
snippets/sources-list.omk

index be7d1f54c3db340660182843acc7ab1d6d648b75..30497640a3924238bc9f2a12479a5dbf60f73907 100755 (executable)
@@ -1,5 +1,11 @@
 #!/bin/bash
 
+if [ "$OMK_VERBOSE" == "1" ]; then
+  CMD_ECHO=echo
+else
+  CMD_ECHO=true
+fi
+
 if [ $# -lt 1 ] ; then
   echo "kernelcfg2mk: requires linux kernel directory as the first argument"
   exit 2
@@ -12,13 +18,13 @@ if [ $# -gt 1 ] ; then
 fi
 
 if [ ! -e $LINUX_DIR/.config ] ; then
-  echo "kernelcfg2mk: the provided locations doesnot point to configured kernel sources"
+  echo "kernelcfg2mk: the provided location does not point to configured kernel sources"
   echo "        check directory $LINUX_DIR"
   exit 2
 fi
 
 if [ ! -e $LINUX_DIR/.config ] ; then
-  echo "kernelcfg2mk: the provided locations doesnot point to configured kernel sources"
+  echo "kernelcfg2mk: the provided location does not point to configured kernel sources"
   echo "        check directory $LINUX_DIR"
   exit 2
 fi
@@ -41,10 +47,11 @@ KERN_TEST_DIR="$KERN_BUILD_DIR/kern-test-mk"
 
 mkdir -p $KERN_TEST_DIR
 
-#echo MAKERULES_DIR $MAKERULES_DIR
-#echo LINUX_DIR $LINUX_DIR
-#echo KERN_BUILD_DIR $KERN_BUILD_DIR
-#echo KERN_MODULES_DIR $KERN_MODULES_DIR
+$CMD_ECHO MAKERULES_DIR='$MAKERULES_DIR'
+$CMD_ECHO LINUX_DIR='$LINUX_DIR'
+$CMD_ECHO KERN_BUILD_DIR='$KERN_BUILD_DIR'
+$CMD_ECHO KERN_MODULES_DIR='$KERN_MODULES_DIR'
+$CMD_ECHO KERN_TEST_DIR='$KERN_TEST_DIR'
 
 RETVAL="0"
 
@@ -58,9 +65,9 @@ fi
 LINUX_VERSION_MAJOR=$(echo ${LINUX_VERSION} | cut -d. -f1)
 LINUX_VERSION_MINOR=$(echo ${LINUX_VERSION} | cut -d. -f2)
 
-#echo $LINUX_VERSION
-#echo $LINUX_VERSION_MAJOR
-#echo $LINUX_VERSION_MINOR
+$CMD_ECHO Detected LINUX_VERSION=$LINUX_VERSION
+$CMD_ECHO Detected LINUX_VERSION_MAJOR=$LINUX_VERSION_MAJOR
+$CMD_ECHO Detected LINUX_VERSION_MINOR=$LINUX_VERSION_MINOR
 
 
 case $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR in
@@ -79,16 +86,34 @@ case $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR in
        fi
        cd ${KERN_TEST_DIR}
 
+       $CMD_ECHO Writing `pwd`/Makefile
        cat >${KERN_TEST_DIR}/Makefile <<EOF
+include $LINUX_DIR/include/config/auto.conf
+
+MODPOST_OPTS =                                  \\
+ \$(if \$(CONFIG_MODVERSIONS),-m)                  \\
+ \$(if \$(CONFIG_MODULE_SRCVERSION_ALL),-a,)       \\
+ \$(if \$(KBUILD_EXTMOD),-i,-o) \$(kernelsymfile)   \\
+ \$(if \$(KBUILD_EXTMOD),-I \$(modulesymfile))      \\
+ \$(if \$(KBUILD_EXTRA_SYMBOLS), \$(patsubst %, -e %,\$(EXTRA_SYMBOLS))) \\
+ \$(if \$(KBUILD_EXTMOD),-o \$(modulesymfile))      \\
+ \$(if \$(CONFIG_DEBUG_SECTION_MISMATCH),,-S)      \\
+ \$(if \$(CONFIG_MARKERS),-K \$(kernelmarkersfile)) \\
+ \$(if \$(CONFIG_MARKERS),-M \$(markersfile))   \\
+ \$(if \$(KBUILD_EXTMOD)\$(KBUILD_MODPOST_WARN),-w) \\
+ \$(if \$(cross_build),-c)
 
 .PHONY: modules
 modules:
+       if [ "$OMK_VERBOSE" = "1" ]; then env; fi
        @echo LINUX_ARCH="\$(ARCH)" >>flags
        @echo LINUX_LDFLAGS="" >>flags
        @echo LINUX_ARFLAGS="\$(ARFLAGS)" >>flags
        @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>flags
        @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>flags
+       @$CMD_ECHO LINUX_AFLAGS="\$(AFLAGS)"
        @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>flags
+       @$CMD_ECHO LINUX_CFLAGS="\$(CFLAGS)"
        @echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>flags
        @echo LINUX_MODFLAGS="\$(MODFLAGS)"
        @echo LINUX_CC="\$(CC)" >>flags
@@ -96,10 +121,11 @@ modules:
        @echo LINUX_AS="\$(AS)" >>flags
        @echo LINUX_AR="\$(AR)" >>flags
        @echo LINUX_MODULE_EXT=".o" >>flags
+       @echo MODPOST_OPTS="\$(MODPOST_OPTS)" >>flags
 
 EOF
 
-       #echo ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules
+       $CMD_ECHO ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules
        ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules
        if [ $? == 0 ] ; then
                cp -v flags ${KERN_MODULES_DIR}/kernel.mk       
@@ -111,7 +137,7 @@ EOF
        fi
 
        cd ${KERN_BUILD_DIR}
-       rm -rf ${KERN_TEST_DIR}
+       if [ "$OMK_VERBOSE" != "1" ]; then rm -rf ${KERN_TEST_DIR}; fi
        ;;
 
 #=====================================================================
@@ -128,21 +154,38 @@ EOF
        fi
        cd ${KERN_TEST_DIR}
 
+       $CMD_ECHO Writing `pwd`/Makefile
        cat >${KERN_TEST_DIR}/Makefile <<EOF
+include $LINUX_DIR/include/config/auto.conf
+
+MODPOST_OPTS =                                  \\
+ \$(if \$(CONFIG_MODVERSIONS),-m)                  \\
+ \$(if \$(CONFIG_MODULE_SRCVERSION_ALL),-a,)       \\
+ \$(if \$(KBUILD_EXTMOD),-i,-o) \$(kernelsymfile)   \\
+ \$(if \$(KBUILD_EXTMOD),-I \$(modulesymfile))      \\
+ \$(if \$(KBUILD_EXTRA_SYMBOLS), \$(patsubst %, -e %,\$(EXTRA_SYMBOLS))) \\
+ \$(if \$(KBUILD_EXTMOD),-o \$(modulesymfile))      \\
+ \$(if \$(CONFIG_DEBUG_SECTION_MISMATCH),,-S)      \\
+ \$(if \$(CONFIG_MARKERS),-K \$(kernelmarkersfile)) \\
+ \$(if \$(CONFIG_MARKERS),-M \$(markersfile))   \\
+ \$(if \$(KBUILD_EXTMOD)\$(KBUILD_MODPOST_WARN),-w) \\
+ \$(if \$(cross_build),-c)
+
 obj-m += fake.o
 
 \$(obj)/fake.c: flags
        touch \$(obj)/fake.c
 
 ifeq (\$(KBUILD_SRC),)
-OMK_LINUX_SRC = \$(LINUXDIR)
+  OMK_LINUX_SRC = \$(LINUXDIR)
 else
-OMK_LINUX_SRC = \$(KBUILD_SRC)
+  OMK_LINUX_SRC = \$(KBUILD_SRC)
 endif
 #\$(warning Test \$OMK_LINUX_SRC)
 
 .PHONY: flags
 flags:
+       if [ "$OMK_VERBOSE" = "1" ]; then echo "Environment:" && env; fi
        @echo LINUX_SRC="\$(OMK_LINUX_SRC)" >>\$(obj)/flags
        @echo LINUX_ARCH="\$(ARCH)" >>\$(obj)/flags
        @echo LINUX_BUILDHOST="\$(KBUILD_BUILDHOST)" >>\$(obj)/flags
@@ -150,18 +193,26 @@ flags:
        @echo LINUX_ARFLAGS="\$(ARFLAGS)" >>\$(obj)/flags
        @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>\$(obj)/flags
        @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>\$(obj)/flags
+       @$CMD_ECHO CPPFLAGS="\$(CPPFLAGS)"
+       @$CMD_ECHO KBUILD_CPPFLAGS="\$(KBUILD_CPPFLAGS)"
+       @$CMD_ECHO AFLAGS="\$(AFLAGS)"
+       @$CMD_ECHO CFLAGS="\$(CFLAGS)"
+       @$CMD_ECHO KBUILD_CFLAGS="\$(KBUILD_CFLAGS)"
+       @$CMD_ECHO LINUXINCLUDE="\$(LINUXINCLUDE)"
+       @$CMD_ECHO CFLAGS_MODULE="\$(CFLAGS_MODULE)"
 ifdef KBUILD_CFLAGS
-       @echo LINUX_CPPFLAGS="\$(KBUILD_CPPFLAGS)\$(if \$(filter -I,\$(KBUILD_CPPFLAGS)),, \$(LINUXINCLUDE))" | sed 's#-I\(include\|arch\)#-I"\$(LINUXDIR)/\1"#g'>>\$(obj)/flags
+       @echo LINUX_CPPFLAGS="\$(KBUILD_CPPFLAGS)" | sed 's#-\(I\|include\) \?\(include\|arch\)#-\1 "\$(OMK_LINUX_SRC)/\2"#g'>>\$(obj)/flags
+       @echo LINUX_CPPFLAGS+="\$(LINUXINCLUDE)" | sed 's#-\(I\|include\) \?\(include\|arch\)#-\1 "\$(OMK_LINUX_SRC)/\2"#g'>>\$(obj)/flags
        @echo LINUX_AFLAGS="\$(KBUILD_AFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags
        @echo LINUX_CFLAGS="\$(KBUILD_CFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags
 else
-       @echo LINUX_CPPFLAGS="\$(CPPFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>\$(obj)/flags
+       @echo LINUX_CPPFLAGS="\$(CPPFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
        @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
        @echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
 endif
        @echo LINUX_CFLAGS_MODULE="\$(CFLAGS_MODULE)" >>\$(obj)/flags
        @echo LINUX_CC="\$(CC)" >>\$(obj)/flags
-       @echo LINUX_LD="\$(LD) \$(LDFLAGS) \$(LDFLAGS_MODULE)" | sed 's#\(\<arch/[^ ]*\.o\>\)#"\$(LINUXDIR)/\1"#g' >>\$(obj)/flags
+       @echo LINUX_LD="\$(LD) \$(LDFLAGS) \$(LDFLAGS_MODULE)" | sed 's#\(\<arch/[^ ]*\.o\>\)#"\$(OMK_LINUX_SRC)/\1"#g' >>\$(obj)/flags
        @echo LINUX_AS="\$(AS)" >>\$(obj)/flags
        @echo LINUX_AR="\$(AR)" >>\$(obj)/flags
        @echo LINUX_MODULE_EXT=".ko" >>\$(obj)/flags
@@ -174,21 +225,12 @@ endif
        @echo LINUX_KBUILD_EXTRA_SYMBOLS=\$(KBUILD_EXTRA_SYMBOLS) >>\$(obj)/flags
        @echo LINUX_KBUILD_MODPOST_WARN=\$(KBUILD_MODPOST_WARN) >>\$(obj)/flags
        @echo LINUX_CROSS_BUILD=\$(cross_build) >>\$(obj)/flags
-EOF
-
-       # modkern_cflags := $(CFLAGS_KERNEL) / $(CFLAGS_MODULE)
-
-       # _c_flags       = $(KBUILD_CFLAGS) $(ccflags-y) $(CFLAGS_$(basetarget).o)
-       # _a_flags       = $(KBUILD_AFLAGS) $(asflags-y) $(AFLAGS_$(basetarget).o)
-       # _cpp_flags     = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(@F))
+       @echo MODPOST_OPTS="\$(MODPOST_OPTS)" >> \$(obj)/flags
 
-       # export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
-       # export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
-       # export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
+EOF
 
-       #  -p V=1
-       #echo ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR} modules
-       ${MAKE} -C ${LINUX_DIR} M=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR}/modver modules
+#      ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR} KBUILD_VERBOSE=1 modules
+       ${MAKE} -C ${LINUX_DIR} M=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR}/modver KBUILD_VERBOSE=$OMK_VERBOSE modules
        #if [ $? == 0 ] ; then
                cp -v flags ${KERN_MODULES_DIR}/kernel.mk       
                if [ ! $? == 0 ] ; then
@@ -199,7 +241,7 @@ EOF
        #fi
 
        cd ${KERN_BUILD_DIR}
-       rm -rf ${KERN_TEST_DIR}
+       if [ "$OMK_VERBOSE" != "1" ]; then rm -rf ${KERN_TEST_DIR}; fi
        ;;
 
 #=====================================================================
index 956576fae042dece2b68e792cf91a1b21e5a78b4..f7337e59936906fdbca6858792d1180ec241f854 100644 (file)
@@ -6,6 +6,10 @@
 #  Homepage: http://rtime.felk.cvut.cz/omk/
 #  Version:  @git-describe@
 #
+#  Adapted by Tommaso Cucinotta, Scuola Superiore Sant'Anna, Pisa, Italy, for the
+#  Project Adaptive Quality of Service Architecture (AQuoSA)
+#  More information at: http://aquosa.sourceforge.net
+#
 # The OMK build system is distributed under the GNU General Public
 # License.  See file COPYING for details.
 #
 # V                .. if set to 1, full command text is shown else short form is used
 # W                .. whole tree - if set to 1, make is always called from the top-level directory
 # SUBDIRS          .. list of subdirectories intended for make from actual directory
+# kernel_SUBDIRS   .. subdirectories within which to propagate kernel targets
+# library_SUBDIRS  .. list of subdirectories within which to propagate library targets
+# include_SUBDIRS  .. list of subdirectories within which to propagate include pass (defaults to kernel_SUBDIRS + library_SUBDIRS)
+# binary_SUBDIRS   .. list of subdirectories within which to propagate binary targets
+# docs_SUBDIRS     .. list of subdirectories within which to propagate docs target
+# clean_SUBDIRS    .. list of subdirectories within which to propagate clean targets
 # default_CONFIG   .. list of default config assignments CONFIG_XXX=y/n ...
 
 # We need to ensure definition of sources directory first
@@ -22,6 +32,8 @@ ifndef SOURCES_DIR
 SOURCES_DIR := $(shell ( pwd -L ) )
 endif
 
+include $(MAKERULES_DIR)/variables.mk
+
 # If we are not called by OMK leaf Makefile...
 ifndef MAKERULES_DIR
 MAKERULES_DIR := $(abspath $(dir $(filter %Makefile.rules,$(MAKEFILE_LIST))))
@@ -78,12 +90,13 @@ endif
 ifneq ($(wildcard $(CONFIG_FILE)-default),)
 -include $(CONFIG_FILE)-default
 else
-ifneq ($(MAKECMDGOALS),default-config)
-$(warning Please, run "make default-config" first)
-endif
+#ifneq ($(MAKECMDGOALS),default-config)
+#$(warning Please, run "make default-config" first)
+#endif
 endif
 
 -include $(OUTPUT_DIR)/config.target
+-include $(MAKERULES_DIR)/variables.mk
 
 ifneq ($(wildcard $(CONFIG_FILE)),)
 -include $(CONFIG_FILE)
@@ -92,7 +105,7 @@ endif
 endif #$(CONFIG_FILE_OK)
 
 
-CONFIG_FILES ?= $(wildcard $(CONFIG_FILE)-default) $(wildcard $(OUTPUT_DIR)/config.target) $(wildcard $(CONFIG_FILE))
+CONFIG_FILES ?= $(wildcard $(CONFIG_FILE)-default) $(wildcard $(OUTPUT_DIR)/config.target) $(wildcard $(CONFIG_FILE)) $(wildcard $(MAKERULES_DIR)/variables.mk)
 
 
 export SOURCES_DIR MAKERULES_DIR RELATIVE_DIR
@@ -162,6 +175,9 @@ endif
 OMK_INCLUDED := 1
 endif
 
+all_SUBDIRS=$(kernel_SUBDIRS) $(library_SUBDIRS) $(binary_SUBDIRS) $(docs_SUBDIRS) $(clean_SUBDIRS) $(include_SUBDIRS) $(QT_SUBDIRS)
+include_SUBDIRS+=$(kernel_SUBDIRS) $(library_SUBDIRS)
+
 check-make-ver:
        @GOOD_MAKE_VERSION=`echo $(MAKE_VERSION) | sed -n -e 's/^[4-9]\..*\|^3\.9[0-9].*\|^3\.8[1-9].*/y/p'` ; \
        if [ x$$GOOD_MAKE_VERSION != xy ] ; then \
@@ -171,7 +187,7 @@ check-make-ver:
 
 distclean dist-clean:
        @$(QUIET_CMD_ECHO) "  RM      $(COMPILED_DIR_NAME) $(BUILD_DIR_NAME)"
-       @rm -fr $(OUTPUT_DIR)/$(COMPILED_DIR_NAME)  $(OUTPUT_DIR)/$(BUILD_DIR_NAME)
+       @rm -fr $(OUTPUT_DIR)/$(COMPILED_DIR_NAME)  $(OUTPUT_DIR)/$(BUILD_DIR_NAME) autom4te.cache config.log config.log config.status
 
 # Common OMK templates
 # ====================
@@ -228,10 +244,13 @@ extra-rules-subdirs:
 
 $(foreach subdir,$(EXTRA_RULES_SUBDIRS),$(eval $(call extra_rules_subdir_template,$(subdir))))
 
-# Usage: $(call omk_pass_template,<pass name>,<build dir>,[<local make flags>],[<local enable condition>])
+# Usage: $(call omk_pass_template,<pass name>,<build dir>,[<local make flags>],[<local enable condition>],[<pass directories>])
 define omk_pass_template
 .PHONY: $(pass) $(pass)-local $(pass)-check $(pass)-submakes
-$(foreach subdir,$(SUBDIRS),$(eval $(call omk_pass_subdir_template,$(pass),$(2),$(subdir))))
+# Produce in SUBDIRS_NODUPS a set of directories without duplicates
+SUBDIRS_NODUPS:=
+$(foreach x,$(SUBDIRS) $(5),$(eval SUBDIRS_NODUPS:=$(SUBDIRS_NODUPS:$(x)=) $(x)))
+$(foreach subdir,$(SUBDIRS_NODUPS),$(eval $(call omk_pass_subdir_template,$(pass),$(2),$(subdir))))
 $(pass):
 # Submakes have to be called this way and not as dependecies for pass
 # serialization to work
@@ -243,7 +262,7 @@ $(pass)-submakes:
 
 ifneq ($(4)$($(pass)_HOOKS),)
 $(pass)-submakes: $(pass)-this-dir
-$(pass)-this-dir: $(foreach subdir,$(SUBDIRS),$(pass)-$(subdir)-subdir)
+$(pass)-this-dir: $(foreach subdir,$(SUBDIRS_NODUPS),$(pass)-$(subdir)-subdir)
        +@echo "make[omk]: $(pass) in $(RELATIVE_DIR)"
        @$(call mkdir_def,$(2))
        +@$(MAKE) $(NO_PRINT_DIRECTORY) SOURCES_DIR=$(SOURCES_DIR) RELATIVE_DIR=$(RELATIVE_DIR) -C $(2) \
@@ -264,7 +283,7 @@ default-config:
                RELATIVE_DIR="" SOURCES_DIR=$(OUTPUT_DIR) \
                -f $(OUTPUT_DIR)/Makefile default-config-pass
 
-$(eval $(call omk_pass_template,default-config-pass,$$(LOCAL_BUILD_DIR),,always))
+$(eval $(call omk_pass_template,default-config-pass,$$(LOCAL_BUILD_DIR),,always,))
 
 default-config-pass-local:
 #      @echo Default config for $(RELATIVE_DIR)
index 9718d85b0d4cb4c3477c7f331191be11a30ea4c9..e0b34ff846cb96ab337582ed3600afc72b53f0e7 100644 (file)
@@ -7,6 +7,7 @@
 # DOXYGEN          .. if non-empty, generated headers includes Doxygen's @file
 #                    command, so it is possible to document config
 #                    variables.
+# docs_TARGETS     .. list of targets for building documentation
 
 # Syntax: $(call BUILD_CONFIG_H_template,<stamp_dir>,<header_file_path>,<list_of_options_to_export>,<header_barrier>)
 define BUILD_CONFIG_H_template
index 05978789cf2cefd1eed58950a6bd581844c68c33..c48312999e4fa4f84878838454f2b5fa69b24f51 100644 (file)
@@ -21,6 +21,7 @@ endif
 define include-pass-template
 include-pass-local: include-pass-local-$(2)
 include-pass-local-$(2): $$($(2)_GEN_HEADERS) $$(foreach f,$$(renamed_$(2)_GEN_HEADERS),$$(shell echo '$$(f)' | sed -e 's/^\(.*\)->.*$$$$/\1/'))
+       @mkdir -p $(1)
        @$$(foreach f, $$($(2)_HEADERS), cmp --quiet $$(SOURCES_DIR)/$$(f) $(1)/$$(notdir $$(f)) \
           || $$(call cp_cmd,$$(SOURCES_DIR)/$$(f),$(1)/$$(notdir $$(f))) || exit 1 ; )
        @$$(foreach f, $$($(2)_GEN_HEADERS), cmp --quiet $$(f) $(1)/$$(notdir $$(f)) \
index c5876b7c37967ee052c8d691a0bef81359603d32..e63b06048b2be522d92fe27b283fc52c85edee18 100644 (file)
@@ -7,9 +7,11 @@
 # kernel_LIBRARIES .. list of the kernel-space libraries
 # rtlinux_LIBRARIES.. list of the RT-Linux kernel-space libraries
 # include_HEADERS  .. list of the user-space public header files
+# include_DEST     .. root path of user-space includes
 # nobase_include_HEADERS .. public headers copied even with directory part
 # renamed_include_HEADERS .. public headers copied to the different target name
 # kernel_HEADERS   .. list of the kernel-space public header files
+# kernel_DEST      .. root path of kernel-space includes
 # rtlinux_HEADERS  .. list of the RT-Linux kernel-space public header files
 # bin_PROGRAMS     .. list of the require binary programs
 # utils_PROGRAMS   .. list of the development utility programs
 # kernel_MODULES   .. list of the kernel side modules/applications
 # rtlinux_MODULES  .. list of RT-Linux the kernel side modules/applications
 # xxx_SOURCES      .. list of specific target sources
-# xxx_LIBS         .. list of specific target libraries
+# xxx_CFLAGS       .. custom CFLAGS for .c modules of target xxx (in addition to CFLAGS)
+# xxx_CXXFLAGS     .. custom CXXFLAGS for .cpp/.cxx modules of target xxx (in addition to CXXFLAGS)
+# xxx_ASFLAGS      .. custom ASFLAGS for .S modules of target xxx (in addition to ASFLAGS)
+# xxx_LIBS         .. custom libraries for target xxx (in addition to LIBS)
+# xxx_DLFLAGS      .. custom LDFLAGS for target xxx (in addition to LDFLAGS)
 # INCLUDES         .. additional include directories and defines for user-space
 # kernel_INCLUDES  .. additional include directories and defines for kernel-space
 # rtlinux_INCLUDES .. additional include directories and defines for RT-Linux
@@ -80,13 +86,20 @@ USER_UTILS_DIR   := $(OUTPUT_DIR)/$(COMPILED_DIR_NAME)/bin-utils
 USER_TESTS_DIR   := $(OUTPUT_DIR)/$(COMPILED_DIR_NAME)/bin-tests
 USER_BIN_DIR     := $(OUTPUT_DIR)/$(COMPILED_DIR_NAME)/bin
 USER_BUILD_DIR   := $(OUTPUT_DIR)/$(BUILD_DIR_NAME)/user
+# SSSA: Support for documentation build
+USER_DOC_DIR     := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/documentation
 
 ifndef LINUX_VERSION
 LINUX_VERSION=$(shell uname -r)
 endif
 ifndef LINUX_DIR
+# Support for autoconf-provided kernel sources directory
+ifneq ($(kernel_sources),)
+LINUX_DIR=$(kernel_sources)
+else
 LINUX_DIR=/lib/modules/$(LINUX_VERSION)/build
 endif
+endif
 endif # OCERA_DIR
 
 ifeq ($(BUILD_OS),)
@@ -137,8 +150,12 @@ endif
 USER_OBJS_DIR = $(USER_BUILD_DIR)/$(RELATIVE_DIR)
 KERN_OBJS_DIR = $(KERN_BUILD_DIR)/$(RELATIVE_DIR)
 OMK_WORK_DIR  = $(USER_OBJS_DIR)
+# SSSA: Support for documentation build
+USER_DOCS_DIR = $(USER_DOC_DIR)/$(RELATIVE_DIR)
+
 
 .PHONY: dep subdirs clean clean-custom cleandepend check-dir
+.PHONY: sourceclean docs-pass
 
 # Some support to serialize some targets for parallel make
 ifneq ($(OMK_SERIALIZE_INCLUDED),y)
@@ -149,6 +166,7 @@ kernel-lib-pass: include-pass
 kernel-mod-pass: kernel-lib-pass
 kernel-modpost-pass: kernel-mod-pass
 kernel-pass: kernel-mod-pass kernel-modpost-pass
+docs-pass: check-dir
 
 override OMK_SERIALIZE_INCLUDED = y
 MAKEOVERRIDES := $(filter-out OMK_SERIALIZE_INCLUDED=n,$(MAKEOVERRIDES))
@@ -173,11 +191,16 @@ USER_SOURCES2OBJSLO = .lo/.c .lo/.cc .lo/.cxx .lo/.S .lo/.lo
 #%.lo: %.c
 #      $(CC) -o $@ $(LCFLAGS) -c $<
 
+# Workaround for gcc 4.1.x with -fstack-protector enabled by default, that causes the linker to fail
+# This is not needed for c_o_kern_COMPILE: kernelcfg2mk already grabs this in LINUX_CFLAGS from the kernel Makefile
+CFLAGS += $(shell if ($(CC) -dumpspecs | grep -e fno-stack-protector > /dev/null); then echo "-fno-stack-protector"; fi)
+CXXFLAGS += $(shell if ($(CC) -dumpspecs | grep -e fno-stack-protector > /dev/null); then echo "-fno-stack-protector"; fi)
+
 c_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -DOMK_FOR_USER
 
 cc_o_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -DOMK_FOR_USER
+       $(CPPFLAGS) $(AM_CFLAGS) $(CXXFLAGS) -DOMK_FOR_USER
 
 S_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(ASFLAGS) -DOMK_FOR_USER
@@ -188,6 +211,7 @@ idl_COMPILE = $(IDL_COMPILER)
 ifndef CC_MAJOR_VERSION
 CC_MAJOR_VERSION := $(shell $(CC) -dumpversion | sed -e 's/\([^.]\)\..*/\1/')
 endif
+
 # Prepare suitable define for dependency building
 ifeq ($(CC_MAJOR_VERSION),2)
 CC_DEPFLAGS = -Wp,-MD,"$@.d.tmp"
@@ -200,7 +224,7 @@ endif
 define COMPILE_c_o_template
 $(2): $(1) $$(GEN_HEADERS)
        @$(QUIET_CMD_ECHO) "  CC      $$@"
-       $(Q) if $$(c_o_COMPILE) $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
+       $(Q) if $$(c_o_COMPILE) $$(CC_DEPFLAGS) $$($(basename $(1))_CFLAGS) $(3) -o $$@ -c $$< ; \
        then mv -f "$$@.d.tmp" "$$@.d" ; \
        else rm -f "$$@.d.tmp" ; exit 1; \
        fi
@@ -211,7 +235,7 @@ endef
 define COMPILE_cc_o_template
 $(2): $(1) $$(GEN_HEADERS)
        @$(QUIET_CMD_ECHO) "  CXX     $$@"
-       $(Q) if $$(cc_o_COMPILE) $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
+       $(Q) if $$(cc_o_COMPILE) $$(CC_DEPFLAGS) $$($(basename $(1))_CXXFLAGS) $(3) -o $$@ -c $$< ; \
        then mv -f "$$@.d.tmp" "$$@.d" ; \
        else rm -f "$$@.d.tmp" ; exit 1; \
        fi
@@ -221,11 +245,11 @@ endef
 # Syntax: $(call COMPILE_S_o_template,<source>,<target>,<additional c-flags>)
 define COMPILE_S_o_template
 $(2): $(1) $$(GEN_HEADERS)
-       @$(QUIET_CMD_ECHO) "  AS      $$@"
-       $(Q) if $$(S_o_COMPILE) -D__ASSEMBLY__ $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
+        @$(QUIET_CMD_ECHO) "  AS      $$@"
+        $(Q) if $$(S_o_COMPILE) -D__ASSEMBLY__ $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
        then mv -f "$$@.d.tmp" "$$@.d" ; \
-       else rm -f "$$@.d.tmp" ; exit 1; \
-       fi
+        else rm -f "$$@.d.tmp" ; exit 1; \
+        fi
 endef
 
 
@@ -269,7 +293,7 @@ $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_IDL:%.idl=%.c))
 USER_GEN_SOURCES += $$($(1)_GEN_SOURCES)
 
 $(foreach x, $(USER_SOURCES2OBJS),
-$(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
+$(1)_OBJS += $$(patsubst %$(notdir $(x)),%-$(1)$(dir $(x)),$$(filter %$(notdir $(x)),\
                $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
 )
 $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
@@ -277,10 +301,16 @@ $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
 USER_OBJS  += $$($(1)_OBJS)
 USER_SOURCES += $$($(1)_SOURCES)
 
+$(foreach src,$(filter %.c,$($(1)_SOURCES) $($(1)_GEN_SOURCES)),$(eval $(call COMPILE_c_o_template,$(SOURCES_DIR)/$(src),$(src:%.c=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CFLAGS))))
+$(foreach src,$(filter %.cc,$($(1)_SOURCES) $($(1)_GEN_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CXXFLAGS))))
+$(foreach src,$(filter %.cxx,$($(1)_SOURCES) $($(1)_GEN_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CXXFLAGS))))
+$(foreach src,$(filter %.S,$($(1)_SOURCES) $($(1)_GEN_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%-$(1).o),$($(1)_ASFLAGS))))
+
 $(2)/$(1)$(3): $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  LINK    $$@"
        $(Q) $$(if $$(filter %.cc,$$($(1)_SOURCES:%.cxx=%.cc)),$$(CXX),$$(CC)) \
-         $$($(1)_OBJS) $$($(1)_LIBS:%=-l%) $$(LOADLIBES) $$(LDFLAGS) -Wl,-rpath-link,$(USER_LIB_DIR) -Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map -o $$@
+         $$($(1)_OBJS) $$($(1)_LIBS:%=-l%) $$(LOADLIBES) $$(CFLAGS) $$($(1)_CFLAGS) $$(LDFLAGS) $$($(1)_LDFLAGS) \
+         -Wl,-rpath-link,$(USER_LIB_DIR) -Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map -o $$@
        @echo "$(2)/$(1)$(3): \\" >$(USER_OBJS_DIR)/$(1).exe.d
        @sed -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(USER_OBJS_DIR)/$(1).exe.map|tr '&' '\134'  >>$(USER_OBJS_DIR)/$(1).exe.d
        @echo >>$(USER_OBJS_DIR)/$(1).exe.d
@@ -299,7 +329,7 @@ $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_IDL:%.idl=%.c))
 USER_GEN_SOURCES += $$($(1)_GEN_SOURCES)
 
 $(foreach x, $(USER_SOURCES2OBJS),
-$(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
+$(1)_OBJS += $$(patsubst %$(notdir $(x)),%-$(1)$(dir $(x)),$$(filter %$(notdir $(x)),\
                $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
 )
 $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
@@ -307,6 +337,11 @@ $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
 USER_OBJS  += $$($(1)_OBJS)
 USER_SOURCES += $$($(1)_SOURCES)
 
+$(foreach src,$(filter %.c,$($(1)_SOURCES) $($(1)_GEN_SOURCES)),$(eval $(call COMPILE_c_o_template,$(SOURCES_DIR)/$(src),$(src:%.c=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CFLAGS))))
+$(foreach src,$(filter %.cc,$($(1)_SOURCES) $($(1)_GEN_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CXXFLAGS))))
+$(foreach src,$(filter %.cxx,$($(1)_SOURCES) $($(1)_GEN_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CXXFLAGS))))
+$(foreach src,$(filter %.S,$($(1)_SOURCES) $($(1)_GEN_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%-$(1).o),$($(1)_ASFLAGS))))
+
 $(USER_LIB_DIR)/lib$(1).a: $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  AR      $$@"
        $(Q) $(AR) rcs $$@ $$^
@@ -326,7 +361,7 @@ $(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_IDL:%.idl=%.c))
 SOLIB_GEN_SOURCES += $$($(1)_GEN_SOURCES)
 
 $(foreach x, $(USER_SOURCES2OBJSLO),
-$(1)_OBJSLO += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
+$(1)_OBJSLO += $$(patsubst %$(notdir $(x)),%-$(1)$(dir $(x)),$$(filter %$(notdir $(x)),\
                $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
 )
 $(1)_OBJSLO := $$(sort $$($(1)_OBJSLO:%/=%))
@@ -334,8 +369,16 @@ $(1)_OBJSLO := $$(sort $$($(1)_OBJSLO:%/=%))
 SOLIB_OBJS  += $$($(1)_OBJSLO)
 SOLIB_SOURCES += $$($(1)_SOURCES)
 
+$(foreach src,$(filter %.c,$($(1)_SOURCES)$($(1)_GEN_SOURCES)),$(eval $(call COMPILE_c_o_template,$(SOURCES_DIR)/$(src),$(src:%.c=%-$(1).lo),$(SOLIB_PICFLAGS) $($(1)_CPPFLAGS) $($(1)_CFLAGS))))
+
+$(foreach src,$(filter %.cc,$($(1)_SOURCES)$($(1)_GEN_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%-$(1).lo),$(SOLIB_PICFLAGS) $($(1)_CPPFLAGS) $($(1)_CXXFLAGS))))
+
+$(foreach src,$(filter %.cxx,$($(1)_SOURCES)$($(1)_GEN_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%-$(1).lo),$(SOLIB_PICFLAGS) $($(1)_CPPFLAGS) $($(1)_CXXFLAGS))))
+
+$(foreach src,$(filter %.S,$($(1)_SOURCES)$($(1)_GEN_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%-$(1).lo),$(SOLIB_PICFLAGS) $($(1)_ASFLAGS))))
+
 $(OMK_WORK_DIR)/lib$(1).$(SOLIB_EXT).omkvar: $$($(1)_OBJSLO) FORCE
-       $(Q)echo '$(1)_objslo += $$$$(addprefix $(USER_OBJS_DIR)/,$$($(1)_OBJSLO))' > $$@.tmp; \
+       $(Q)echo '$(1)_OBJSLO += $$$$(addprefix $(USER_OBJS_DIR)/,$$($(1)_OBJSLO))' > $$@.tmp; \
            echo '$(1)_libs += $$($(1)_LIBS) $$(lib_LOADLIBES)' >> $$@.tmp; \
            echo 'shared_libs := $$$$(sort $(1) $$$$(shared_libs))' >> $$@.tmp; \
            if cmp -s $$@.tmp $$@; then rm $$@.tmp; else mv $$@.tmp $$@; fi
@@ -385,9 +428,9 @@ ifeq ($(MAKECMDGOALS),link-shared-libs)
 define solib_link_template
 $(1)_shared_libs = $$(patsubst %,$(USER_LIB_DIR)/lib%.$(SOLIB_EXT),$$(filter $$(shared_libs),$$($(1)_libs)))
 #$$(warning $(1)_shared_libs = $$($(1)_shared_libs))
-$(USER_LIB_DIR)/lib$(1).$(SOLIB_EXT): $$($(1)_shared_libs) $$($(1)_objslo)
+$(USER_LIB_DIR)/lib$(1).$(SOLIB_EXT): $$($(1)_shared_libs) $$($(1)_OBJSLO)
        @$(QUIET_CMD_ECHO) "  LINK    $$@"
-       $(Q)$(CC) --shared -Xlinker -soname=lib$(1).$(SOLIB_EXT) -Wl,-Map,$(USER_OBJS_DIR)/lib$(1).$(SOLIB_EXT).map -o $$@ $$($(1)_objslo) $$(LOADLIBES) $$($(1)_libs:%=-l%)
+       $(Q)$(CC) --shared -Xlinker -soname=lib$(1).$(SOLIB_EXT) -o $$@ $$($(1)_OBJSLO) $$(LOADLIBES) $$($(1)_libs:%=-l%)
 endef
 
 -include $(shell true; find $(USER_BUILD_DIR) -name 'lib*.omkvar') # `true' is a hack for MinGW
@@ -428,7 +471,7 @@ include $(KERN_LIB_DIR)/kernel.mk
 ifeq ($(LINUX_SRC),)
 LINUX_SRC = $(LINUX_DIR)
 endif
-kernel_INCLUDES += -I $(KERN_INCLUDE_DIR) -I $(LINUX_DIR) -idirafter $(LINUX_SRC)/include/linux
+kernel_INCLUDES += -I $(KERN_INCLUDE_DIR) -I $(LINUX_DIR)/include  -I $(LINUX_DIR) -idirafter $(LINUX_SRC)/include
 
 ifdef LINUX_CC
 KERN_CC = $(LINUX_CC)
@@ -438,7 +481,7 @@ KERN_CC = echo KERN_CC not defined - compilation skipped
 endif
 c_o_kern_COMPILE = $(KERN_CC) $(kernel_INCLUDES) -idirafter $(kern_GCCLIB_DIR)/include $(LINUX_CPPFLAGS) $(LINUX_CFLAGS) $(LINUX_CFLAGS_MODULE) -DOMK_FOR_KERNEL -DEXPORT_SYMTAB -nostdinc
 cc_o_kern_COMPILE = $(KERN_CC) $(kernel_INCLUDES) -idirafter $(kern_GCCLIB_DIR)/include $(LINUX_CPPFLAGS) $(LINUX_CFLAGS) $(LINUX_CFLAGS_MODULE) -DOMK_FOR_KERNEL -DEXPORT_SYMTAB
-S_o_kern_COMPILE = $(KERN_CC) $(kernel_INCLUDES) -idirafter $(kern_GCCLIB_DIR)/include $(LINUX_CPPFLAGS) $(LINUX_AFLAGS) $(LINUX_CFLAGS_MODULE) -DOMK_FOR_KERNEL -DEXPORT_SYMTAB -nostdinc
+S_o_kern_COMPILE = $(KERN_CC) $(kernel_INCLUDES) -idirafter $(kern_GCCLIB_DIR)/include $(LINUX_CPPFLAGS) $(LINUX_AFLAGS) $(LINUX_CFLAGS_MODULE) -DOMK_FOR_KERNEL -DEXPORT_SYMTAB
 KERN_EXE_SUFFIX := $(LINUX_MODULE_EXT)
 KERN_LDFLAGS = $(LINUX_LDFLAGS)
 ifdef LINUX_ARCH
@@ -525,7 +568,7 @@ define COMPILE_c_o_kern_template
 
 $(2): $(1)
        @$(QUIET_CMD_ECHO) "  CC [K]  $$@"
-       $(Q) if $$(c_o_kern_COMPILE) $$(kern_CC_DEPFLAGS) $(3) $(KERN_KBUILD_MODNAME) \
+       $(Q) if $$(c_o_kern_COMPILE) $$(kern_CC_DEPFLAGS) $$($(basename $(1))_CFLAGS) $(3) $(KERN_KBUILD_MODNAME) \
        -D"KBUILD_BASENAME=$(KERN_MQ)$(notdir $(basename $(1)))$(KERN_MQ)" \
        -o $$@ -c $$< ; \
        then mv -f "$$@.d.tmp" "$$@.d" ; \
@@ -539,7 +582,7 @@ define COMPILE_cc_o_kern_template
 
 $(2): $(1)
        @$(QUIET_CMD_ECHO) "  CXX [K] $$@"
-       $(Q) if $$(cc_o_kern_COMPILE) $$(kern_CC_DEPFLAGS) $(3) $(KERN_KBUILD_MODNAME) \
+       $(Q) if $$(cc_o_kern_COMPILE) $$(kern_CC_DEPFLAGS) $$($(basename $(1))_CXXFLAGS) $(3) $(KERN_KBUILD_MODNAME) \
        -D"KBUILD_BASENAME=$(KERN_MQ)$(notdir $(basename $(1)))$(KERN_MQ)" \
        -o $$@ -c $$< ; \
        then mv -f "$$@.d.tmp" "$$@.d" ; \
@@ -564,14 +607,19 @@ endef
 
 
 define MODULE_kern_template
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o))
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o))
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o))
+$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%-$(1).o))
+$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%-$(1).o))
+$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%-$(1).o))
 $(1)_OBJS := $$(sort $$($(1)_OBJS))
 
 KERN_OBJS  += $$($(1)_OBJS)
 KERN_SOURCES += $$($(1)_SOURCES)
 
+$(foreach src,$(filter %.c,$($(1)_SOURCES)),$(eval $(call COMPILE_c_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.c=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CFLAGS))))
+$(foreach src,$(filter %.cc,$($(1)_SOURCES)),$(eval $(call COMPILE_cc_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CXXFLAGS))))
+$(foreach src,$(filter %.cxx,$($(1)_SOURCES)),$(eval $(call COMPILE_cc_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CXXFLAGS))))
+$(foreach src,$(filter %.S,$($(1)_SOURCES)),$(eval $(call COMPILE_S_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.S=%-$(1).o),$($(1)_ASFLAGS))))
+
 # this is hack to build "__this_module" structure for 2.6.x kernels
 # modpost is used for that purpose now
 
@@ -616,14 +664,19 @@ endef
 
 
 define LIBRARY_kern_template
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o))
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o))
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o))
+$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%-$(1).o))
+$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%-$(1).o))
+$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%-$(1).o))
 $(1)_OBJS := $$(sort $$($(1)_OBJS))
 
 KERN_OBJS  += $$($(1)_OBJS)
 KERN_SOURCES += $$($(1)_SOURCES)
 
+$(foreach src,$(filter %.c,$($(1)_SOURCES)),$(eval $(call COMPILE_c_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.c=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CFLAGS))))
+$(foreach src,$(filter %.cc,$($(1)_SOURCES)),$(eval $(call COMPILE_cc_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CXXFLAGS))))
+$(foreach src,$(filter %.cxx,$($(1)_SOURCES)),$(eval $(call COMPILE_cc_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%-$(1).o),$($(1)_CPPFLAGS) $($(1)_CXXFLAGS))))
+$(foreach src,$(filter %.S,$($(1)_SOURCES)),$(eval $(call COMPILE_S_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.S=%-$(1).o),$($(1)_ASFLAGS))))
+
 $(KERN_LIB_DIR)/lib$(1).a: $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  AR [K]  $$@"
        $(Q) $(KERN_AR) rcs $$@ $$^
@@ -660,6 +713,7 @@ ifeq ($(KERN_MODPOST_PASS),y)
 MODULES_LIST :=        $(wildcard *.mod.stamp)
 MODULES_LIST := $(MODULES_LIST:%.mod.stamp=%)
 
+# Syntax: $(call MODPOST_kern_template,<module-name>,<module-dest-file>)
 define MODPOST_kern_template
 $(2) : $(1)$(KERN_LINK_SUFFIX) $(1).mod.c
        @$(QUIET_CMD_ECHO) "  LD [M]  $$@"
@@ -669,6 +723,10 @@ $(2) : $(1)$(KERN_LINK_SUFFIX) $(1).mod.c
        $(Q) $$(KERN_LD) $$(KERN_LDFLAGS) $(1)$(KERN_LINK_SUFFIX) $(1).mod.o -r -o $$@
 endef
 
+# SSSA: iteration on modpost invocation was added because passing
+#       all modules altogether to modpost was causing segfault (!?!).
+#       The final true command avoids reporting error due to modpost WARNINGs about unresolved
+#      module symbols (it doesn't know what modules are loaded together).
 kernel-modpost-versions: $(wildcard $(LINUX_DIR)/Module.symvers)
        @$(QUIET_CMD_ECHO) "  MODPOST    $(KERN_MODPOST_DIR)"
        @echo  >$(KERN_MODPOST_DIR)/modpost-running
@@ -695,8 +753,8 @@ ifneq ($(kernel_LIBRARIES)$(rtlinux_LIBRARIES)$(kernel_MODULES)$(rtlinux_MODULES
 KERN_CONFIG_HEADERS_REQUIRED = y
 endif
 
-$(eval $(call omk_pass_template, kernel-lib-pass,$(KERN_OBJS_DIR),KERN_RULE_TEMPLATES=y,$(kernel_LIBRARIES)$(rtlinux_LIBRARIES)))
-$(eval $(call omk_pass_template, kernel-mod-pass,$(KERN_OBJS_DIR),KERN_RULE_TEMPLATES=y,$(kernel_MODULES)$(rtlinux_MODULES)))
+$(eval $(call omk_pass_template, kernel-lib-pass,$(KERN_OBJS_DIR),KERN_RULE_TEMPLATES=y,$(kernel_LIBRARIES)$(rtlinux_LIBRARIES),$(kernel_SUBDIRS)))
+$(eval $(call omk_pass_template, kernel-mod-pass,$(KERN_OBJS_DIR),KERN_RULE_TEMPLATES=y,$(kernel_MODULES)$(rtlinux_MODULES),$(kernel_SUBDIRS)))
 
 kernel-modpost-pass:
        +@if [ -e "$(KERN_MODPOST_DIR)/module-changes" -o -e "$(KERN_MODPOST_DIR)/modpost-running" ] ; \
@@ -705,18 +763,22 @@ kernel-modpost-pass:
               -f $(SOURCES_DIR)/Makefile KERN_RULE_TEMPLATES=y KERN_MODPOST_PASS=y $(@:%=%-local) ; \
        fi
 
-$(eval $(call omk_pass_template, library-pass,$(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(lib_LIBRARIES)$(shared_LIBRARIES)))
-$(eval $(call omk_pass_template, binary-pass, $(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(bin_PROGRAMS)$(utils_PROGRAMS)$(test_PROGRAMS)))
+$(eval $(call omk_pass_template, library-pass,$(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(lib_LIBRARIES)$(shared_LIBRARIES),$(library_SUBDIRS)))
+$(eval $(call omk_pass_template, binary-pass, $(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(bin_PROGRAMS)$(utils_PROGRAMS)$(test_PROGRAMS),$(binary_SUBDIRS)))
 
-$(eval $(call omk_pass_template,clean,$(USER_OBJS_DIR),,always))
-$(eval $(call omk_pass_template,install,$(USER_OBJS_DIR),,always))
-$(eval $(call omk_pass_template,include-pass,$(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,always))
+$(eval $(call omk_pass_template,clean,$(USER_OBJS_DIR),,always,$(all_SUBDIRS)))
+$(eval $(call omk_pass_template,install,$(USER_OBJS_DIR),,always,$(install_SUBDIRS)))
+$(eval $(call omk_pass_template,include-pass,$(USER_OBJS_DIR),,always,$(include_SUBDIRS)))
+$(eval $(call omk_pass_template,docs-pass,$(USER_OBJS_DIR),,always,$(docs_SUBDIRS)))
+$(eval $(call omk_pass_template,sourceclean,$(USER_OBJS_DIR),,always,$(all_SUBDIRS)))
 
 check-dir::
        @$(call mkdir_def,$(USER_BUILD_DIR))
        @$(call mkdir_def,$(KERN_BUILD_DIR))
        @$(call mkdir_def,$(USER_INCLUDE_DIR))
+       @$(call mkdir_def,$(USER_INCLUDE_DIR)/$(include_DEST))
        @$(call mkdir_def,$(KERN_INCLUDE_DIR))
+       @$(call mkdir_def,$(KERN_INCLUDE_DIR)/$(kernel_DEST))
        @$(call mkdir_def,$(USER_LIB_DIR))
        @$(call mkdir_def,$(KERN_LIB_DIR))
        @$(call mkdir_def,$(USER_BIN_DIR))
@@ -724,13 +786,14 @@ check-dir::
        @$(call mkdir_def,$(USER_TESTS_DIR))
        @$(call mkdir_def,$(KERN_MODULES_DIR))
        @$(call mkdir_def,$(KERN_MODPOST_DIR))
+       @$(call mkdir_def,$(USER_DOC_DIR))
 
 install-local:                 # TODO
 
-$(eval $(call include-pass-template,$(USER_INCLUDE_DIR),include))
-$(eval $(call include-pass-template,$(KERN_INCLUDE_DIR),kernel))
+$(eval $(call include-pass-template,$(USER_INCLUDE_DIR)/$(include_DEST),include))
+$(eval $(call include-pass-template,$(KERN_INCLUDE_DIR)/$(kernel_DEST),kernel))
 ifeq ($(CONFIG_RTLINUX),y)
-$(eval $(call include-pass-template,$(KERN_INCLUDE_DIR),rtlinux))
+$(eval $(call include-pass-template,$(KERN_INCLUDE_DIR)/$(rtlinux_DEST),rtlinux))
 endif
 
 
@@ -744,16 +807,6 @@ USER_GEN_SOURCES := $(sort $(USER_GEN_SOURCES))
 
 #$(warning USER_SOURCES = $(USER_SOURCES))
 
-$(foreach src,$(filter %.c,$(USER_SOURCES)),$(eval $(call COMPILE_c_o_template,$(SOURCES_DIR)/$(src),$(src:%.c=%.o),)))
-
-$(foreach src,$(filter %.cc,$(USER_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%.o),)))
-
-$(foreach src,$(filter %.cxx,$(USER_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.o),)))
-
-$(foreach src,$(filter %.S,$(USER_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.o),)))
-
-$(foreach src,$(filter %.c,$(USER_GEN_SOURCES)),$(eval $(call COMPILE_c_o_template,$(src),$(src:%.c=%.o),)))
-
 # User-space shared libraries object files
 
 SOLIB_SOURCES := $(sort $(SOLIB_SOURCES))
@@ -763,16 +816,6 @@ SOLIB_GEN_SOURCES := $(sort $(SOLIB_GEN_SOURCES))
 #$(warning SOLIB_SOURCES = $(SOLIB_SOURCES))
 #$(warning SOLIB_GEN_SOURCES = $(SOLIB_GEN_SOURCES))
 
-$(foreach src,$(filter %.c,$(SOLIB_SOURCES)),$(eval $(call COMPILE_c_o_template,$(SOURCES_DIR)/$(src),$(src:%.c=%.lo),$(SOLIB_PICFLAGS))))
-
-$(foreach src,$(filter %.cc,$(SOLIB_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%.lo),$(SOLIB_PICFLAGS))))
-
-$(foreach src,$(filter %.cxx,$(SOLIB_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.lo),$(SOLIB_PICFLAGS))))
-
-$(foreach src,$(filter %.S,$(SOLIB_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.lo),$(SOLIB_PICFLAGS))))
-
-$(foreach src,$(filter %.c,$(SOLIB_GEN_SOURCES)),$(eval $(call COMPILE_c_o_template,$(src),$(src:%.c=%.lo),$(SOLIB_PICFLAGS))))
-
 # IDL compilation
 
 USER_IDLS := $(sort $(USER_IDLS))
@@ -787,13 +830,6 @@ KERN_SOURCES := $(sort $(KERN_SOURCES))
 
 #$(warning KERN_SOURCES = $(KERN_SOURCES))
 
-$(foreach src,$(filter %.c,$(KERN_SOURCES)),$(eval $(call COMPILE_c_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.c=%.o),)))
-
-$(foreach src,$(filter %.cc,$(KERN_SOURCES)),$(eval $(call COMPILE_cc_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%.o),)))
-
-$(foreach src,$(filter %.cxx,$(KERN_SOURCES)),$(eval $(call COMPILE_cc_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.o),)))
-
-$(foreach src,$(filter %.S,$(USER_SOURCES)),$(eval $(call COMPILE_S_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.o),)))
 endif
 
 clean-local: clean-custom
@@ -814,9 +850,16 @@ include-pass-submakes: extra-rules-subdirs
 # We must go to EXTRA_RULES_SUBDIRS before going to any other
 # directory, since the executables compiled in EXTRA_RULES_SUBDIRS
 # might be needed there.
-include-pass-this-dir $(foreach subdir,$(SUBDIRS),include-pass-$(subdir)-subdir): extra-rules-subdirs
+include-pass-this-dir $(foreach subdir,$(SUBDIRS) $(include_SUBDIRS),include-pass-$(subdir)-subdir): extra-rules-subdirs
+
+AC_GEN_FILES:=$(wildcard $(SOURCES_DIR)/*.in)
+sourceclean-local:
+       cd $(SOURCES_DIR) \
+       && rm -f *~ .*~ .*.o.cmd .*.ko.cmd .*.o.d .*.o.tmp *.bak *.o *.ko *.mod.c config.omk-default .config semantic.cache $(AC_GEN_FILES:.in=) .\#* \
+       && rm -rf .tmp_versions Modules.symvers \
+       && rm -rf autom4te.cache config.status config.log
 
-default: include-pass library-pass binary-pass
+default: include-pass library-pass binary-pass docs-pass
 ifndef OMIT_KERNEL_PASSES
 # Also make kernel passes if not disabled
 default: kernel-lib-pass kernel-pass
index 8f3cc4819cd7b9d6fcfed5fe14ec5de07783f26e..a1f7617237706b49323bf476c4f607f28ec17cc2 100644 (file)
@@ -35,7 +35,7 @@ $(SOURCES_LIST): $(CONFIG_FILES) $(shell find -name $(MAKEFILE_OMK))
        @mv "$(SOURCES_LIST_D).tmp2" "$(SOURCES_LIST_D)"
 endif
 
-$(eval $(call omk_pass_template,sources-list-pass,$$(LOCAL_BUILD_DIR),,always))
+$(eval $(call omk_pass_template,sources-list-pass,$$(LOCAL_BUILD_DIR),,always,))
 
 sources-list-pass-local:
        @$(foreach m,$(MAKEFILE_LIST),echo '  $(m)' >> "$(SOURCES_LIST_D).tmp";)