diff options
| author | Rusty Russell <rusty@rustcorp.com.au> | 2002-11-10 17:08:01 -0800 |
|---|---|---|
| committer | Andy Grover <agrover@groveronline.com> | 2002-11-10 17:08:01 -0800 |
| commit | 850b830c9639af788e2917aed3aea8d8bb9da1a1 (patch) | |
| tree | 067ac5a5834db26ad942b7bbeb606881fbe6dd0a /scripts | |
| parent | df993fb5bcde92a5e8a8a087131b58042be7c8a0 (diff) | |
[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.
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/Makefile.build | 16 | ||||
| -rw-r--r-- | scripts/Makefile.lib | 21 | ||||
| -rw-r--r-- | scripts/Makefile.modver | 7 |
3 files changed, 36 insertions, 8 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 3408beb5995f..cff89d7fe7b2 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -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 $@ $< diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 636c97d52d28..ab209ad5830e 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -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 # =========================================================================== diff --git a/scripts/Makefile.modver b/scripts/Makefile.modver index 92f54fa99211..6f9c56dd32a8 100644 --- a/scripts/Makefile.modver +++ b/scripts/Makefile.modver @@ -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 |
