From: Jeff Mahoney Subject: [PATCH] kbuild: Properly handle arch/$arch/include/asm References: bnc#427473 Some architectures have moved include/asm-$arch to arch/$arch/include/asm, but were still placing new files in include/asm-$arch. This causes build problems with out-of-tree modules. This patch properly handles the new locations. Signed-off-by: Jeff Mahoney --- Makefile | 23 +++++++++++++++-------- arch/ia64/Makefile | 2 +- arch/ia64/include/asm/irq.h | 2 +- arch/ia64/kernel/Makefile | 6 +++--- 4 files changed, 20 insertions(+), 13 deletions(-) --- a/arch/ia64/include/asm/irq.h +++ b/arch/ia64/include/asm/irq.h @@ -13,7 +13,7 @@ #include #include -#include +#include static __inline__ int irq_canonicalize (int irq) --- a/arch/ia64/kernel/Makefile +++ b/arch/ia64/kernel/Makefile @@ -96,15 +96,15 @@ endef # We use internal kbuild rules to avoid the "is up to date" message from make arch/$(SRCARCH)/kernel/nr-irqs.s: $(srctree)/arch/$(SRCARCH)/kernel/nr-irqs.c \ - $(wildcard $(srctree)/include/asm-ia64/*/irq.h) + $(wildcard $(srctree)/arch/ia64/include/asm/*/irq.h) $(Q)mkdir -p $(dir $@) $(call if_changed_dep,cc_s_c) -include/asm-ia64/nr-irqs.h: arch/$(SRCARCH)/kernel/nr-irqs.s +arch/ia64/include/asm/nr-irqs.h: arch/$(SRCARCH)/kernel/nr-irqs.s $(Q)mkdir -p $(dir $@) $(call cmd,nr_irqs) -clean-files += $(objtree)/include/asm-ia64/nr-irqs.h +clean-files += $(objtree)/arch/ia64/include/asm/nr-irqs.h # # native ivt.S and entry.S --- a/arch/ia64/Makefile +++ b/arch/ia64/Makefile @@ -105,4 +105,4 @@ archprepare: make_nr_irqs_h FORCE PHONY += make_nr_irqs_h FORCE make_nr_irqs_h: FORCE - $(Q)$(MAKE) $(build)=arch/ia64/kernel include/asm-ia64/nr-irqs.h + $(Q)$(MAKE) $(build)=arch/ia64/kernel arch/ia64/include/asm/nr-irqs.h --- a/Makefile +++ b/Makefile @@ -968,8 +968,10 @@ define check-symlink set -e; \ if [ -L include/asm ]; then \ asmlink=`readlink include/asm | cut -d '-' -f 2`; \ - if [ "$$asmlink" != "$(SRCARCH)" ]; then \ - echo "ERROR: the symlink $@ points to asm-$$asmlink but asm-$(SRCARCH) was expected"; \ + archlink=`readlink include/asm | cut -d '/' -f 3`; \ + if [ "$$asmlink" != "$(SRCARCH)" -a \ + "$$archlink" != "$(SRCARCH)" ]; then \ + echo "ERROR: the symlink $@ points to asm-$$asmlink but asm-$(SRCARCH) or ../arch/$(SRCARCH)/include/asm was expected"; \ echo " set ARCH or save .config and run 'make mrproper' to fix it"; \ exit 1; \ fi; \ @@ -980,12 +982,18 @@ endef # not exist so the test in chack-symlink works and we have a # directory for generated filesas used by some architectures. define create-symlink - if [ ! -L include/asm ]; then \ - echo ' SYMLINK $@ -> include/asm-$(SRCARCH)'; \ - if [ ! -d include/asm-$(SRCARCH) ]; then \ - mkdir -p include/asm-$(SRCARCH); \ - fi; \ - ln -fsn asm-$(SRCARCH) $@; \ + if [ ! -L include/asm ]; then \ + if [ -d $(srctree)/arch/$(SRCARCH)/include/asm ]; then \ + echo ' SYMLINK $@ -> arch/$(SRCARCH)/include/asm'; \ + mkdir -p arch/$(SRCARCH)/include/asm; \ + ln -fsn ../arch/$(SRCARCH)/include/asm $@; \ + else \ + echo ' SYMLINK $@ -> include/asm-$(SRCARCH)'; \ + if [ ! -d include/asm-$(SRCARCH) ]; then \ + mkdir -p include/asm-$(SRCARCH); \ + fi; \ + ln -fsn asm-$(SRCARCH) $@; \ + fi; \ fi endef