[PATCH] uml: support a separate build tree; support USER_OBJS dependencies

2005-02-13 Thread Vadim Abrossimov
1. To support a separate build tree for the um/i386 architecture
the following changes have been done:
- fix makefiles to generate new files and to create symlinks in the  
'' only
- in particular, to solve the issue of 'arch/um/include/sysdep-',
the same technique as for 'include/asm' has been used: create a symlink  
from
'/arch/um/include2/sysdep' to  
'/arch/um/include/sysdep-'
- fix '#include's in the header files that the assumption of included  
files located in
the same directory has been broken.

The patch applies (and has been tested) on the i386 sub-architecture only.
Other supported sub-architectures should still work as previously building  
in
the source tree only.

2. In order to support dependencies for 'USER_OBJS' object files use the  
generic Kbuild
infrastructure overwriting 'c_flags' as needed.

These two changes have been combined in one patch because some makefiles  
are impacted by both.

Signed-off-by: <[EMAIL PROTECTED]>
---
 arch/um/Makefile |   37  
+++
 arch/um/drivers/Makefile |4 +--
 arch/um/include/sysdep-i386/sigcontext.h |2 -
 arch/um/kernel/Makefile  |7 ++---
 arch/um/kernel/skas/Makefile |3 --
 arch/um/kernel/tt/Makefile   |6 +
 arch/um/kernel/tt/ptproxy/Makefile   |3 --
 arch/um/os-Linux/Makefile|3 --
 arch/um/os-Linux/drivers/Makefile|3 --
 arch/um/os-Linux/sys-i386/Makefile   |4 +--
 arch/um/sys-i386/Makefile|5 +---
 include/asm-um/archparam-i386.h  |2 -
 12 files changed, 45 insertions(+), 34 deletions(-)

= arch/um/Makefile 1.54 vs edited =
--- 1.54/arch/um/Makefile   2005-02-11 07:57:42 +01:00
+++ edited/arch/um/Makefile 2005-02-13 11:57:01 +01:00
@@ -43,7 +43,9 @@ ifneq ($(MAKEFILES-INCL),)
   include $(MAKEFILES-INCL)
 endif
-ARCH_INCLUDE   := -I$(ARCH_DIR)/include
+ARCH_INCLUDE   := -I$(ARCH_DIR)/include \
+   $(if $(KBUILD_SRC), -I$(objtree)/$(ARCH_DIR)/include2)
+
 SYS_DIR:= $(ARCH_DIR)/include/sysdep-$(SUBARCH)
 include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH)
@@ -60,8 +62,12 @@ CFLAGS += $(CFLAGS-y) -D__arch_um__ -DSU
$(ARCH_INCLUDE) $(MODE_INCLUDE)
 USER_CFLAGS := $(patsubst -I%,,$(CFLAGS))
-USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \
-	$(MODE_INCLUDE) $(ARCH_USER_CFLAGS)
+USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS))
+# If building the kernel in a separate tree we need to add this path  
manually.
+# Note, that for CFLAGS it's done in the generic 'scripts/Makefile.lib'
+USER_CFLAGS += $(if $(KBUILD_SRC), -I$(srctree)/$(ARCH_DIR)/include)
+USER_CFLAGS += $(ARCH_INCLUDE) $(MODE_INCLUDE) $(ARCH_USER_CFLAGS)
+
 CFLAGS += -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask
 CFLAGS += $(call cc-option,-fno-unit-at-a-time,)

@@ -94,7 +100,7 @@ define archhelp
   echo '  find in the kernel root.'
 endef
-$(shell cd $(ARCH_DIR) && ln -sf Kconfig_$(SUBARCH) Kconfig_arch)
+$(shell cd $(ARCH_DIR) && ln -sf $(if $(KBUILD_SRC),  
$(srctree)/$(ARCH_DIR)/)Kconfig_$(SUBARCH) Kconfig_arch)

 prepare: $(ARCH_SYMLINKS) $(SYS_HEADERS) $(GEN_HEADERS) \
