[U-Boot] [PATCH] Don't add symlink in srctree when using an objtree

When building with srctree != objtree, the build creates arch/soc/cpu specific symlinks in the source tree. This means that the same source tree can't be used for multiple builds at the same time. Also, these symlinks in the source tree are only cleaned up if one passes the same O= to distclean.
When srctree != objtree, mkconfig creates an $objtree/include2 directory in the objtree to host the asm -> arch/$arch/include/asm symlink so that "#include <asm>" can be used. But it also creates another identical symlink in $objtree/include.
Then, mkconfig creates two symlinks: $objtree/include/asm/arch -> arch/$arch/include/asm/arch-$cpu (or $soc) $objtree/include/asm/proc -> arch/$arch/include/asm/proc-armv (on arm) but because $objtree/include/asm points at $srctree already, the two symlinks are created under $srctree.
To fix this, create a real $objtree/include/asm directory, instead of a symlink. Update cleanup code accordingly.
Signed-off-by: Loïc Minier loic.minier@linaro.org --- Makefile | 4 +++- mkconfig | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile index 87a383d..8a3f3e0 100644 --- a/Makefile +++ b/Makefile @@ -1246,7 +1246,9 @@ clobber: clean @rm -f $(obj)u-boot.imx @rm -f $(obj)tools/{env/crc32.c,inca-swap-bytes} @rm -f $(obj)arch/powerpc/cpu/mpc824x/bedbug_603e.c - @rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm + @rm -f $(obj)include/asm/proc $(obj)include/asm/arch + @[ ! -h $(obj)include/asm ] || rm -f $(obj)include/asm + @[ ! -d $(obj)include/asm ] || rmdir $(obj)include/asm @rm -fr $(obj)include/generated @[ ! -d $(obj)nand_spl ] || find $(obj)nand_spl -name "*" -type l -print | xargs rm -f @[ ! -d $(obj)onenand_ipl ] || find $(obj)onenand_ipl -name "*" -type l -print | xargs rm -f diff --git a/mkconfig b/mkconfig index 2fda1d4..1408b53 100755 --- a/mkconfig +++ b/mkconfig @@ -98,8 +98,7 @@ if [ "$SRCTREE" != "$OBJTREE" ] ; then ln -s ${SRCTREE}/arch/${arch}/include/asm asm LNPREFIX=${SRCTREE}/arch/${arch}/include/asm/ cd ../include - rm -f asm - ln -s ${SRCTREE}/arch/${arch}/include/asm asm + mkdir -p asm else cd ./include rm -f asm

Dear =?UTF-8?q?Lo=C3=AFc=20Minier?=,
In message 1291510334-650-1-git-send-email-loic.minier@linaro.org you wrote:
When building with srctree != objtree, the build creates arch/soc/cpu specific symlinks in the source tree. This means that the same source tree can't be used for multiple builds at the same time. Also, these symlinks in the source tree are only cleaned up if one passes the same O= to distclean.
When srctree != objtree, mkconfig creates an $objtree/include2 directory in the objtree to host the asm -> arch/$arch/include/asm symlink so that "#include <asm>" can be used. But it also creates another identical symlink in $objtree/include.
Then, mkconfig creates two symlinks: $objtree/include/asm/arch -> arch/$arch/include/asm/arch-$cpu (or $soc) $objtree/include/asm/proc -> arch/$arch/include/asm/proc-armv (on arm) but because $objtree/include/asm points at $srctree already, the two symlinks are created under $srctree.
To fix this, create a real $objtree/include/asm directory, instead of a symlink. Update cleanup code accordingly.
Thanks for the fix. A tiny change request, though:
- @rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
- @rm -f $(obj)include/asm/proc $(obj)include/asm/arch
- @[ ! -h $(obj)include/asm ] || rm -f $(obj)include/asm
- @[ ! -d $(obj)include/asm ] || rmdir $(obj)include/asm
Don't make it that complicated. Just change the line into
@rm -fr$(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
Also a question: how has this change been tested?
Best regards,
Wolfgang Denk
participants (2)
-
Loïc Minier
-
Wolfgang Denk