2006-01-09 21:12:16

by Sam Ravnborg

[permalink] [raw]
Subject: [GIT PATCHES] kbuild updates

Hi Linus.

Please pull from:
ssh://master.kernel.org/pub/scm/linux/kernel/git/sam/kbuild.git

Important changes:
o do not build vmlinux as part of make install.
Error out if file is missing
o no longer use git as part of make install

The changes has not been in -mm, But most are trivial and it works for
me.
The lxdialog change is a preparation for linking in lxdialog with
menuconfig.

Sam

Documentation/kbuild/makefiles.txt | 4 -
Kbuild | 6 -
Makefile | 99 +++++++++++++++--------------
arch/frv/boot/Makefile | 5 -
arch/i386/Makefile | 9 +-
arch/i386/boot/Makefile | 2
arch/i386/boot/install.sh | 14 ++++
arch/ia64/Makefile | 7 --
arch/powerpc/Makefile | 6 -
arch/ppc/Makefile | 4 -
arch/x86_64/Makefile | 5 +
arch/x86_64/boot/Makefile | 2
arch/x86_64/boot/install.sh | 41 ------------
fs/xfs/Kbuild | 7 +-
scripts/kconfig/lxdialog/Makefile | 48 +++-----------
scripts/kconfig/lxdialog/check-lxdialog.sh | 68 +++++++++++++++++++
scripts/mod/file2alias.c | 3
scripts/reference_discarded.pl | 7 +-
scripts/setlocalversion | 3
19 files changed, 182 insertions(+), 158 deletions(-)

Brian Gerst:
kbuild: clean up asm-offsets.h creation
modpost/file2alias: Fix typo

Dave Jones:
kbuild: reference_discarded addition

H. Peter Anvin:
kbuild: drop vmlinux dependency from "make install"

Ryan Anderson:
kbuild: In setlocalversion change -git_dirty to just -dirty

Sam Ravnborg:
kconfig: factor out ncurses check in a shell script
kbuild: remove GCC_VERSION
frv: Use KERNELRELEASE
kbuild/xfs: introduce fs/xfs/Kbuild
kbuild: KERNELRELEASE is only re-defined when buiding the kernel

Tore Anderson:
kbuild: ensure mrproper removes .old_version


2006-01-09 21:38:41

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 03/11] modpost/file2alias: Fix typo

From: Brian Gerst <[email protected]>
Date: 1136735635 -0500

SND_MAX should be FF_MAX

Signed-off-by: Brian Gerst <[email protected]>
Signed-off-by: Sam Ravnborg <[email protected]>

---

scripts/mod/file2alias.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

cc6fa432f5eec26c43fd06c0314cb1c2cae6d9a1
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index e0eedff..be97caf 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -417,7 +417,7 @@ static int do_input_entry(const char *fi
do_input(alias, id->sndbit, 0, SND_MAX);
sprintf(alias + strlen(alias), "f*");
if (id->flags&INPUT_DEVICE_ID_MATCH_FFBIT)
- do_input(alias, id->ffbit, 0, SND_MAX);
+ do_input(alias, id->ffbit, 0, FF_MAX);
sprintf(alias + strlen(alias), "w*");
if (id->flags&INPUT_DEVICE_ID_MATCH_SWBIT)
do_input(alias, id->swbit, 0, SW_MAX);
--
1.0.GIT

2006-01-09 21:38:21

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 01/11] kconfig: factor out ncurses check in a shell script


Cleaning up the lxdialog Makefile by factoring out the
ncurses compatibility checks.
This made the checks much more obvious and easier to extend.

Signed-off-by: Sam Ravnborg <[email protected]>

---

scripts/kconfig/lxdialog/Makefile | 48 +++++---------------
scripts/kconfig/lxdialog/check-lxdialog.sh | 67 ++++++++++++++++++++++++++++
2 files changed, 79 insertions(+), 36 deletions(-)
create mode 100644 scripts/kconfig/lxdialog/check-lxdialog.sh

ae215b14bdbd459afe5f371175765fae817062a8
diff --git a/scripts/kconfig/lxdialog/Makefile b/scripts/kconfig/lxdialog/Makefile
index a45a13f..8f41d9a 100644
--- a/scripts/kconfig/lxdialog/Makefile
+++ b/scripts/kconfig/lxdialog/Makefile
@@ -1,42 +1,18 @@
-HOST_EXTRACFLAGS := -DLOCALE
-ifeq ($(shell uname),SunOS)
-HOST_LOADLIBES := -lcurses
-else
-HOST_LOADLIBES := -lncurses
-endif
+# Makefile to build lxdialog package
+#

-ifeq (/usr/include/ncurses/ncurses.h, $(wildcard /usr/include/ncurses/ncurses.h))
- HOST_EXTRACFLAGS += -I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"
-else
-ifeq (/usr/include/ncurses/curses.h, $(wildcard /usr/include/ncurses/curses.h))
- HOST_EXTRACFLAGS += -I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"
-else
-ifeq (/usr/include/ncurses.h, $(wildcard /usr/include/ncurses.h))
- HOST_EXTRACFLAGS += -DCURSES_LOC="<ncurses.h>"
-else
- HOST_EXTRACFLAGS += -DCURSES_LOC="<curses.h>"
-endif
-endif
-endif
+check-lxdialog := $(srctree)/$(src)/check-lxdialog.sh
+HOST_EXTRACFLAGS := $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
+HOST_LOADLIBES := $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags)
+
+HOST_EXTRACFLAGS += -DLOCALE
+
+.PHONY: dochecklxdialog
+$(obj)/dochecklxdialog:
+ $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_LOADLIBES)

hostprogs-y := lxdialog
-always := ncurses $(hostprogs-y)
+always := $(hostprogs-y) dochecklxdialog

lxdialog-objs := checklist.o menubox.o textbox.o yesno.o inputbox.o \
util.o lxdialog.o msgbox.o
-
-.PHONY: $(obj)/ncurses
-$(obj)/ncurses:
- @echo "main() {}" > lxtemp.c
- @if $(HOSTCC) lxtemp.c $(HOST_LOADLIBES); then \
- rm -f lxtemp.c a.out; \
- else \
- rm -f lxtemp.c; \
- echo -e "\007" ;\
- echo ">> Unable to find the Ncurses libraries." ;\
- echo ">>" ;\
- echo ">> You must install ncurses-devel in order" ;\
- echo ">> to use 'make menuconfig'" ;\
- echo ;\
- exit 1 ;\
- fi
diff --git a/scripts/kconfig/lxdialog/check-lxdialog.sh b/scripts/kconfig/lxdialog/check-lxdialog.sh
new file mode 100644
index 0000000..a3c141b
--- /dev/null
+++ b/scripts/kconfig/lxdialog/check-lxdialog.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# Check ncurses compatibility
+
+# What library to link
+ldflags()
+{
+ if [ `uname` == SunOS ]; then
+ echo '-lcurses'
+ else
+ echo '-lncurses'
+ fi
+}
+
+# Where is ncurses.h?
+ccflags()
+{
+ if [ -f /usr/include/ncurses/ncurses.h ]; then
+ echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
+ elif [ -f /usr/include/ncurses/curses.h ]; then
+ echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"'
+ elif [ -f /usr/include/ncurses.h ]; then
+ echo '-DCURSES_LOC="<ncurses.h>"'
+ else
+ echo '-DCURSES_LOC="<curses.h>"'
+ fi
+}
+
+compiler=""
+# Check if we can link to ncurses
+check() {
+ echo "main() {}" | $compiler -xc -
+ if [ $? != 0 ]; then
+ echo " *** Unable to find the ncurses libraries." 1>&2
+ echo " *** make menuconfig require the ncurses libraries" 1>&2
+ echo " *** " 1>&2
+ echo " *** Install ncurses (ncurses-devel) and try again" 1>&2
+ echo " *** " 1>&2
+ exit 1
+ fi
+}
+
+usage() {
+ printf "Usage: $0 [-check compiler options|-header|-library]\n"
+}
+
+if [ $# == 0 ]; then
+ usage
+ exit 1
+fi
+
+case "$1" in
+ "-check")
+ shift
+ compiler="$@"
+ check
+ ;;
+ "-ccflags")
+ ccflags
+ ;;
+ "-ldflags")
+ ldflags
+ ;;
+ "*")
+ usage
+ exit 1
+ ;;
+esac
--
1.0.GIT

2006-01-09 21:38:26

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 02/11] kbuild: clean up asm-offsets.h creation

From: Brian Gerst <[email protected]>
Date: 1136590125 -0500

- Move mkdir out of cmd_offsets
- Add input file to sed command instead of using cat

Signed-off-by: Brian Gerst <[email protected]>
Signed-off-by: Sam Ravnborg <[email protected]>

---

Kbuild | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)

ac448afbcdcc218fd8d177960466ecc4a523722f
diff --git a/Kbuild b/Kbuild
index 7900391..95d6a00 100644
--- a/Kbuild
+++ b/Kbuild
@@ -22,8 +22,6 @@ sed-$(CONFIG_MIPS) := "/^@@@/s///p"

quiet_cmd_offsets = GEN $@
define cmd_offsets
- mkdir -p $(dir $@); \
- cat $< | \
(set -e; \
echo "#ifndef __ASM_OFFSETS_H__"; \
echo "#define __ASM_OFFSETS_H__"; \
@@ -34,7 +32,7 @@ define cmd_offsets
echo " *"; \
echo " */"; \
echo ""; \
- sed -ne $(sed-y); \
+ sed -ne $(sed-y) $<; \
echo ""; \
echo "#endif" ) > $@
endef
@@ -45,5 +43,6 @@ arch/$(ARCH)/kernel/asm-offsets.s: arch/
$(call if_changed_dep,cc_s_c)

$(obj)/$(offsets-file): arch/$(ARCH)/kernel/asm-offsets.s Kbuild
+ $(Q)mkdir -p $(dir $@)
$(call cmd,offsets)

--
1.0.GIT

2006-01-09 21:38:53

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 04/11] kbuild: In setlocalversion change -git_dirty to just -dirty

From: Ryan Anderson <[email protected]>
Date: 1136712936 -0500

When building Debian packages directly from the git tree, the appended
"git_dirty" is a problem due to the underscore. In order to cause the
least problems, change that just to "dirty".

Signed-off-by: Ryan Anderson <[email protected]>
Signed-off-by: Sam Ravnborg <[email protected]>

---

scripts/setlocalversion | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

24d49756aa67322c2def5dc97344615572ac454e
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
index f54dac8..9a23825 100644
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -17,6 +17,6 @@ if head=`git rev-parse --verify HEAD 2>/

# Are there uncommitted changes?
if git diff-files | read dummy; then
- printf '%s' -git_dirty
+ printf '%s' -dirty
fi
fi
--
1.0.GIT

2006-01-09 21:38:53

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 05/11] kbuild: ensure mrproper removes .old_version

From: Tore Anderson <[email protected]>
Date: 1136644480 +0100

If the final linking of vmlinux fails, the file .old_version are left
behind. This patch ensures the mrproper target will remove it if
present.

Signed-off-by: Tore Anderson <[email protected]>
Signed-off-by: Sam Ravnborg <[email protected]>

---

Makefile | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

50aa88e2877f1375ba79d1be7a0ff4aa563741c7
diff --git a/Makefile b/Makefile
index 599e744..50b07fa 100644
--- a/Makefile
+++ b/Makefile
@@ -984,7 +984,7 @@ CLEAN_FILES += vmlinux System.map \

# Directories & files removed with 'make mrproper'
MRPROPER_DIRS += include/config include2
-MRPROPER_FILES += .config .config.old include/asm .version \
+MRPROPER_FILES += .config .config.old include/asm .version .old_version \
include/linux/autoconf.h include/linux/version.h \
Module.symvers tags TAGS cscope*

--
1.0.GIT

2006-01-09 21:39:34

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 08/11] frv: Use KERNELRELEASE


Signed-off-by: Sam Ravnborg <[email protected]>

---

arch/frv/boot/Makefile | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

63b794bfd898899cc8b6d4679d4fdc486606194b
diff --git a/arch/frv/boot/Makefile b/arch/frv/boot/Makefile
index d75e0d7..5dfc93f 100644
--- a/arch/frv/boot/Makefile
+++ b/arch/frv/boot/Makefile
@@ -57,10 +57,10 @@ initrd:
# installation
#
install: $(CONFIGURE) Image
- sh ./install.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) Image $(TOPDIR)/System.map "$(INSTALL_PATH)"
+ sh ./install.sh $(KERNELRELEASE) Image $(TOPDIR)/System.map "$(INSTALL_PATH)"

zinstall: $(CONFIGURE) zImage
- sh ./install.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) zImage $(TOPDIR)/System.map "$(INSTALL_PATH)"
+ sh ./install.sh $(KERNELRELEASE) zImage $(TOPDIR)/System.map "$(INSTALL_PATH)"

#
# miscellany
--
1.0.GIT

2006-01-09 21:40:04

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 10/11] kbuild/xfs: introduce fs/xfs/Kbuild


In kbuild the file named 'Kbuild' has precedence over the file named
Makefile. Utilise a file named Kbuild to include the 2.6 Makefile for xfs
- since the xfs people likes to keep their arch specific Makefiles separate.

With this patch xfs does no longer rely on the KERNELRELEASE components to be global.

Signed-off-by: Sam Ravnborg <[email protected]>

---

fs/xfs/Kbuild | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
create mode 100644 fs/xfs/Kbuild

a9aa1ffaac7c8d6f093bb8f7cdeea761a5e25f53
diff --git a/fs/xfs/Kbuild b/fs/xfs/Kbuild
new file mode 100644
index 0000000..2566e96
--- /dev/null
+++ b/fs/xfs/Kbuild
@@ -0,0 +1,6 @@
+#
+# The xfs people like to share Makefile with 2.6 and 2.4.
+# Utilise file named Kbuild file which has precedence over Makefile.
+#
+
+include $(srctree)/$(obj)/Makefile-linux-2.6
--
1.0.GIT

2006-01-09 21:39:34

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 09/11] kbuild: drop vmlinux dependency from "make install"

From: H. Peter Anvin <[email protected]>
Date: 1136684319 -0800

This removes the dependency from vmlinux to install, thus avoiding the
current situation where "make install" has a nasty tendency to leave
root-turds in the working directory.

It also updates x86-64 to be in sync with i386.

Signed-off-by: H. Peter Anvin <[email protected]>
Signed-off-by: Sam Ravnborg <[email protected]>

---

arch/i386/Makefile | 5 ++---
arch/i386/boot/Makefile | 2 +-
arch/i386/boot/install.sh | 14 ++++++++++++++
arch/x86_64/Makefile | 5 ++++-
arch/x86_64/boot/Makefile | 2 +-
arch/x86_64/boot/install.sh | 40 +---------------------------------------
6 files changed, 23 insertions(+), 45 deletions(-)

0d20babd86b40fa5ac55d9ebf31d05f6f7082161
diff --git a/arch/i386/Makefile b/arch/i386/Makefile
index 8f6b90e..d3c0409 100644
--- a/arch/i386/Makefile
+++ b/arch/i386/Makefile
@@ -103,7 +103,7 @@ AFLAGS += $(mflags-y)
boot := arch/i386/boot

.PHONY: zImage bzImage compressed zlilo bzlilo \
- zdisk bzdisk fdimage fdimage144 fdimage288 install kernel_install
+ zdisk bzdisk fdimage fdimage144 fdimage288 install

all: bzImage

@@ -125,8 +125,7 @@ zdisk bzdisk: vmlinux
fdimage fdimage144 fdimage288: vmlinux
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@

-install: vmlinux
-install kernel_install:
+install:
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install

archclean:
diff --git a/arch/i386/boot/Makefile b/arch/i386/boot/Makefile
index 1e71382..0fea75d 100644
--- a/arch/i386/boot/Makefile
+++ b/arch/i386/boot/Makefile
@@ -100,5 +100,5 @@ zlilo: $(BOOTIMAGE)
cp System.map $(INSTALL_PATH)/
if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi

-install: $(BOOTIMAGE)
+install:
sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)"
diff --git a/arch/i386/boot/install.sh b/arch/i386/boot/install.sh
index f17b40d..5e44c73 100644
--- a/arch/i386/boot/install.sh
+++ b/arch/i386/boot/install.sh
@@ -19,6 +19,20 @@
# $4 - default install path (blank if root directory)
#

+verify () {
+ if [ ! -f "$1" ]; then
+ echo "" 1>&2
+ echo " *** Missing file: $1" 1>&2
+ echo ' *** You need to run "make" before "make install".' 1>&2
+ echo "" 1>&2
+ exit 1
+ fi
+}
+
+# Make sure the files actually exist
+verify "$2"
+verify "$3"
+
# User may have a custom install script

if [ -x ~/bin/${CROSS_COMPILE}installkernel ]; then exec ~/bin/${CROSS_COMPILE}installkernel "$@"; fi
diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile
index a9cd42e..51d8328 100644
--- a/arch/x86_64/Makefile
+++ b/arch/x86_64/Makefile
@@ -80,9 +80,12 @@ bzlilo: vmlinux
bzdisk: vmlinux
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) zdisk

-install fdimage fdimage144 fdimage288: vmlinux
+fdimage fdimage144 fdimage288: vmlinux
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@

+install:
+ $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
+
archclean:
$(Q)$(MAKE) $(clean)=$(boot)

diff --git a/arch/x86_64/boot/Makefile b/arch/x86_64/boot/Makefile
index 18c6e91..29f8396 100644
--- a/arch/x86_64/boot/Makefile
+++ b/arch/x86_64/boot/Makefile
@@ -98,5 +98,5 @@ zlilo: $(BOOTIMAGE)
cp System.map $(INSTALL_PATH)/
if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi

-install: $(BOOTIMAGE)
+install:
sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)"
diff --git a/arch/x86_64/boot/install.sh b/arch/x86_64/boot/install.sh
index 198af15..baaa236 100644
--- a/arch/x86_64/boot/install.sh
+++ b/arch/x86_64/boot/install.sh
@@ -1,40 +1,2 @@
#!/bin/sh
-#
-# arch/x86_64/boot/install.sh
-#
-# This file is subject to the terms and conditions of the GNU General Public
-# License. See the file "COPYING" in the main directory of this archive
-# for more details.
-#
-# Copyright (C) 1995 by Linus Torvalds
-#
-# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin
-#
-# "make install" script for i386 architecture
-#
-# Arguments:
-# $1 - kernel version
-# $2 - kernel image file
-# $3 - kernel map file
-# $4 - default install path (blank if root directory)
-#
-
-# User may have a custom install script
-
-if [ -x ~/bin/${CROSS_COMPILE}installkernel ]; then exec ~/bin/${CROSS_COMPILE}installkernel "$@"; fi
-if [ -x /sbin/${CROSS_COMPILE}installkernel ]; then exec /sbin/${CROSS_COMPILE}installkernel "$@"; fi
-
-# Default install - same as make zlilo
-
-if [ -f $4/vmlinuz ]; then
- mv $4/vmlinuz $4/vmlinuz.old
-fi
-
-if [ -f $4/System.map ]; then
- mv $4/System.map $4/System.old
-fi
-
-cat $2 > $4/vmlinuz
-cp $3 $4/System.map
-
-if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
+. $srctree/arch/i386/boot/install.sh
--
1.0.GIT

2006-01-09 21:41:20

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 07/11] kbuild: remove GCC_VERSION


This was causing some ordering problems. Remove the up-front evaluation
and just revaluate the compiler version each time we need it.

(The up-front evaluation was problematic because some architectures modify
the value of $(CC)).

Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Sam Ravnborg <[email protected]>

---

Documentation/kbuild/makefiles.txt | 4 ++--
arch/i386/Makefile | 4 ++--
arch/ia64/Makefile | 7 +------
arch/powerpc/Makefile | 6 ++----
arch/ppc/Makefile | 3 +--
5 files changed, 8 insertions(+), 16 deletions(-)

ad14336de8e9cddae9ed29d45bd2e97abb72eaf9
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index d802ce8..443230b 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -1033,9 +1033,9 @@ When kbuild executes the following steps

Example:
#arch/i386/Makefile
- GCC_VERSION := $(call cc-version)
cflags-y += $(shell \
- if [ $(GCC_VERSION) -ge 0300 ] ; then echo "-mregparm=3"; fi ;)
+ if [ $(call cc-version) -ge 0300 ] ; then \
+ echo "-mregparm=3"; fi ;)

In the above example -mregparm=3 is only used for gcc version greater
than or equal to gcc 3.0.
diff --git a/arch/i386/Makefile b/arch/i386/Makefile
index d121ea1..8f6b90e 100644
--- a/arch/i386/Makefile
+++ b/arch/i386/Makefile
@@ -39,8 +39,8 @@ include $(srctree)/arch/i386/Makefile.cp

# -mregparm=3 works ok on gcc-3.0 and later
#
-GCC_VERSION := $(call cc-version)
-cflags-$(CONFIG_REGPARM) += $(shell if [ $(GCC_VERSION) -ge 0300 ] ; then echo "-mregparm=3"; fi ;)
+cflags-$(CONFIG_REGPARM) += $(shell if [ $(call cc-version) -ge 0300 ] ; then \
+ echo "-mregparm=3"; fi ;)

# Disable unit-at-a-time mode, it makes gcc use a lot more stack
# due to the lack of sharing of stacklots.
diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile
index 67932ad..f722e1a 100644
--- a/arch/ia64/Makefile
+++ b/arch/ia64/Makefile
@@ -25,7 +25,6 @@ cflags-y := -pipe $(EXTRA) -ffixed-r13 -
-falign-functions=32 -frename-registers -fno-optimize-sibling-calls
CFLAGS_KERNEL := -mconstant-gp

-GCC_VERSION := $(call cc-version)
GAS_STATUS = $(shell $(srctree)/arch/ia64/scripts/check-gas "$(CC)" "$(OBJDUMP)")
CPPFLAGS += $(shell $(srctree)/arch/ia64/scripts/toolchain-flags "$(CC)" "$(OBJDUMP)" "$(READELF)")

@@ -37,11 +36,7 @@ $(error Sorry, you need a newer version
ftp://ftp.hpl.hp.com/pub/linux-ia64/gas-030124.tar.gz)
endif

-ifneq ($(shell if [ $(GCC_VERSION) -lt 0300 ] ; then echo "bad"; fi ;),)
-$(error Sorry, your compiler is too old. GCC v2.96 is known to generate bad code.)
-endif
-
-ifeq ($(GCC_VERSION),0304)
+ifeq ($(call cc-version),0304)
cflags-$(CONFIG_ITANIUM) += -mtune=merced
cflags-$(CONFIG_MCKINLEY) += -mtune=mckinley
endif
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index a13eb57..b98f11b 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -76,8 +76,7 @@ LINUXINCLUDE += $(LINUXINCLUDE-y)
CHECKFLAGS += -m$(SZ) -D__powerpc__ -D__powerpc$(SZ)__

ifeq ($(CONFIG_PPC64),y)
-GCC_VERSION := $(call cc-version)
-GCC_BROKEN_VEC := $(shell if [ $(GCC_VERSION) -lt 0400 ] ; then echo "y"; fi)
+GCC_BROKEN_VEC := $(shell if [ $(call cc-version) -lt 0400 ] ; then echo "y"; fi)

ifeq ($(CONFIG_POWER4_ONLY),y)
ifeq ($(CONFIG_ALTIVEC),y)
@@ -189,10 +188,9 @@ TOUT := .tmp_gas_check
# Ensure this is binutils 2.12.1 (or 2.12.90.0.7) or later for altivec
# instructions.
# gcc-3.4 and binutils-2.14 are a fatal combination.
-GCC_VERSION := $(call cc-version)

checkbin:
- @if test "$(GCC_VERSION)" = "0304" ; then \
+ @if test "$(call cc-version)" = "0304" ; then \
if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \
echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build '; \
echo 'correctly with gcc-3.4 and your version of binutils.'; \
diff --git a/arch/ppc/Makefile b/arch/ppc/Makefile
index e719a49..98e940b 100644
--- a/arch/ppc/Makefile
+++ b/arch/ppc/Makefile
@@ -128,10 +128,9 @@ TOUT := .tmp_gas_check
# Ensure this is binutils 2.12.1 (or 2.12.90.0.7) or later for altivec
# instructions.
# gcc-3.4 and binutils-2.14 are a fatal combination.
-GCC_VERSION := $(call cc-version)

checkbin:
- @if test "$(GCC_VERSION)" = "0304" ; then \
+ @if test "$(call cc-version)" = "0304" ; then \
if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \
echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build '; \
echo 'correctly with gcc-3.4 and your version of binutils.'; \
--
1.0.GIT

2006-01-09 21:39:10

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 06/11] kbuild: reference_discarded addition

From: Dave Jones <[email protected]>
Date: 1136533219 -0500

Error: ./fs/quota_v2.o .opd refers to 0000000000000020 R_PPC64_ADDR64 .exit.text

Been carrying this for some time in Red Hat trees.

Keith Ownes <[email protected]> commented:
For our future {in}sanity, add a comment that this is the ppc .opd
section, not the ia64 .opd section. ia64 .opd should not point to
discarded sections.

Any idea why ppc .opd points to discarded sections when ia64 does not?
AFAICT no ia64 object has a useful .opd section, they are all empty or
(sometimes) a dummy entry which is 1 byte long. ia64 .opd data is
built at link time, not compile time.

Signed-off-by: Dave Jones <[email protected]>
Signed-off-by: Sam Ravnborg <[email protected]>

---

scripts/reference_discarded.pl | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)

442ce844e139c1e3c23e8b4df13468041ae35721
diff --git a/scripts/reference_discarded.pl b/scripts/reference_discarded.pl
index c2d5414..4ee6ab2 100644
--- a/scripts/reference_discarded.pl
+++ b/scripts/reference_discarded.pl
@@ -71,6 +71,11 @@ foreach $object (keys(%object)) {
# printf("ignoring %d conglomerate(s)\n", $ignore);

# printf("Scanning objects\n");
+
+# Keith Ownes <[email protected]> commented:
+# For our future {in}sanity, add a comment that this is the ppc .opd
+# section, not the ia64 .opd section.
+# ia64 .opd should not point to discarded sections.
$errorcount = 0;
foreach $object (keys(%object)) {
my $from;
@@ -88,6 +93,7 @@ foreach $object (keys(%object)) {
($from !~ /\.text\.exit$/ &&
$from !~ /\.exit\.text$/ &&
$from !~ /\.data\.exit$/ &&
+ $from !~ /\.opd$/ &&
$from !~ /\.exit\.data$/ &&
$from !~ /\.altinstructions$/ &&
$from !~ /\.pdr$/ &&
--
1.0.GIT

2006-01-09 21:40:04

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 11/11] kbuild: KERNELRELEASE is only re-defined when buiding the kernel


To avoid running setlocalversion as root no longer (re-)define
KERNELRELEASE for each run. With this patch KERNELRELEASE is
only re-read when we do an actual kernel build.
Rationale behind this is "do as little as possible" when executing
make install - as root!

A new file named .kernelrelease is strored in the root of the kernel
tree containing the actual version string.
So when we use do a kernel build the .kernelrelease file will be updated.
But in all other situations it is left as-is.

To make it more visible the kernel now prints out the version being build.
Sample:
Building kernel 2.6.15-g63b794bf-dirty
...
...

The patch also un-exports VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION LOCALVERSION
since all users of these are anyway broken - and none is left in the
tree.

Signed-off-by: Sam Ravnborg <[email protected]>

---

Makefile | 95 +++++++++++++++++++++++++++++++++++---------------------------
1 files changed, 53 insertions(+), 42 deletions(-)

cb58455c48dc43536e5548bdba4e916b2f0cf13d
diff --git a/Makefile b/Makefile
index 50b07fa..df60aa1 100644
--- a/Makefile
+++ b/Makefile
@@ -141,24 +141,6 @@ VPATH := $(srctree)

export srctree objtree VPATH TOPDIR

-nullstring :=
-space := $(nullstring) # end of line
-
-# Take the contents of any files called localversion* and the config
-# variable CONFIG_LOCALVERSION and append them to KERNELRELEASE. Be
-# careful not to include files twice if building in the source
-# directory. LOCALVERSION from the command line override all of this
-
-localver := $(objtree)/localversion* $(srctree)/localversion*
-localver := $(sort $(wildcard $(localver)))
-# skip backup files (containing '~')
-localver := $(foreach f, $(localver), $(if $(findstring ~, $(f)),,$(f)))
-
-LOCALVERSION = $(subst $(space),, \
- $(shell cat /dev/null $(localver)) \
- $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
-
-KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)$(LOCALVERSION)

# SUBARCH tells the usermode build what the underlying arch is. That is set
# first, and if a usermode build is happening, the "ARCH=um" on the command
@@ -353,7 +335,10 @@ CFLAGS := -Wall -Wundef -Wstrict-proto
-ffreestanding
AFLAGS := -D__ASSEMBLY__

-export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION LOCALVERSION KERNELRELEASE \
+# Read KERNELRELEASE from .kernelrelease (if it exists)
+KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null)
+
+export KERNELRELEASE \
ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \
HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
@@ -551,26 +536,6 @@ export KBUILD_IMAGE ?= vmlinux
# images. Default is /boot, but you can set it to other values
export INSTALL_PATH ?= /boot

-# If CONFIG_LOCALVERSION_AUTO is set, we automatically perform some tests
-# and try to determine if the current source tree is a release tree, of any sort,
-# or if is a pure development tree.
-#
-# A 'release tree' is any tree with a git TAG associated
-# with it. The primary goal of this is to make it safe for a native
-# git/CVS/SVN user to build a release tree (i.e, 2.6.9) and also to
-# continue developing against the current Linus tree, without having the Linus
-# tree overwrite the 2.6.9 tree when installed.
-#
-# Currently, only git is supported.
-# Other SCMs can edit scripts/setlocalversion and add the appropriate
-# checks as needed.
-
-
-ifdef CONFIG_LOCALVERSION_AUTO
- localversion-auto := $(shell $(PERL) $(srctree)/scripts/setlocalversion $(srctree))
- LOCALVERSION := $(LOCALVERSION)$(localversion-auto)
-endif
-
#
# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
# relocations required by build roots. This is not defined in the
@@ -782,6 +747,50 @@ $(sort $(vmlinux-init) $(vmlinux-main))
$(vmlinux-dirs): prepare scripts
$(Q)$(MAKE) $(build)=$@

+# Build the kernel release string
+# The KERNELRELEASE is stored in a file named .kernelrelease
+# to be used when executing for example make install or make modules_install
+#
+# Take the contents of any files called localversion* and the config
+# variable CONFIG_LOCALVERSION and append them to KERNELRELEASE.
+# LOCALVERSION from the command line override all of this
+
+nullstring :=
+space := $(nullstring) # end of line
+
+___localver = $(objtree)/localversion* $(srctree)/localversion*
+__localver = $(sort $(wildcard $(___localver)))
+# skip backup files (containing '~')
+_localver = $(foreach f, $(__localver), $(if $(findstring ~, $(f)),,$(f)))
+
+localver = $(subst $(space),, \
+ $(shell cat /dev/null $(_localver)) \
+ $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
+
+# If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called
+# and if the SCM is know a tag from the SCM is appended.
+# The appended tag is determinded by the SCM used.
+#
+# Currently, only git is supported.
+# Other SCMs can edit scripts/setlocalversion and add the appropriate
+# checks as needed.
+ifdef CONFIG_LOCALVERSION_AUTO
+ _localver-auto = $(shell $(CONFIG_SHELL) \
+ $(srctree)/scripts/setlocalversion $(srctree))
+ localver-auto = $(LOCALVERSION)$(_localver-auto)
+endif
+
+localver-full = $(localver)$(localver-auto)
+
+# Store (new) KERNELRELASE string in .kernelrelease
+kernelrelease = \
+ $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)$(localver-full)
+.kernelrelease: FORCE
+ $(Q)rm -f .kernelrelease
+ $(Q)echo $(kernelrelease) > .kernelrelease
+ $(Q)echo " Building kernel $(kernelrelease)"
+
+
# Things we need to do before we recursively start building the kernel
# or the modules are listed in "prepare".
# A multi level approach is used. prepareN is processed before prepareN-1.
@@ -798,8 +807,7 @@ $(vmlinux-dirs): prepare scripts
# and if so do:
# 1) Check that make has not been executed in the kernel src $(srctree)
# 2) Create the include2 directory, used for the second asm symlink
-
-prepare3:
+prepare3: .kernelrelease
ifneq ($(KBUILD_SRC),)
@echo ' Using $(srctree) as source for kernel'
$(Q)if [ -f $(srctree)/.config ]; then \
@@ -986,7 +994,7 @@ CLEAN_FILES += vmlinux System.map \
MRPROPER_DIRS += include/config include2
MRPROPER_FILES += .config .config.old include/asm .version .old_version \
include/linux/autoconf.h include/linux/version.h \
- Module.symvers tags TAGS cscope*
+ .kernelrelease Module.symvers tags TAGS cscope*

# clean - Delete most, but leave enough to build external modules
#
@@ -1072,6 +1080,7 @@ help:
@echo ' tags/TAGS - Generate tags file for editors'
@echo ' cscope - Generate cscope index'
@echo ' kernelrelease - Output the release version string'
+ @echo ' kernelversion - Output the version stored in Makefile'
@echo ''
@echo 'Static analysers'
@echo ' buildcheck - List dangling references to vmlinux discarded sections'
@@ -1293,6 +1302,8 @@ checkstack:

kernelrelease:
@echo $(KERNELRELEASE)
+kernelversion:
+ @echo $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)

# FIXME Should go into a make.lib or something
# ===========================================================================
--
1.0.GIT

2006-01-09 21:50:58

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 12/11] kbuild: re-export VERSION, PATCHLEVEL, SUBLEVEL

One last minute patch added to the tree:

kbuild: re-export VERSION, PATCHLEVEL, SUBLEVEL

Eric Sandeen <[email protected]> pointed out that it is usefull to have
access to VERSION, PATCHLEVEL, SUBLEVEL in external modules, and gooling
a litte confirmed this.
So re-export them.
Usage within the kernel is still discouraged but possible.

Signed-off-by: Sam Ravnborg <[email protected]>

---
commit 4f0210b9c4889eede9f8f379f93570c01998ccb9
tree 0883096acb3bc46e65a6873b777f01214d6a7852
parent cb58455c48dc43536e5548bdba4e916b2f0cf13d
author Sam Ravnborg <[email protected]> Mon, 09 Jan 2006 22:48:34 +0100
committer Sam Ravnborg <[email protected]> Mon, 09 Jan 2006 22:48:34 +0100

Makefile | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/Makefile b/Makefile
index df60aa1..1d1afa5 100644
--- a/Makefile
+++ b/Makefile
@@ -338,7 +338,7 @@ AFLAGS := -D__ASSEMBLY__
# Read KERNELRELEASE from .kernelrelease (if it exists)
KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null)

-export KERNELRELEASE \
+export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE \
ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \
HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS

2006-01-10 16:28:03

by Linus Torvalds

[permalink] [raw]
Subject: Re: [GIT PATCHES] kbuild updates



On Mon, 9 Jan 2006, Sam Ravnborg wrote:
>
> Please pull from:
> ssh://master.kernel.org/pub/scm/linux/kernel/git/sam/kbuild.git

Ok, pulled.

However, fixing up a trivial conflict in i386/Makefile, I noticed this:

cflags-$(CONFIG_REGPARM) += $(shell if [ $(call cc-version) -ge 0300 ] ; then \
echo "-mregparm=3"; fi ;)

and it strikes me that this is WRONG.

It's wrong for some subtle reasons: it means that CONFIG_REGPARM is set
whether or not it is actually _used_, which means that anybody who depends
on CONFIG_REGPARM in the sources is just screwed.

Now, for this particular usage, the only breakage is in the i386
<asm/module.h>, which will report "REGPARM" in MODULE_REGPARM regardless
of whether the kernel was compiled with -mregparm=3 or not. So it's mainly
cosmetic.

But it strikes me that we'd be a _lot_ better off if the Kconfig phase
would check the compiler version, instead of us checking it dynamically a
hundred times in the Makefiles. It would be more efficient, and we could
make things like this more _correct_.

Comments?

Linus

2006-01-10 20:27:45

by Jan Engelhardt

[permalink] [raw]
Subject: Re: [PATCH 01/11] kconfig: factor out ncurses check in a shell script

>
>Cleaning up the lxdialog Makefile by factoring out the
>ncurses compatibility checks.
>This made the checks much more obvious and easier to extend.

BTW, do you know a nice way to detect ncursesw?




Jan Engelhardt
--

2006-01-10 21:01:34

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [PATCH 01/11] kconfig: factor out ncurses check in a shell script

On Tue, Jan 10, 2006 at 09:27:42PM +0100, Jan Engelhardt wrote:
> >
> >Cleaning up the lxdialog Makefile by factoring out the
> >ncurses compatibility checks.
> >This made the checks much more obvious and easier to extend.
>
> BTW, do you know a nice way to detect ncursesw?
Hi Jan.

I had ncursesw in my mind too when I did this.
If you look at the test implemented to check for ncurses it
should be simple to use same principle to check if one can use
ncursesw. If gcc does not fail then ncursesw is present.

Care to give it a spin?
Otherwise I will try later this week.

Sam

2006-01-10 21:28:15

by Jan Engelhardt

[permalink] [raw]
Subject: Re: [PATCH 01/11] kconfig: factor out ncurses check in a shell script

>I had ncursesw in my mind too when I did this.
>If you look at the test implemented to check for ncurses it
>should be simple to use same principle to check if one can use
>ncursesw. If gcc does not fail then ncursesw is present.
>
>Care to give it a spin?

Ah yes, keeping the gray cells in shape; let me give it a twist.


Jan Engelhardt
--

2006-01-11 16:55:33

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [PATCH 01/11] kconfig: factor out ncurses check in a shell script

On Tue, Jan 10, 2006 at 09:27:42PM +0100, Jan Engelhardt wrote:
> >
> >Cleaning up the lxdialog Makefile by factoring out the
> >ncurses compatibility checks.
> >This made the checks much more obvious and easier to extend.
>
> BTW, do you know a nice way to detect ncursesw?
Something like this?

diff --git a/scripts/kconfig/lxdialog/Makefile b/scripts/kconfig/lxdialog/Makefile
index 8f41d9a..fae3e29 100644
--- a/scripts/kconfig/lxdialog/Makefile
+++ b/scripts/kconfig/lxdialog/Makefile
@@ -1,9 +1,9 @@
# Makefile to build lxdialog package
#

-check-lxdialog := $(srctree)/$(src)/check-lxdialog.sh
-HOST_EXTRACFLAGS := $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
-HOST_LOADLIBES := $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags)
+check-lxdialog := $(srctree)/$(src)/check-lxdialog.sh
+HOST_EXTRACFLAGS:= $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
+HOST_LOADLIBES := $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))

HOST_EXTRACFLAGS += -DLOCALE

diff --git a/scripts/kconfig/lxdialog/check-lxdialog.sh b/scripts/kconfig/lxdialog/check-lxdialog.sh
index a3c141b..3f172f1 100644
--- a/scripts/kconfig/lxdialog/check-lxdialog.sh
+++ b/scripts/kconfig/lxdialog/check-lxdialog.sh
@@ -4,11 +4,22 @@
# What library to link
ldflags()
{
- if [ `uname` == SunOS ]; then
- echo '-lcurses'
- else
+ echo "main() {}" | $compiler -lncursesw -xc - 2> /dev/null
+ if [ $? -eq 0 ]; then
+ echo '-lncursesw'
+ exit
+ fi
+ echo "main() {}" | $compiler -lncurses -xc - 2> /dev/null
+ if [ $? -eq 0 ]; then
echo '-lncurses'
+ exit
+ fi
+ echo "main() {}" | $compiler -lcurses -xc - 2> /dev/null
+ if [ $? -eq 0 ]; then
+ echo '-lcurses'
+ exit
fi
+ exit 1
}

# Where is ncurses.h?
@@ -58,6 +69,8 @@ case "$1" in
ccflags
;;
"-ldflags")
+ shift
+ compiler="$@"
ldflags
;;
"*")

2006-01-11 18:12:00

by Jan Engelhardt

[permalink] [raw]
Subject: Re: [PATCH 01/11] kconfig: factor out ncurses check in a shell script

>+ echo "main() {}" | $compiler -lncursesw -xc - 2> /dev/null
>+ if [ $? -eq 0 ]; then
>+ echo '-lncursesw'
>+ exit
>+ fi
>+ echo "main() {}" | $compiler -lncurses -xc - 2> /dev/null
>+ if [ $? -eq 0 ]; then
> echo '-lncurses'
>+ exit
>+ fi
>+ echo "main() {}" | $compiler -lcurses -xc - 2> /dev/null
>+ if [ $? -eq 0 ]; then
>+ echo '-lcurses'
>+ exit
> fi
>+ exit 1


You forget to remove a.out, or whatever the compiler produces. I suggest
$compiler -o /dev/null




Jan Engelhardt
--

2006-01-12 16:21:52

by Cal Peake

[permalink] [raw]
Subject: Re: [PATCH 09/11] kbuild: drop vmlinux dependency from "make install"

On Mon, 9 Jan 2006, Sam Ravnborg wrote:

> This removes the dependency from vmlinux to install, thus avoiding the
> current situation where "make install" has a nasty tendency to leave
> root-turds in the working directory.

Is removing the `kernel_install' target considered a userspace interface
breakage? ;) Or am I just gonna have to get used to typing `make install'
again?

--
"Silly rabbit, kicks are for ribs!" -- Homer Simpson

2006-01-12 21:26:08

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [PATCH 09/11] kbuild: drop vmlinux dependency from "make install"

On Thu, Jan 12, 2006 at 11:21:51AM -0500, Cal Peake wrote:
> On Mon, 9 Jan 2006, Sam Ravnborg wrote:
>
> > This removes the dependency from vmlinux to install, thus avoiding the
> > current situation where "make install" has a nasty tendency to leave
> > root-turds in the working directory.
>
> Is removing the `kernel_install' target considered a userspace interface
> breakage? ;) Or am I just gonna have to get used to typing `make install'
> again?
make install is there to stay. And now where install and kernel_install
do the same thing the latter will disappear.
So yes, soon yo have to type less.

Sam

2006-01-12 23:18:34

by Adrian Bunk

[permalink] [raw]
Subject: [2.6 patch] i386: remove gcc version check for CONFIG_REGPARM

On Tue, Jan 10, 2006 at 08:27:57AM -0800, Linus Torvalds wrote:
>
>
> On Mon, 9 Jan 2006, Sam Ravnborg wrote:
> >
> > Please pull from:
> > ssh://master.kernel.org/pub/scm/linux/kernel/git/sam/kbuild.git
>
> Ok, pulled.
>
> However, fixing up a trivial conflict in i386/Makefile, I noticed this:
>
> cflags-$(CONFIG_REGPARM) += $(shell if [ $(call cc-version) -ge 0300 ] ; then \
> echo "-mregparm=3"; fi ;)
>
> and it strikes me that this is WRONG.
>
> It's wrong for some subtle reasons: it means that CONFIG_REGPARM is set
> whether or not it is actually _used_, which means that anybody who depends
> on CONFIG_REGPARM in the sources is just screwed.
>...

The change from Sam's tree conflicted with my patch to completely remove
the version check since we do no longer support any gcc < 3.0.

Patch below.

> Linus

cu
Adrian


<-- snip -->


Since we do no longer support any gcc < 3.0, there's no need to check
for it..


Signed-off-by: Adrian Bunk <[email protected]>

--- linux-2.6.15-mm3-full/arch/i386/Makefile.old 2006-01-13 00:04:09.000000000 +0100
+++ linux-2.6.15-mm3-full/arch/i386/Makefile 2006-01-13 00:05:09.000000000 +0100
@@ -37,10 +37,7 @@
# CPU-specific tuning. Anything which can be shared with UML should go here.
include $(srctree)/arch/i386/Makefile.cpu

-# -mregparm=3 works ok on gcc-3.0 and later
-#
-cflags-$(CONFIG_REGPARM) += $(shell if [ $(call cc-version) -ge 0300 ] ; then \
- echo "-mregparm=3"; fi ;)
+cflags-$(CONFIG_REGPARM) += -mregparm=3

# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
# a lot more stack due to the lack of sharing of stacklots:

2006-01-31 20:12:27

by Dave Hansen

[permalink] [raw]
Subject: Re: [PATCH 09/11] kbuild: drop vmlinux dependency from "make install"

On Mon, 2006-01-09 at 22:38 +0100, Sam Ravnborg wrote:
> This removes the dependency from vmlinux to install, thus avoiding the
> current situation where "make install" has a nasty tendency to leave
> root-turds in the working directory.

One minor issue I've noticed with this is that I have script that do:

make -j8 vmlinux install

Without the dependency, I think the install is done in parallel, and
doesn't get the result of that build. Is there a way I can accomplish
the same thing with one make command with the new dependency?

-- Dave

2006-01-31 21:04:22

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [PATCH 09/11] kbuild: drop vmlinux dependency from 'make install'

> On Mon, 2006-01-09 at 22:38 +0100, Sam Ravnborg wrote:
>> This removes the dependency from vmlinux to install, thus avoiding the
>> current situation where "make install" has a nasty tendency to leave
>> root-turds in the working directory.
>
> One minor issue I've noticed with this is that I have script that do:
>
> make -j8 vmlinux install
>
> Without the dependency, I think the install is done in parallel, and
> doesn't get the result of that build.
Correct. All targets on the commandline are evaluated in parallel.

> Is there a way I can accomplish
> the same thing with one make command with the new dependency?
No - unfortunately not.

Oh, you may restrict yourself to UP and use make -j1 but that would be
a workaround ;-)

Sam

2006-02-01 23:27:19

by Keith Owens

[permalink] [raw]
Subject: Re: [PATCH 09/11] kbuild: drop vmlinux dependency from 'make install'

"Sam Ravnborg" (on Tue, 31 Jan 2006 22:04:19 +0100 (CET)) wrote:
>> On Mon, 2006-01-09 at 22:38 +0100, Sam Ravnborg wrote:
>>> This removes the dependency from vmlinux to install, thus avoiding the
>>> current situation where "make install" has a nasty tendency to leave
>>> root-turds in the working directory.
>>
>> One minor issue I've noticed with this is that I have script that do:
>>
>> make -j8 vmlinux install
>>
>> Without the dependency, I think the install is done in parallel, and
>> doesn't get the result of that build.
>Correct. All targets on the commandline are evaluated in parallel.
>
>> Is there a way I can accomplish
>> the same thing with one make command with the new dependency?
>No - unfortunately not.
>
>Oh, you may restrict yourself to UP and use make -j1 but that would be
>a workaround ;-)

Pseudo code: make install, modules-install etc. depend on other targets
if and only if there are multiple targets on the command line. A bare
make install will have no dependencies on vmlinux, make install plus
other targets will wait for the other targets. Mind you, I still think
that removing the dependency to avoid root turds is the wrong approach.

goal := $(sort $(MAKECMDGOALS))
goal_install := $(filter %install,$(goal))
goal_other := $(filter-out %install,$(goal))
ifneq ($(goal_install),)
ifneq ($(goal_other),)
$(goal_install): $(goal_other)
endif
endif