* Re: UML kbuild patch
2002-09-24 1:09 UML kbuild patch Jeff Dike
@ 2002-09-24 0:24 ` Kai Germaschewski
2002-09-24 2:34 ` Jeff Dike
2002-09-24 12:16 ` Oleg Drokin
0 siblings, 2 replies; 4+ messages in thread
From: Kai Germaschewski @ 2002-09-24 0:24 UTC (permalink / raw)
To: Jeff Dike; +Cc: linux-kernel, kbuild-devel
On Mon, 23 Sep 2002, Jeff Dike wrote:
> The UML build needs a few kbuild changes in order to work with the latest
> stuff.
>
> Since kbuild now enforces the use of the linker script on the vmlinux build,
> UML can't use its old two-stage link, where
> vmlinux is a normal relocatable object file
> which is linked into the linux binary with the linker script
>
> So, in order to fold those into one stage and produce an ELF binary, I need
> the vmlinux "linker" to actually be gcc. This implies I need a
> "-Wl,-T,arch/$(ARCH)/vmlinux.lds.s" instead of the usual
> "-T arch/$(ARCH)/vmlinux.lds.s".
>
> This is done without breaking the other arches by changing the final link
> command to $(LD_vmlinux) which is defaulted to $(LD) if the arch doesn't
> define it.
>
> The "-Wl,..." is done similarly by using $(LDFLAGS_vmlinux_default) if
> the linker command is anything but gcc and $(LDFLAGS_vmlinux_gcc) if it is
> gcc.
I just thought of another solution, which actually seems cleaner and has
less impact on the top-level (generic) Makefile.
Let's just do the
LDFLAGS_vmlinux := -T arch/$(ARCH)/vmlinux.lds.s
before including arch/$(ARCH)/Makefile.
Normal archs can then just do
LDFLAGS_vmlinux += -extra_option
while UML does
LDFLAGS_vmlinux := -r
The actual executable UML generates is called "linux" anyway, so its
Makefile can have its own rule (as for other archs the boot images) which
builds "linux" from "vmlinux" using gcc and the link script. - I.e. the
same way as UML used to do it earlier, anyway.
The only impact on generic code is basically
s/LDFLAGS_vmlinux :=/LDFLAGS_vmlinux +=/
in arch/*/Makefile, and it makes the UML "linux" build conceptually
similar to other archs' "bzImage" or whatever targets.
What do you think?
--Kai
^ permalink raw reply [flat|nested] 4+ messages in thread
* UML kbuild patch
@ 2002-09-24 1:09 Jeff Dike
2002-09-24 0:24 ` Kai Germaschewski
0 siblings, 1 reply; 4+ messages in thread
From: Jeff Dike @ 2002-09-24 1:09 UTC (permalink / raw)
To: Kai Germaschewski; +Cc: linux-kernel, kbuild-devel
The UML build needs a few kbuild changes in order to work with the latest
stuff.
Since kbuild now enforces the use of the linker script on the vmlinux build,
UML can't use its old two-stage link, where
vmlinux is a normal relocatable object file
which is linked into the linux binary with the linker script
So, in order to fold those into one stage and produce an ELF binary, I need
the vmlinux "linker" to actually be gcc. This implies I need a
"-Wl,-T,arch/$(ARCH)/vmlinux.lds.s" instead of the usual
"-T arch/$(ARCH)/vmlinux.lds.s".
This is done without breaking the other arches by changing the final link
command to $(LD_vmlinux) which is defaulted to $(LD) if the arch doesn't
define it.
The "-Wl,..." is done similarly by using $(LDFLAGS_vmlinux_default) if
the linker command is anything but gcc and $(LDFLAGS_vmlinux_gcc) if it is
gcc.
The one caveat is that I removed $(LDFLAGS) from the link line - you might
want to add it back.
You can pull bk://jdike.stearns.org/kbuild-2.5. The patch is also appended.
Jeff
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# ChangeSet 1.600 -> 1.602
# Makefile 1.305 -> 1.307
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/23 jdike@uml.karaya.com 1.601
# Fixes to allow UML to build with the new vmlinux rules.
# --------------------------------------------
# 02/09/23 jdike@uml.karaya.com 1.602
# Made the UML Makefile changes work for the other arches.
# --------------------------------------------
#
diff -Nru a/Makefile b/Makefile
--- a/Makefile Mon Sep 23 19:50:33 2002
+++ b/Makefile Mon Sep 23 19:50:33 2002
@@ -288,10 +288,12 @@
# we cannot yet know if we will need to relink vmlinux.
# So we descend into init/ inside the rule for vmlinux again.
+LD_vmlinux := $(if $(LD_vmlinux),$(LD_vmlinux),$(LD))
+
vmlinux-objs := $(HEAD) $(INIT) $(CORE_FILES) $(LIBS) $(DRIVERS) $(NETWORKS)
quiet_cmd_link_vmlinux = LD $@
-cmd_link_vmlinux = $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) $(HEAD) $(INIT) \
+cmd_link_vmlinux = $(LD_vmlinux) $(LDFLAGS_$(@F)) $(HEAD) $(INIT) \
--start-group \
$(CORE_FILES) \
$(LIBS) \
@@ -313,7 +315,11 @@
$(NM) vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map
endef
-LDFLAGS_vmlinux += -T arch/$(ARCH)/vmlinux.lds.s
+LDFLAGS_vmlinux_default = -T arch/$(ARCH)/vmlinux.lds.s
+LDFLAGS_vmlinux_gcc = -Wl,-T,arch/$(ARCH)/vmlinux.lds.s
+
+vmlinux_base = $(basename $(notdir $(LD_vmlinux)))
+LDFLAGS_vmlinux += $(if $(LDFLAGS_vmlinux_$(vmlinux_base)),$(LDFLAGS_vmlinux_$(vmlinux_base)),$(LDFLAGS_vmlinux_default))
vmlinux: $(vmlinux-objs) arch/$(ARCH)/vmlinux.lds.s FORCE
$(call if_changed_rule,link_vmlinux)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: UML kbuild patch
2002-09-24 0:24 ` Kai Germaschewski
@ 2002-09-24 2:34 ` Jeff Dike
2002-09-24 12:16 ` Oleg Drokin
1 sibling, 0 replies; 4+ messages in thread
From: Jeff Dike @ 2002-09-24 2:34 UTC (permalink / raw)
To: Kai Germaschewski; +Cc: linux-kernel, kbuild-devel
kai@tp1.ruhr-uni-bochum.de said:
> The actual executable UML generates is called "linux" anyway, so its
> Makefile can have its own rule (as for other archs the boot images)
> which builds "linux" from "vmlinux" using gcc and the link script. -
> I.e. the same way as UML used to do it earlier, anyway.
I'd actually prefer the one-stage link. That takes better advantage of
the infrastructure that you've put in place.
Instead of making LDFLAGS_vmlinux available to the arch Makefile, can
you make cmd_link_vmlinux available? Then I can just rewrite it.
That looks like it has no impact on the global Makefile except for moving
it above the include of the arch Makefile.
Jeff
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: UML kbuild patch
2002-09-24 0:24 ` Kai Germaschewski
2002-09-24 2:34 ` Jeff Dike
@ 2002-09-24 12:16 ` Oleg Drokin
1 sibling, 0 replies; 4+ messages in thread
From: Oleg Drokin @ 2002-09-24 12:16 UTC (permalink / raw)
To: Kai Germaschewski; +Cc: Jeff Dike, linux-kernel, kbuild-devel
Hello!
On Mon, Sep 23, 2002 at 07:24:01PM -0500, Kai Germaschewski wrote:
> I just thought of another solution, which actually seems cleaner and has
> less impact on the top-level (generic) Makefile.
On a little bit unrelated note, I found that your changes accepted by Linus
broke UML (the ones entitled as 'kbuild: arch/um cleanup / O_TARGET removal')
build for 2.5.38, so that's what I was forced to do to make it to compile:
===== arch/um/Makefile 1.3 vs edited =====
--- 1.3/arch/um/Makefile Tue Sep 24 15:37:03 2002
+++ edited/arch/um/Makefile Tue Sep 24 16:12:46 2002
@@ -30,15 +30,10 @@
LINK_PROFILE = $(PROFILE) -Wl,--wrap,__monstartup
endif
-ARCH_SUBDIRS = $(ARCH_DIR)/drivers $(ARCH_DIR)/kernel \
- $(ARCH_DIR)/sys-$(SUBARCH) $(ARCH_DIR)/os-$(OS)
-
-SUBDIRS += $(ARCH_SUBDIRS)
-
core-y += $(ARCH_DIR)/kernel/ \
- += $(ARCH_DIR)/drivers/ \
- += $(ARCH_DIR)/sys-$(SUBARCH)/ \
- += $(ARCH_DIR)/os-$(OS)/
+ $(ARCH_DIR)/drivers/ \
+ $(ARCH_DIR)/sys-$(SUBARCH)/ \
+ $(ARCH_DIR)/os-$(OS)/
libs-$(CONFIG_PT_PROXY) += $(ARCH_DIR)/ptproxy/
@@ -63,7 +58,9 @@
-DELF_ARCH=$(ELF_ARCH) -DELF_FORMAT=\"$(ELF_FORMAT)\"
LD_vmlinux = $(CC)
-LDFLAGS_vmlinux = $(LINK_PROFILE) $(LINK_WRAPS) -static $(ARCH_DIR)/main.o
+LDFLAGS_vmlinux = $(LINK_PROFILE) $(LINK_WRAPS) -static $(ARCH_DIR)/main.o -L/usr/lib
+
+LIBS += -lutil
SYMLINK_HEADERS = include/asm-um/archparam.h include/asm-um/system.h \
include/asm-um/sigcontext.h include/asm-um/processor.h \
===== arch/um/Makefile-os-Linux 1.1 vs edited =====
--- 1.1/arch/um/Makefile-os-Linux Fri Sep 6 21:29:28 2002
+++ edited/arch/um/Makefile-os-Linux Tue Sep 24 15:56:31 2002
@@ -4,4 +4,3 @@
#
SUBDIRS += $(ARCH_DIR)/os-$(OS)/drivers
-LIBS += $(ARCH_DIR)/os-$(OS)/drivers/drivers.o
===== arch/um/kernel/Makefile 1.2 vs edited =====
--- 1.2/arch/um/kernel/Makefile Mon Sep 23 03:40:07 2002
+++ edited/arch/um/kernel/Makefile Tue Sep 24 15:49:48 2002
@@ -10,7 +10,6 @@
umid.o user_util.o
obj-$(CONFIG_BLK_DEV_INITRD) += initrd_kern.o initrd_user.o
-endif
# user_syms.o not included here because Rules.make has its own ideas about
# building anything in export-objs
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2002-09-24 12:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-09-24 1:09 UML kbuild patch Jeff Dike
2002-09-24 0:24 ` Kai Germaschewski
2002-09-24 2:34 ` Jeff Dike
2002-09-24 12:16 ` Oleg Drokin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).