$(ARCH_DIR)/kernel/vmlinux.lds.S
@@ -138,6 +144,7 @@ CLEAN_FILES += linux x.i gmon.out $(ARCH
 MRPROPER_FILES += $(SYMLINK_HEADERS) $(ARCH_SYMLINKS) \
$(addprefix $(ARCH_DIR)/kernel/,$(KERN_SYMLINKS)) $(ARCH_DIR)/os \
+   $(ARCH_DIR)/include2/sysdep \
$(ARCH_DIR)/Kconfig_arch
 archclean:
@@ -150,26 +157,38 @@ archclean:
 $(ARCH_DIR)/kernel/vmlinux.lds.S: FORCE
 	$(Q)if [ "$(shell readlink $@)" != "$(LD_SCRIPT-y)" ]; then \
 		echo '  SYMLINK $@'; \
-		ln -sf $(LD_SCRIPT-y) $@; \
+		ln -sf $(if $(KBUILD_SRC),  
$(srctree)/$(ARCH_DIR)/kernel/)$(LD_SCRIPT-y) $@; \
 		touch $@; \
 	fi;

 $(SYMLINK_HEADERS):
@echo '  SYMLINK $@'
-   $(Q)cd $(TOPDIR)/$(dir $@) ; \
+ifneq ($(KBUILD_SRC),)
+   $(Q)mkdir -p $(dir $@)
+   $(Q)cd $(dir $@) ; \
+   ln -sf $(srctree)/$(basename $@)-$(SUBARCH)$(suffix $@) $(notdir $@)
+else
+   $(Q)cd $(srctree)/$(dir $@) ; \
ln -sf $(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $(notdir $@)
+endif
 include/asm-um/arch:
 	@echo '  SYMLINK $@'
-	$(Q)cd $(TOPDIR)/include/asm-um && ln -sf ../asm-$(SUBARCH) arch
+	$(if $(KBUILD_SRC), $(Q)mkdir -p include/asm-um)
+	$(Q)cd include/asm-um && ln -fsn $(if $(KBUILD_SRC), $(srctree)/include,  
..)/asm-$(SUBARCH) arch

 $(ARCH_DIR)/include/sysdep:
 	@echo '  SYMLINK $@'
-	$(Q)cd $(ARCH_DIR)/include && ln -sf sysdep-$(SUBARCH) sysdep
+ifneq ($(KBUILD_SRC),)
+	$(Q)mkdir -p $(ARCH_DIR)/include2
+	$(Q)cd $(ARCH_DIR)/include2 && ln -fsn  
$(srctree)/$(ARCH_DIR)/include/sysdep-$(SUBARCH) sysdep
+endif
+	$(Q)cd $(ARCH_DIR)/include && ln -fsn sysdep-$(SUBARCH) sysdep

 $(ARCH_DIR)/os:
 	@echo '  SYMLINK $@'
-	$(Q)cd $(ARCH_DIR) && ln -sf os-$(OS) os
+	$(if $(KBUILD_SRC), $(Q)mkdir -p 

[PATCH] uml: support a separate build tree; support USER_OBJS dependencies

2005-02-13 Thread Vadim Abrossimov
1. To support a separate build tree for the um/i386 architecture
the following changes have been done:
- fix makefiles to generate new files and to create symlinks in the  
'objtree' only
- in particular, to solve the issue of 'arch/um/include/sysdep-subarch',
the same technique as for 'include/asm' has been used: create a symlink  
from
'objtree/arch/um/include2/sysdep' to  
'srctree/arch/um/include/sysdep-subarch'
- fix '#include's in the header files that the assumption of included  
files located in
the same directory has been broken.

The patch applies (and has been tested) on the i386 sub-architecture only.
Other supported sub-architectures should still work as previously building  
in
the source tree only.

2. In order to support dependencies for 'USER_OBJS' object files use the  
generic Kbuild
infrastructure overwriting 'c_flags' as needed.

These two changes have been combined in one patch because some makefiles  
are impacted by both.

Signed-off-by: [EMAIL PROTECTED]
---
 arch/um/Makefile |   37  
+++
 arch/um/drivers/Makefile |4 +--
 arch/um/include/sysdep-i386/sigcontext.h |2 -
 arch/um/kernel/Makefile  |7 ++---
 arch/um/kernel/skas/Makefile |3 --
 arch/um/kernel/tt/Makefile   |6 +
 arch/um/kernel/tt/ptproxy/Makefile   |3 --
 arch/um/os-Linux/Makefile|3 --
 arch/um/os-Linux/drivers/Makefile|3 --
 arch/um/os-Linux/sys-i386/Makefile   |4 +--
 arch/um/sys-i386/Makefile|5 +---
 include/asm-um/archparam-i386.h  |2 -
 12 files changed, 45 insertions(+), 34 deletions(-)

= arch/um/Makefile 1.54 vs edited =
--- 1.54/arch/um/Makefile   2005-02-11 07:57:42 +01:00
+++ edited/arch/um/Makefile 2005-02-13 11:57:01 +01:00
@@ -43,7 +43,9 @@ ifneq ($(MAKEFILES-INCL),)
   include $(MAKEFILES-INCL)
 endif
-ARCH_INCLUDE   := -I$(ARCH_DIR)/include
+ARCH_INCLUDE   := -I$(ARCH_DIR)/include \
+   $(if $(KBUILD_SRC), -I$(objtree)/$(ARCH_DIR)/include2)
+
 SYS_DIR:= $(ARCH_DIR)/include/sysdep-$(SUBARCH)
 include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH)
@@ -60,8 +62,12 @@ CFLAGS += $(CFLAGS-y) -D__arch_um__ -DSU
$(ARCH_INCLUDE) $(MODE_INCLUDE)
 USER_CFLAGS := $(patsubst -I%,,$(CFLAGS))
-USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \
-	$(MODE_INCLUDE) $(ARCH_USER_CFLAGS)
+USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS))
+# If building the kernel in a separate tree we need to add this path  
manually.
+# Note, that for CFLAGS it's done in the generic 'scripts/Makefile.lib'
+USER_CFLAGS += $(if $(KBUILD_SRC), -I$(srctree)/$(ARCH_DIR)/include)
+USER_CFLAGS += $(ARCH_INCLUDE) $(MODE_INCLUDE) $(ARCH_USER_CFLAGS)
+
 CFLAGS += -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask
 CFLAGS += $(call cc-option,-fno-unit-at-a-time,)

