Commit a95ca5a9 authored by Kai Germaschewski's avatar Kai Germaschewski

kbuild: Improve output and error behavior when making modversions.

Reduce the amount of output in verbose (default) mode and stop
immediately on error.

(Sam Ravnborg/me)
parent 5c4498f1
...@@ -131,6 +131,10 @@ else ...@@ -131,6 +131,10 @@ else
genksyms_smp_prefix := genksyms_smp_prefix :=
endif endif
# Don't include modversions.h, we're just about to generate it here.
CFLAGS_MODULE := $(filter-out -include $(HPATH)/linux/modversions.h,$(CFLAGS_MODULE))
$(addprefix $(MODVERDIR)/,$(real-objs-y:.o=.ver)): modkern_cflags := $(CFLAGS_KERNEL) $(addprefix $(MODVERDIR)/,$(real-objs-y:.o=.ver)): modkern_cflags := $(CFLAGS_KERNEL)
$(addprefix $(MODVERDIR)/,$(real-objs-m:.o=.ver)): modkern_cflags := $(CFLAGS_MODULE) $(addprefix $(MODVERDIR)/,$(real-objs-m:.o=.ver)): modkern_cflags := $(CFLAGS_MODULE)
$(addprefix $(MODVERDIR)/,$(export-objs:.o=.ver)): export_flags := -D__GENKSYMS__ $(addprefix $(MODVERDIR)/,$(export-objs:.o=.ver)): export_flags := -D__GENKSYMS__
...@@ -145,18 +149,34 @@ c_flags = -Wp,-MD,$(depfile) $(CFLAGS) $(NOSTDINC_FLAGS) \ ...@@ -145,18 +149,34 @@ c_flags = -Wp,-MD,$(depfile) $(CFLAGS) $(NOSTDINC_FLAGS) \
# files changes # files changes
quiet_cmd_cc_ver_c = MKVER include/linux/modules/$(RELDIR)/$*.ver quiet_cmd_cc_ver_c = MKVER include/linux/modules/$(RELDIR)/$*.ver
define cmd_cc_ver_c cmd_cc_ver_c = $(CPP) $(c_flags) $< | $(GENKSYMS) $(genksyms_smp_prefix) \
mkdir -p $(dir $@); \ -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp
$(CPP) $(c_flags) $< | $(GENKSYMS) $(genksyms_smp_prefix) \
-k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp; \ # Okay, let's explain what's happening in rule_make_cc_ver_c:
# o echo the command
# o execute the command
# o If the $(CPP) fails, we won't notice because it's output is piped
# to $(GENKSYMS) which does not fail. We recognize this case by
# looking if the generated $(depfile) exists, though.
# o If the .ver file changed, touch modversions.h, which is our maker
# of any changed .ver files.
# o Move command line and deps into their normal .*.cmd place.
define rule_cc_ver_c
$(if $($(quiet)cmd_cc_ver_c),echo ' $($(quiet)cmd_cc_ver_c)';) \
$(cmd_cc_ver_c); \
if [ ! -r $(depfile) ]; then exit 1; fi; \
$(TOPDIR)/scripts/fixdep $(depfile) $@ $(TOPDIR) '$(cmd_cc_ver_c)' > $(@D)/.$(@F).tmp; \
rm -f $(depfile); \
if [ ! -r $@ ] || cmp -s $@ $@.tmp; then \ if [ ! -r $@ ] || cmp -s $@ $@.tmp; then \
touch $(TOPDIR)/include/linux/modversions.h; \ touch $(TOPDIR)/include/linux/modversions.h; \
fi; \ fi; \
mv -f $@.tmp $@ mv -f $@.tmp $@
mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd
endef endef
$(MODVERDIR)/%.ver: %.c FORCE $(MODVERDIR)/%.ver: %.c FORCE
@$(call if_changed_dep,cc_ver_c) @$(call if_changed_rule,cc_ver_c)
targets := $(addprefix $(MODVERDIR)/,$(export-objs:.o=.ver)) targets := $(addprefix $(MODVERDIR)/,$(export-objs:.o=.ver))
...@@ -456,6 +476,17 @@ if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\ ...@@ -456,6 +476,17 @@ if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\
rm -f $(depfile); \ rm -f $(depfile); \
mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd) mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd)
# Usage: $(call if_changed_rule,foo)
# will check if $(cmd_foo) changed, or any of the prequisites changed,
# and if so will execute $(rule_foo)
if_changed_rule = $(if $(strip $? \
$(filter-out $(cmd_$(1)),$(cmd_$@))\
$(filter-out $(cmd_$@),$(cmd_$(1)))),\
@set -e; \
mkdir -p $(dir $@); \
$(rule_$(1)))
# If quiet is set, only print short version of command # If quiet is set, only print short version of command
cmd = @$(if $($(quiet)$(1)),echo ' $($(quiet)$(1))' &&) $($(1)) cmd = @$(if $($(quiet)$(1)),echo ' $($(quiet)$(1))' &&) $($(1))
...@@ -143,7 +143,7 @@ void grow_config(int len) ...@@ -143,7 +143,7 @@ void grow_config(int len)
size_config = 2048; size_config = 2048;
str_config = realloc(str_config, size_config *= 2); str_config = realloc(str_config, size_config *= 2);
if (str_config == NULL) if (str_config == NULL)
{ perror("malloc"); exit(1); } { perror("fixdep:malloc"); exit(1); }
} }
} }
...@@ -259,6 +259,7 @@ void do_config_file(char *filename) ...@@ -259,6 +259,7 @@ void do_config_file(char *filename)
fd = open(filename, O_RDONLY); fd = open(filename, O_RDONLY);
if (fd < 0) { if (fd < 0) {
fprintf(stderr, "fixdep: ");
perror(filename); perror(filename);
exit(2); exit(2);
} }
...@@ -269,7 +270,7 @@ void do_config_file(char *filename) ...@@ -269,7 +270,7 @@ void do_config_file(char *filename)
} }
map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if ((long) map == -1) { if ((long) map == -1) {
perror("mmap"); perror("fixdep: mmap");
close(fd); close(fd);
return; return;
} }
...@@ -326,6 +327,7 @@ void print_deps(void) ...@@ -326,6 +327,7 @@ void print_deps(void)
fd = open(depfile, O_RDONLY); fd = open(depfile, O_RDONLY);
if (fd < 0) { if (fd < 0) {
fprintf(stderr, "fixdep: ");
perror(depfile); perror(depfile);
exit(2); exit(2);
} }
...@@ -337,7 +339,7 @@ void print_deps(void) ...@@ -337,7 +339,7 @@ void print_deps(void)
} }
map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if ((long) map == -1) { if ((long) map == -1) {
perror("mmap"); perror("fixdep: mmap");
close(fd); close(fd);
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment