Commit 850b830c authored by Rusty Russell's avatar Rusty Russell Committed by Andy Grover

[PATCH] KBUILD_MODNAME define for build system

By Kai Germaschewski.

This patch adds a -DKBUILD_MODNAME to the kernel compile, which
contains the base of the module name which is being built.

 - Some sreorganization of the c_flags since they're needed for
   generating modversions (.ver) and compiling
 - Use the right KBUILD_MODNAME also when the user just wants a .i/.s/.lst
   file for debugging and also when generating modversions
 - It looks like with your current approach you can't have a ',' or '-' in
   KBUILD_MODNAME - however, that means that KBUILD_MODNAME is not quite
   right for passing module parameters for built-in modules on the command
   line, it would be confusing to pass parameters for ide-cd as
   ide_cd.foo=whatever. So that part could use a little more thought.
 - If you think your module_names trick makes a noticable difference, feel
   free to re-add it.
 - It's possible that objects are linked into more than one module - I
   suppose this shouldn't be a problem, since these objects hopefully
   don't have a module_init() nor do they export symbols. Not sure if your
   patch did handle this.
parent df993fb5
......@@ -79,6 +79,8 @@
* with BSD names.
*/
#undef unix /* KBUILD_MODNAME */
#include <linux/module.h>
#include <linux/config.h>
#include <linux/kernel.h>
......
......@@ -56,6 +56,7 @@ modkern_cflags := $(CFLAGS_KERNEL)
$(real-objs-m) : modkern_cflags := $(CFLAGS_MODULE)
$(real-objs-m:.o=.i) : modkern_cflags := $(CFLAGS_MODULE)
$(real-objs-m:.o=.s) : modkern_cflags := $(CFLAGS_MODULE)
$(real-objs-m:.o=.lst): modkern_cflags := $(CFLAGS_MODULE)
$(export-objs) : export_flags := $(EXPORT_FLAGS)
......@@ -63,10 +64,17 @@ $(export-objs:.o=.i) : export_flags := $(EXPORT_FLAGS)
$(export-objs:.o=.s) : export_flags := $(EXPORT_FLAGS)
$(export-objs:.o=.lst): export_flags := $(EXPORT_FLAGS)
c_flags = -Wp,-MD,$(depfile) $(CFLAGS) $(NOSTDINC_FLAGS) \
$(modkern_cflags) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o) \
-DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) \
$(export_flags)
# Default for not multi-part modules
modname = $(*F)
$(multi-objs-m) : modname = $(modname-multi)
$(multi-objs-m:.o=.i) : modname = $(modname-multi)
$(multi-objs-m:.o=.s) : modname = $(modname-multi)
$(multi-objs-m:.o=.lst) : modname = $(modname-multi)
$(multi-objs-y) : modname = $(modname-multi)
$(multi-objs-y:.o=.i) : modname = $(modname-multi)
$(multi-objs-y:.o=.s) : modname = $(modname-multi)
$(multi-objs-y:.o=.lst) : modname = $(modname-multi)
quiet_cmd_cc_s_c = CC $@
cmd_cc_s_c = $(CC) $(c_flags) -S -o $@ $<
......
......@@ -5,6 +5,8 @@
# Standard vars
comma := ,
empty :=
space := $(empty) $(empty)
# Figure out what we need to build from the various variables
# ===========================================================================
......@@ -40,11 +42,13 @@ __obj-m = $(filter-out export.o,$(obj-m))
# if $(foo-objs) exists, foo.o is a composite object
multi-used-y := $(sort $(foreach m,$(__obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m))))
multi-used-m := $(sort $(foreach m,$(__obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m))))
multi-used := $(multi-used-y) $(multi-used-m)
# Build list of the parts of our composite objects, our composite
# objects depend on those (obviously)
multi-objs-y := $(foreach m, $(multi-used-y), $($(m:.o=-objs)) $($(m:.o=-y)))
multi-objs-m := $(foreach m, $(multi-used-m), $($(m:.o=-objs)) $($(m:.o=-y)))
multi-objs := $(multi-objs-y) $(multi-objs-m)
# $(subdir-obj-y) is the list of objects in $(obj-y) which do not live
# in the local directory
......@@ -112,6 +116,23 @@ host-cshobjs := $(addprefix $(obj)/,$(host-cshobjs))
# contain a comma
depfile = $(subst $(comma),_,$(@D)/.$(@F).d)
# These flags are needed for modversions and compiling, so we define them here
# already
# $(modname_flags) #defines KBUILD_MODNAME as the name of the module it will
# end up in (or would, if it gets compiled in)
# Note: It's possible that one object gets potentially linked into more
# than one module. In that case KBUILD_MODNAME will be set to foo_bar,
# where foo and bar are the name of the modules.
basename_flags = -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F)))
modname_flags = -DKBUILD_MODNAME=$(subst $(comma),_,$(subst -,_,$(modname)))
c_flags = -Wp,-MD,$(depfile) $(CFLAGS) $(NOSTDINC_FLAGS) \
$(modkern_cflags) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o) \
$(basename_flags) $(modname_flags) $(export_flags)
# Finds the multi-part object the current object will be linked into
modname-multi = $(subst $(space),_,$(strip $(foreach m,$(multi-used),\
$(if $(filter $(*F).o,$($(m:.o=-objs))),$(m:.o=)))))
# Shipped files
# ===========================================================================
......
......@@ -48,11 +48,10 @@ CFLAGS_MODULE := $(filter-out -include include/linux/modversions.h,$(CFLAGS_MODU
$(addprefix $(MODVERDIR)/,$(real-objs-y:.o=.ver)): modkern_cflags := $(CFLAGS_KERNEL)
$(addprefix $(MODVERDIR)/,$(real-objs-m:.o=.ver)): modkern_cflags := $(CFLAGS_MODULE)
$(addprefix $(MODVERDIR)/,$(export-objs:.o=.ver)): export_flags := -D__GENKSYMS__
# Default for not multi-part modules
modname = $(*F)
c_flags = -Wp,-MD,$(depfile) $(CFLAGS) $(NOSTDINC_FLAGS) \
$(modkern_cflags) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o) \
-DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) \
$(export_flags)
$(addprefix $(MODVERDIR)/,$(multi-objs:.o=.ver)) : modname = $(modname-multi)
# Our objects only depend on modversions.h, not on the individual .ver
# files (fix-dep filters them), so touch modversions.h if any of the .ver
......
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