| Age | Commit message (Collapse) | Author |
|
Add -fverbose-asm to i386 Makefile rule for building .s files. This makes
the assembler output much more readable for humans.
Suggested by Der Herr Hofrat <der.herr@hofr.at>
Signed-off-by: Chuck Ebbert <76306.1226@compuserve.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
genksyms needs to know when a symbol must have a "_" prefex as is
true for a few architectures.
Pass $(ARCH) as commandline argument and hardcode what architectures that
needs this info.
Previous attemt to take it from elfconfig.h was br0ken since elfconfig.h
is a generated file.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
The kbuild system takes advantage of an incorrect behavior in GNU make.
Once this behavior is fixed, all files in the kernel rebuild every time,
even if nothing has changed. This patch ensures kbuild works with both
the incorrect and correct behaviors of GNU make.
For more details on the incorrect behavior, see:
http://lists.gnu.org/archive/html/bug-make/2006-03/msg00003.html
Changes in this patch:
- Keep all targets that are to be marked .PHONY in a variable, PHONY.
- Add .PHONY: $(PHONY) to mark them properly.
- Remove any $(PHONY) files from the $? list when determining whether
targets are up-to-date or not.
Signed-off-by: Paul Smith <psmith@gnu.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
While the recent change to also escape # symbols when storing C-file
compilation command lines was helpful, it should be in effect for all
command lines, as much as the dollar escaping should be in effect for
C-source compilation commands. Additionally, for better readability and
maintenance, consolidating all the escaping (single quotes, dollars,
and now sharps) was also desirable.
Signed-Off-By: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
Move $(CC) support functions to Kbuild.include so they are available
in the kbuild files.
In addition the following was done:
o as-option documented in Documentation/kbuild/makefiles.txt
o Moved documentation to new section to match
new scope of functions
o added cc-ifversion used to conditionally select a text string
dependent on actual $(CC) version
o documented cc-ifversion
o change so Kbuild.include is read before the kbuild file
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
This makes things a little bit more reader friendly and gvim is less
confused.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
kbuild failed to locate Makefile for external modules.
This brought to my attention how the variables for directories
have different values in different usage scenarios.
Different kbuild usage scenarios:
make - plain make in same directory where kernel source lives
make O= - kbuild is told to store output files in another directory
make M= - building an external module
make O= M= - building an external module with kernel output seperate from src
Value assigned to the different variables:
|$(src) |$(obj) |$(srctree) |$(objtree)
make |reldir to k src |as src |abs path to k src |abs path to k src
make O= |reldir to k src |as src |abs path to k src |abs path to output dir
make M= |abs path to src |as src |abs path to k src |abs path to k src
make O= M= |abs path to src |as src |abs path to k src |abs path to k output
path to kbuild file:
make | $(srctree)/$(src), $(src)
make O= | $(srctree)/$(src)
make M= | $(src)
make O= M= | $(src)
From the table above it can be seen that the only good way to find the
home directory of the kbuild file is to locate the one of the two variants
that is an absolute path. If $(src) is an absolute path (starts with /)
then use it, otherwise prefix $(src) with $(srctree).
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
kbuild failed to locate Kbuild.include.
Teach kbuild how to find Kbuild files when using make O=...
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
|
|
Kbuild.include is a placeholder for definitions originally present in
both the top-level Makefile and scripts/Makefile.build.
There were a slight difference in the filechk definition, so the most videly
used version was kept and usr/Makefile was adopted for this syntax.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
|
|
From: Matthew Wilcox <matthew@wil.cx>
I inadvertently built a tree as root and then rebuilt it as a user. I
got a lot of prompts ...
mv: overwrite `drivers/char/drm/drm_auth.o', overriding mode 0644?
Using mv -f fixes that.
Signed-off-by: Matthew Wilcox <matthew@wil.cx>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
Adding quotation handling to rule_cc_o_c in scripts/Makefile.build as used
elsewhere.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
|
|
Using "-nostdinc -isystem `gcc --print-file-name=include" let
us see full path to compiler specific files when compiling with make V=1
Furthermore it lets us use same definition for sparse (CHECKFLAGS) and the kernel.
Tested with gcc 3.3.4 only.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
into mars.ravnborg.org:/home/sam/bk/to-akpm
|
|
The kbuild syntax is unique and does only have very few things in common with
usual Makefile syntax. So to avoid confusion make the filename 'Kbuild' be
the preferred name as replacement for 'Makefile'.
No global renaming planned to take place for now, but new stuff expected to use
the new 'Kbuild' filename.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
m68k used to do this by hand, but it really ends up being needed
for any environment that does cross-builds, so just do it
unconditionally.
This should mean that you never need to cross-build sparse or
have any other hacks for checking a cross-built environment.
|
|
Additional Makefile fixes for Solaris 2.8
On Solaris, 'head' doesn't take a -q argument. But we can use 'grep -h'
instead, so do that in Makefile.mod{inst,post}. The built-in test to
/bin/sh doesn't like 'if ! cmd' syntax, so when determining if we need
to do modversion stuff, invert the if/else cases. The built-in test
also doesn't understand -ef, so invoke a real version of test which does.
Signed-off-by: Tom Rini <trini@kernel.crashing.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
Using separate assignment for CHECKFLAGS allows convenient redefinition of CHECK
on the command line:
make CHECK=~/bin64/sparse C=2
to use a special 64 bit version.
Introduced usage in all archs that assined values to CHECK.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
With make C=2 sparse ($(CHECK)) will be run on all .c files also if they
do not need to be compiled.
Usefull to run sparse on a fully compiled kernel tree.
Implemented on request from Al Viro (although he liked to be able to
run sparse without building any source).
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
Only warn if $(host-progs) and $(hostptogs-y) are not equal.
This allows external modules to use:
hostprogs-y := file ...
host-progs := $(hostprogs-y)
This is backwards compatible and will not warn.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
When building a kernel on platforms where the filesytem do
not distingush between upper and lower case the rule:
.S -> .s did not work.
In a normal build this is only used for linker scripts.
So create a separate rule for .lds files, and use generic cpp flags.
Patch from: Dan Aloni <da-x@colinux.org>
Modified to use cpp flags + added documentation.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
Introducing hostprogs-y allows a user to use the typical Kbuild
pattern in a Kbuild file:
hostprogs-$(CONFIG_KALLSYMS) += ...
And then during cleaning the referenced file are still deleted.
Deprecate the old host-progs assignment but kept the functionlity.
External modules will continue to use host-progs for a while - drawback is
that they now see a warning.
Workaround - just assign both variables:
hostprogs-y := foo
host-progs := $(hostprogs-y)
All in-kernel users will be converted in next patch.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
Concentrating all host-progs functionality in one file made a more
readable Makefile.lib - and allow for potential reuse of host-progs
functionality.
Processing of host-progs related stuff are avoided when no host-progs are specified.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
From: Sam Ravnborg <sam@ravnborg.org>
Ingo said:
Starting at around 2.6.4-rc2-mm1, I keep seeing 'scripts/fixdep: Text
file busy' messages when doing a -j10 bzImage build - which seems to
suggest that by the time fixdep is used by the build system it's not
built yet.
Sam said:
I was pretty sure it was something I had caused, so I gave it a spin. What
actually happened was that we tried to build the target 'silentoldconfig'
in parrallel with 'scripts'. Since 'silentoldconfig' started a new make
and then the config target needed 'scripts' we saw two parallel runs.
The way I decided to fix it was to split scripts/ in two parts. The first
part is now the very basic stuff - moved to scripts/basic/. The second
part is dependent on kernel config etc. and kept in scripts/
In the 2.7 timeframe i will redo this initial stuff - it's becoming too
messy for anyone to understand today.
Description:
Fix dependencies in early phases of kernel build. This solves a few
problems nively: modpost is no longer rebuild twicewhen reaching the
'target' state 'make -j10' now works nicely again
The patch is rather large due to the following file moves:
mkdir scripts/basic
mv scripts/fixdep.c scripts/basic
mv scripts/split-include.c scripts/basic
mv scripts/docproc.c scripts/basic
|
|
From: Rusty Russell <rusty@au1.ibm.com>
The way it works is that the .mod file contains the name of the module (as
before), but succeeding lines are the constituent parts (assumed to be .c
files, which usually works: if they use MODULE_VERSION in a file for which
this isn't true we'll get a warning).
As we postprocess modules, we look in the .modinfo section for a
"version=", which is placed by the MODULE_VERSION() macro. This will be of
form "version=<macroarg>" "\0" [24 chars] "\0". The 24 chars are replaced
by the md4 sum of the .c files and any files they #include using '#include
"file"' which are found in the current directory. Whitespace is collapsed
outside strings, and comments are ignored for purposes of the sum.
The result is a .modinfo entry such as
version=1.16ac-rustytest B13E9451C4CA3B89577DEFF
At the kernel summit, various people asked for a MODULE_VERSION macro to
store module strings (for later access through sysfs). A simple md4 is
needed to identify changes in modules which, inevitably, do not update the
version. It skips whitespace and comments, and includes #includes which
are in the same dir.
The module versions should be set according to this definition, based on
the RPM one, or CVS Revision tags. Violators will be shot.
[<epoch>`:']<version>[`-'<extraversion>]
<epoch>: A (small) unsigned integer which allows you to start versions
anew. If not mentioned, it's zero. eg. "2:1.0" is after
"1:2.0".
<version>: The <version> may contain only alphanumerics.
<extraversion>: Like <version>, but inserted for local
customizations, eg "rh3" or "rusty1".
Comparison of two versions (assuming same epoch):
Split each into all-digit and all-alphabetical parts. Compare each one one
at a time: digit parts numerically, alphabetical in ASCII order. So 0.10
comes after 0.9.
|
|
From: Holger Schurig <h.schurig@mn-logistik.de>
|
|
Separate output directory support enables the following (at least):
o Building several configurations from the same SRC base, and in parrallel
o Building from a RO media
o More efficient build if files are retreived via NFS (files stored locally)
Usage is simple:
cd /path/to/kernel/src
mkdir ~/build/kernel
make O=~/build/kernel [Make options]
Please note: The O= syntax must be used for ALL invocations of make.
As an alternative you may set KBUILD_OUTPUT to the directory where
to put the output files.
The patch works for me, and I have tried with various configurations,
including allnoconfig and defconfig.
How it works:
If the O= option is used, or KBUILD_OUTPUT is set then a second invocation
of make happens in the output directory.
The second invocation of make uses VPATH to tell make where to locate
the files. Furthermore include options for gcc is modifyied to point
both in the directory where the kernel src is located, and in the
directory where the output files are located. The latter is used for
generated .h files.
When building the kernel the asm symlink is created. To support this
a new 'include2' directory is created. Within include2/ asm is a symlink to
the asm-$(ARCH) directory in the kernel src.
Also when building the kernel the asm-offset.h file is created, and
located in the include/asm-$(ARCH) directory, but included via
<asm/asm-offset.h>.
Therefore within include/ another asm symlink is created pointing to
the asm-$(ARCH) directory located in the output directory.
In Makefile.build the output directory is created if not already present.
This was needed to support xfs, and oprofile.
The patch is loosly based on ideas from Kai G. Roman Zippel
introduced support for this in kconfig long time ago
|
|
This fixes a bug with multiple targets.
Olaf Hering reported that the build failed for PowerPc if used like
this: make oldconfig zImage
The reason for this was that .config was not present for any targets
specified in arch/$(ARCH)/Makefile and below.
That's because .config would not be included when oldconfig is present
in the list of targets. The fix is to move handling of *config task to
the kconfig/Makefile. Furthermore the logic in top-level makefile has
changed a bit, creating a more logial structure. When building a fresh
kernel, the user is now told that .config is missing, not an anonymous
report that .config did not exist.
The error has survided this long because the targets used in i386/boot
in general does not use CONFIG_ symbols.
Olaf Hering has tested this patch with success.
|
|
New makefile variable introduced: lib-y
The lib-y syntax allows you to do the usual tricks such as:
lib-$(CONFIG_SMP) += percpu_counter.o
A built-in.o is always present in a directory that list .o files in
either obj-* or lib-*.
In contrast, lib.a is made only when lib-y is defined.
I also updated lib/Makefile, so that crc32.o is now always built-in
if selected.
|
|
With make version 3.80 kbuild echo'ed the fixdep command
executed each time a c file was compiled.
This has been tracked down to a bug in version 3.80 of make.
Avoiding newlines in canned command sequences avoid this problem.
At the same time consolidated similar code in Makefile.build,
and avoiding a few ifdef/endif pairs resulting in a more readable makefile.
|
|
|
|
user-supplied source checker on all C files before compiling
them.
I'll release the actual checker once I've cleaned it up a
bit more (yay, all the copyright paperwork completed!)
|
|
The former name "kbuild-targets" did not give the user the intuitive feeling
that this target will be build regards less of any dependencies
no matter if we compile modules or not.
The new name "always" imply that this will be build always, and
tus is more informative.
Fixed the few users of build-targets, and added a warning in Makefile.build
|
|
EXTRA_TARGETS has been overloaded with functionality.
This is now split in two:
targets := list targets kbuild did not know of otherwise
extra-y := list targets to be build when not building modules only.
extra-y is mainly used to list .o files that is not to be included
in the fnal built-in.o file for a directory.
|
|
On Mon, Mar 03, 2003 at 05:11:10PM -0500, Bill Davidsen wrote:
> scripts/Makefile.modinst:16: *** Uh-oh, you have stale module entries. You
messed with SUBDIRS, do not complain if something goes wrong.
This happens if you have encountered a compile error in a module.
In this case you did not succeed the compilation of fs/binfmt_aout,
and therefore no .o file can be located.
kbuild assumes this is because you have messed with SUBDIRS, which is wrong.
|
|
By Rusty Russell.
o generate output in a form feasible as linker script instead of
munging it with sed during the build
o remove checksum version 1 support
o remove prefix support
|
|
The helper file2alias had to jump through a lot of hoops because it did not
know the host and target endianness / word size at compile time.
We now build a small header scripts/elfconfig.h which contains this
information for file2alias to use.
|
|
Currently, we are doing the final module link (.ko) at different places
(Makefile.build vs Makefile.modver) depending on CONFIG_MODVERSIONS.
Apart from being confusing, that also means we have this code path
duplicated, and the modversions path most likely gets little testing.
It's actually cleaner to just do the final link from Makefile.modver always,
performance-wise it's not a noticable difference, since we don't descend
in that step, but just use the list of modules generated during the build.
This step is also preliminary for doing additional postprocessing, e.g.
generating module alias information from PCI / USB device tables.
|
|
Some versions of sed seem to think \w, as in word, doesn't include
digits, which breaks the build with CONFIG_MODVERSIONS. So we
just use the more compatible [<space><tab>]*.
|
|
We're still using the old genksyms binary, that's why we have to
postprocess the output to convert it into a linker script - that
postprocessing got confused by "__verify_write".
Kick out the grep, do it all and correctly within sed.
Bug reported by Thomas Molina.
|
|
Setting export-objs is not necessary anymore, so warn on encountering it
to prevent it from creeping back in ;)
Also, make the error when we find someone still using O_TARGET non-fatal,
so that people sharing stuff between 2.4 and 2.5 don't have more hassle
than necessary.
|
|
We need to collect a list of all modules during the recursive build. I used
a "touch .tmp_versions/<path/to/module.ko>" to do so, which however doesn't
work so well, when path/to isn't inside the kernel tree.
The best way to build external modules is currently using kbuild by saying
"make SUBDIRS=/some/external/dir modules", which was thus broken. While this
way is not all that optimal and I hope to come up with something better
before 2.6, it works and should keep working, so this patch fixes the usage
above.
Instead of touching files with the entire path added, we just create a
<module>.mod file in $(MODVERDIR) now, and save the path to the module.ko
in it. Since module names are unique, a flat hierarchy is actually fine here.
|
|
into tp1.ruhr-uni-bochum.de:/scratch/kai/kernel/v2.5/linux-2.5.make
|
|
CONFIG_MODVERSIONING was a temporary name introduced to distinguish
between the old and new module version implementation. Since the
traces of the old implementation are now gone from the build system,
we rename the config option back in order to not confuse users more
than necessary in 2.6.
Also, remove some historic modversions cruft throughout the tree.
|
|
|
|
Introduced ld_flags, and separated out the common parts of link_multi
for normal and module objects.
Added a bit of a comment as well
|
|
With CONFIG_MODVERSIONING, we need to record the versions of the unresolved
symbols in the final <module>.ko, which we only know after we finished
the descending build. So we only build <module>.o in that case.
Also, keep track of the modules we built, the post-processing step needs
a list of all modules. Keeping track is done by touching
.tmp_versions/path/to/module.ko
|
|
For extracting the versions and finding the unresolved symbols, we
need multi-part modules to be linked together already, so this
patch separates the building of the modules as a .o file from generating
the .ko in the next step.
|
|
Up to now, we had a way to store the checksums associated with the
exported symbols, but they were not filled in yet. This is done
with this patch, using the linker to actually do that for us.
The comment added with this patch explains what magic exactly is going
on.
|
|
rusty's module rewrite removed the reference to EXPORT_SYMTAB
from linux/module.h, and it's not used anywhere else, either.
|
|
This patch, based on Rusty's implementation, adds a special section
to vmlinux and all modules, which contain the kernel version
string, values of some particularly important config options
(SMP,preempt,proc family) and the gcc version.
When inserting a module, the version string is checked against the
kernel version string and loading is rejected if they don't match.
The version string is actually added to the modules during the
final .ko generation, so that a changed version string does only
cause relinking, not recompilation, which is a major performance
improvement over the old 2.4 way of doing things.
|