@@ -94,7 +100,7 @@ define archhelp
   echo '  find in the kernel root.'
 endef
-$(shell cd $(ARCH_DIR)  ln -sf Kconfig_$(SUBARCH) Kconfig_arch)
+$(shell cd $(ARCH_DIR)  ln -sf $(if $(KBUILD_SRC),  
$(srctree)/$(ARCH_DIR)/)Kconfig_$(SUBARCH) Kconfig_arch)

 prepare: $(ARCH_SYMLINKS) $(SYS_HEADERS) $(GEN_HEADERS) \
$(ARCH_DIR)/kernel/vmlinux.lds.S
@@ -138,6 +144,7 @@ CLEAN_FILES += linux x.i gmon.out $(ARCH
 MRPROPER_FILES += $(SYMLINK_HEADERS) $(ARCH_SYMLINKS) \
$(addprefix $(ARCH_DIR)/kernel/,$(KERN_SYMLINKS)) $(ARCH_DIR)/os \
+   $(ARCH_DIR)/include2/sysdep \
$(ARCH_DIR)/Kconfig_arch
 archclean:
@@ -150,26 +157,38 @@ archclean:
 $(ARCH_DIR)/kernel/vmlinux.lds.S: FORCE
 	$(Q)if [ $(shell readlink $@) != $(LD_SCRIPT-y) ]; then \
 		echo '  SYMLINK $@'; \
-		ln -sf $(LD_SCRIPT-y) $@; \
+		ln -sf $(if $(KBUILD_SRC),  
$(srctree)/$(ARCH_DIR)/kernel/)$(LD_SCRIPT-y) $@; \
 		touch $@; \
 	fi;

 $(SYMLINK_HEADERS):
@echo '  SYMLINK $@'
-   $(Q)cd $(TOPDIR)/$(dir $@) ; \
+ifneq ($(KBUILD_SRC),)
+   $(Q)mkdir -p $(dir $@)
+   $(Q)cd $(dir $@) ; \
+   ln -sf $(srctree)/$(basename $@)-$(SUBARCH)$(suffix $@) $(notdir $@)
+else
+   $(Q)cd $(srctree)/$(dir $@) ; \
ln -sf $(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $(notdir $@)
+endif
 include/asm-um/arch:
 	@echo '  SYMLINK $@'
-	$(Q)cd $(TOPDIR)/include/asm-um  ln -sf ../asm-$(SUBARCH) arch
+	$(if $(KBUILD_SRC), $(Q)mkdir -p include/asm-um)
+	$(Q)cd include/asm-um  ln -fsn $(if $(KBUILD_SRC), $(srctree)/include,  
..)/asm-$(SUBARCH) arch

 $(ARCH_DIR)/include/sysdep:
 	@echo '  SYMLINK $@'
-	$(Q)cd $(ARCH_DIR)/include  ln -sf sysdep-$(SUBARCH) sysdep
+ifneq ($(KBUILD_SRC),)
+	$(Q)mkdir -p $(ARCH_DIR)/include2
+	$(Q)cd $(ARCH_DIR)/include2  ln -fsn  
$(srctree)/$(ARCH_DIR)/include/sysdep-$(SUBARCH) sysdep
+endif
+	$(Q)cd $(ARCH_DIR)/include  ln -fsn sysdep-$(SUBARCH) sysdep

 $(ARCH_DIR)/os:
 	@echo '  SYMLINK $@'
-	$(Q)cd $(ARCH_DIR)  ln -sf os-$(OS) os
+	$(if $(KBUILD_SRC),