summaryrefslogtreecommitdiffstats
path: root/Rules.make
diff options
context:
space:
mode:
Diffstat (limited to 'Rules.make')
-rw-r--r--Rules.make75
1 files changed, 44 insertions, 31 deletions
diff --git a/Rules.make b/Rules.make
index 0d429a30d..87845cb40 100644
--- a/Rules.make
+++ b/Rules.make
@@ -22,11 +22,14 @@ unexport O_TARGET
unexport O_OBJS
unexport L_OBJS
unexport M_OBJS
+# intermediate objects that form part of a module
+unexport MI_OBJS
unexport ALL_MOBJS
# objects that export symbol tables
unexport OX_OBJS
unexport LX_OBJS
unexport MX_OBJS
+unexport MIX_OBJS
unexport SYMTAB_OBJS
unexport MOD_LIST_NAME
@@ -44,6 +47,9 @@ first_rule: sub_dirs
%.s: %.c
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -S $< -o $@
+%.i: %.c
+ $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -E $< > $@
+
%.o: %.c
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<
@@ -67,7 +73,7 @@ ifneq "$(strip $(ALL_O))" ""
else
$(AR) rcs $@
endif
-endif
+endif # O_TARGET
#
# Rule to compile a set of .o files into one .a file
@@ -82,8 +88,7 @@ endif
# This make dependencies quickly
#
fastdep: dummy
- if [ -n "$(wildcard *.[chS])" ]; then \
- $(TOPDIR)/scripts/mkdep *.[chS] > .depend; fi
+ $(TOPDIR)/scripts/mkdep *.[chS] > .depend
ifdef ALL_SUB_DIRS
set -e; for i in $(ALL_SUB_DIRS); do $(MAKE) -C $$i fastdep; done
endif
@@ -103,10 +108,13 @@ ALL_MOBJS = $(MX_OBJS) $(M_OBJS)
ifneq "$(strip $(ALL_MOBJS))" ""
PDWN=$(shell $(CONFIG_SHELL) $(TOPDIR)/scripts/pathdown.sh)
endif
-modules: $(ALL_MOBJS) dummy
+modules: $(ALL_MOBJS) $(MIX_OBJS) $(MI_OBJS) dummy
ifdef MOD_SUB_DIRS
set -e; for i in $(MOD_SUB_DIRS); do $(MAKE) -C $$i modules; done
endif
+ifdef MOD_IN_SUB_DIRS
+ set -e; for i in $(MOD_IN_SUB_DIRS); do $(MAKE) -C $$i modules; done
+endif
ifneq "$(strip $(MOD_LIST_NAME))" ""
rm -f $$TOPDIR/modules/$(MOD_LIST_NAME)
ifdef MOD_SUB_DIRS
@@ -116,6 +124,9 @@ endif
ifneq "$(strip $(ALL_MOBJS))" ""
echo $(ALL_MOBJS) >> $$TOPDIR/modules/$(MOD_LIST_NAME)
endif
+ifneq "$(strip $(MOD_TO_LIST))" ""
+ echo $(MOD_TO_LIST) >> $$TOPDIR/modules/$(MOD_LIST_NAME)
+endif
endif
ifneq "$(strip $(ALL_MOBJS))" ""
echo $(PDWN)
@@ -140,57 +151,59 @@ script:
# Separate the object into "normal" objects and "exporting" objects
# Exporting objects are: all objects that define symbol tables
#
+ifdef CONFIG_MODULES
+
+SYMTAB_OBJS = $(LX_OBJS) $(OX_OBJS) $(MX_OBJS) $(MIX_OBJS)
+
ifdef CONFIG_MODVERSIONS
-SYMTAB_OBJS = $(LX_OBJS) $(OX_OBJS) $(MX_OBJS)
ifneq "$(strip $(SYMTAB_OBJS))" ""
MODINCL = $(TOPDIR)/include/linux/modules
-# The -w option (enable warnings) for /bin/genksyms will return here in 2.1
+# The -w option (enable warnings) for genksyms will return here in 2.1
$(MODINCL)/%.ver: %.c
- @if [ ! -x /sbin/genksyms ]; then echo "Please read: Documentation/modules.txt"; fi
- $(CC) $(CFLAGS) -E -D__GENKSYMS__ $< | /sbin/genksyms $(MODINCL)
-
+ $(CC) $(CFLAGS) -E -D__GENKSYMS__ $<\
+ | $(GENKSYMS) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp
+ mv $@.tmp $@
+
$(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h
$(TOPDIR)/include/linux/modversions.h: $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver))
@echo updating $(TOPDIR)/include/linux/modversions.h
- @(echo "#ifdef MODVERSIONS";\
- echo "#undef CONFIG_MODVERSIONS";\
- echo "#define CONFIG_MODVERSIONS";\
- echo "#ifndef _set_ver";\
- echo "#define _set_ver(sym,vers) sym ## _R ## vers";\
- echo "#endif";\
- cd $(TOPDIR)/include/linux/modules; for f in *.ver;\
- do echo "#include <linux/modules/$${f}>"; done; \
- echo "#undef CONFIG_MODVERSIONS";\
- echo "#endif") \
- > $(TOPDIR)/include/linux/modversions.h
-
-$(MX_OBJS): $(TOPDIR)/include/linux/modversions.h
- $(CC) $(CFLAGS) -DEXPORT_SYMTAB -c $(@:.o=.c)
-
-$(LX_OBJS) $(OX_OBJS): $(TOPDIR)/include/linux/modversions.h
- $(CC) $(CFLAGS) -DMODVERSIONS -DEXPORT_SYMTAB -c $(@:.o=.c)
+ @(echo "#ifndef _LINUX_MODVERSIONS_H";\
+ echo "#define _LINUX_MODVERSIONS_H"; \
+ echo "#include <linux/modsetver.h>"; \
+ cd $(TOPDIR)/include/linux/modules; \
+ for f in *.ver; do \
+ if [ -f $$f ]; then echo "#include <linux/modules/$${f}>"; fi; \
+ done; \
+ echo "#endif"; \
+ ) > $@
dep fastdep: $(TOPDIR)/include/linux/modversions.h
-endif
+endif # SYMTAB_OBJS
+
$(M_OBJS): $(TOPDIR)/include/linux/modversions.h
ifdef MAKING_MODULES
$(O_OBJS) $(L_OBJS): $(TOPDIR)/include/linux/modversions.h
endif
-# This is needed to ensure proper dependency for multipart modules such as
-# fs/ext.o. (Otherwise, not all subobjects will be recompiled when
-# version information changes.)
else
$(TOPDIR)/include/linux/modversions.h:
- @touch $(TOPDIR)/include/linux/modversions.h
+ @echo "#include <linux/modsetver.h>" > $@
+
+endif # CONFIG_MODVERSIONS
+ifneq "$(strip $(SYMTAB_OBJS))" ""
+$(SYMTAB_OBJS): $(TOPDIR)/include/linux/modversions.h $(SYMTAB_OBJS:.o=.c)
+ $(CC) $(CFLAGS) -DEXPORT_SYMTAB -c $(@:.o=.c)
endif
+endif # CONFIG_MODULES
+
+
#
# include dependency files they exist
#