summaryrefslogtreecommitdiff
path: root/scripts/Makefile.build
AgeCommit message (Collapse)Author
2006-03-12kbuild: add -fverbose-asm to i386 MakefileChuck Ebbert
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>
2006-03-12kbuild: fix genksyms build errorSam Ravnborg
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>
2006-03-06kbuild: change kbuild to not rely on incorrect GNU make behaviorPaul Smith
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>
2006-02-19kbuild: consolidate command line escapingJan Beulich
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>
2006-02-19kbuild: make cc-version available in kbuild filesSam Ravnborg
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>
2006-01-06kbuild: introduce escsq to escapre single quotesSam Ravnborg
This makes things a little bit more reader friendly and gvim is less confused. Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
2005-07-27kbuild: fix building external modulesSam Ravnborg
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>
2005-07-25kbuild: fix make O=...Sam Ravnborg
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> ---
2005-07-25kbuild: introduce Kbuild.includeSam Ravnborg
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> ---
2005-07-14kbuild: Fix build as root then userSam Ravnborg
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>
2005-06-23[PATCH] apply quotation handling to Makefile.buildJan Beulich
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>
2004-12-29kbuild: Use -isystem `gcc --print-file-name=include`Sam Ravnborg
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>
2004-11-04Merge mars.ravnborg.org:/home/sam/bk/linux-2.6Sam Ravnborg
into mars.ravnborg.org:/home/sam/bk/to-akpm
2004-11-03kbuild: Prefer Kbuild as name of the kbuild filesSam Ravnborg
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>
2004-10-30Make sparse pick up the gcc internal include directory automatically.Linus Torvalds
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.
2004-08-29kbuild: Solaris fixes in various kbuild Makfiles'sTom Rini
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>
2004-08-19kbuild/all archs: added CHECKFLAGSSam Ravnborg
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>
2004-08-18kbuild: make C=2 now force sparse to be run for all .c filesSam Ravnborg
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>
2004-08-16kbuild: Allow external modules to use host-progs with no warningSam Ravnborg
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>
2004-08-15kbuild: Generate *.lds instead of *.lds.sSam Ravnborg
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>
2004-08-11kbuild: Introduce hostprogs-y, deprecate host-progsSam Ravnborg
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>
2004-08-11kbuild: Separate out host-progs handlingSam Ravnborg
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>
2004-03-15[PATCH] Fix early parallel make failuresAndrew Morton
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
2004-02-26[PATCH] Add a MODULE_VERSION macroAndrew Morton
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.
2003-10-04[PATCH] Fix Linux 2.5 -> Linux 2.6Rusty Russell
From: Holger Schurig <h.schurig@mn-logistik.de>
2003-09-11kbuild: Separate output directorySam Ravnborg
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
2003-08-17[PATCH] Move config tasks to kconfig/MakefileSam Ravnborg
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.
2003-06-07[PATCH] be more flexible about creating library archivesSam Ravnborg
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.
2003-06-04kbuild: Silence kbuild with make V=0Sam Ravnborg
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.
2003-05-07Use the right CFLAGS for source checking. Fix grammar.Linus Torvalds
2003-05-07Support a "checking" mode for kernel builds, that runs aLinus Torvalds
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!)
2003-03-11kbuild: build-targets replaced with alwaysSam Ravnborg
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
2003-03-10kbuild: Introduced extra-y, as replacement for EXTRA_TARGETSSam Ravnborg
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.
2003-03-05[PATCH] kbuild: touch-module after successfull creation onlySam Ravnborg
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.
2003-02-19kbuild: [PATCH] adapt genksyms for current kbuildKai Germaschewski
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
2003-02-14kbuild: Figure endianness / word size at compile timeKai Germaschewski
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.
2003-02-14kbuild: Always postprocess modulesKai Germaschewski
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.
2003-02-10kbuild: sed compatibility fixesKai Germaschewski
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>]*.
2003-02-08kbuild: Modversions fixKai Germaschewski
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.
2003-02-08kbuild: Warn on obsolete export-objs useKai Germaschewski
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.
2003-02-08kbuild: Handle external SUBDIRS with modversionsKai Germaschewski
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.
2003-02-03Merge tp1.ruhr-uni-bochum.de:/scratch/kai/kernel/v2.5/linux-2.5.make-samKai Germaschewski
into tp1.ruhr-uni-bochum.de:/scratch/kai/kernel/v2.5/linux-2.5.make
2003-02-03kbuild: Rename CONFIG_MODVERSIONING -> CONFIG_MODVERSIONSKai Germaschewski
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.
2003-01-27kbuild: ld_flags used consistently in Makefile.buildSam Ravnborg
2003-01-27kbuild: Made cmd_link_multi readableSam Ravnborg
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
2003-01-24kbuild: Don't build final .ko yet when descending with CONFIG_MODVERSIONINGKai Germaschewski
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
2003-01-24kbuild: Always link module (.ko) from associated (.o)Kai Germaschewski
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.
2003-01-24kbuild: Generate versions for exported symbolsKai Germaschewski
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.
2003-01-24kbuild: Remove -DEXPORT_SYMTAB switchKai Germaschewski
rusty's module rewrite removed the reference to EXPORT_SYMTAB from linux/module.h, and it's not used anywhere else, either.
2003-01-14Module Sanity CheckKai Germaschewski
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.