From 628bd48e3f017f7f0e67da76d89463ba3297d9f6 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Wed, 29 Apr 2009 10:16:12 +0200 Subject: [PATCH] Adaptation for AQuoSA 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 | 102 ++++++++++++++++------- snippets/base.omk | 37 +++++++-- snippets/config_h.omk | 1 + snippets/include.omk | 1 + snippets/linux.omk | 171 ++++++++++++++++++++++++-------------- snippets/sources-list.omk | 2 +- 6 files changed, 210 insertions(+), 104 deletions(-) diff --git a/rules/linux/kernelcfg2mk b/rules/linux/kernelcfg2mk index be7d1f5..3049764 100755 --- a/rules/linux/kernelcfg2mk +++ b/rules/linux/kernelcfg2mk @@ -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 <>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 <>\$(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#\(\\)#"\$(LINUXDIR)/\1"#g' >>\$(obj)/flags + @echo LINUX_LD="\$(LD) \$(LDFLAGS) \$(LDFLAGS_MODULE)" | sed 's#\(\\)#"\$(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 ;; #===================================================================== diff --git a/snippets/base.omk b/snippets/base.omk index 956576f..f7337e5 100644 --- a/snippets/base.omk +++ b/snippets/base.omk @@ -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. # @@ -14,6 +18,12 @@ # 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,,,[],[]) +# Usage: $(call omk_pass_template,,,[],[],[]) 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) diff --git a/snippets/config_h.omk b/snippets/config_h.omk index 9718d85..e0b34ff 100644 --- a/snippets/config_h.omk +++ b/snippets/config_h.omk @@ -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,,,,) define BUILD_CONFIG_H_template diff --git a/snippets/include.omk b/snippets/include.omk index 0597878..c483129 100644 --- a/snippets/include.omk +++ b/snippets/include.omk @@ -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)) \ diff --git a/snippets/linux.omk b/snippets/linux.omk index c5876b7..e63b060 100644 --- a/snippets/linux.omk +++ b/snippets/linux.omk @@ -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 @@ -17,7 +19,11 @@ # 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,,,) 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,,) 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 diff --git a/snippets/sources-list.omk b/snippets/sources-list.omk index 8f3cc48..a1f7617 100644 --- a/snippets/sources-list.omk +++ b/snippets/sources-list.omk @@ -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";) -- 2.39.2