Not hard, just expensive. From kbuild 2.5.
# FIXME: Current kernel source includes linux/version.h, mainly to get
# KERNEL_VERSION(). version.h also includes UTS_RELEASE which changes every
# time the kernel identifiers change. The presence of UTS_RELEASE in version.h
# causes lots of unnecessary recompilations, very few places actually want
# UTS_RELEASE. The new makefile generates separate linux/version.h and
# linux/uts_release.h, with version.h including utsname.h to avoid compilation
# errors. Find all the source code that needs just UTS_RELEASE and change it to
# include uts_release.h, then remove #include <linux/uts_release.h> from the
# commands below. KAO
There are less than 10 places in the kernel that really need
UTS_RELEASE. Alas it is defined in version.h which is included by 99%
of the code, either directly or indirectly. Change the top level
Makefile and 99% of the kernel gets recompiled.
I have deliberately not fixed this problem in kbuild 2.4. The full
dependency chain goes Makefile -> version.h -> everything else.
Removing the dependency of Makefile -> version.h looks like a good
idea, but it exposes potential bugs that are currently hidden by the
extra recompiles.
Remove that dependency and other changes to Makefile such as target
changes will not cause rebuilds when they should. kbuild 2.4 does not
have a complete list of dependencies on the top level Makefile, it
works by accident because of the chain Makefile -> version.h -> 99% of
the kernel.
All fixed in kbuild 2.5, of course.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/