Linux-csky Archive on lore.kernel.org
 help / color / Atom feed
From: Thomas De Schampheleire <patrickdepinguin@gmail.com>
To: Mao Han <han_mao@c-sky.com>
Cc: buildroot <buildroot@buildroot.org>,
	xianmiao_qu@c-sky.com, ren_guo@c-sky.com,
	linux-csky@vger.kernel.org, hongdeng_chen@c-sky.com,
	thomas.petazzoni@bootlin.com
Subject: Re: [Buildroot] [PATCH 1/2] package/toolchain-external: ensure ARCH_LIB_DIR exist
Date: Thu, 16 Jan 2020 10:36:45 +0100
Message-ID: <CAAXf6LWZZKCW=g=ReXz00hLJSiBw6sJfsmSxu0=Q_J4FVda32g@mail.gmail.com> (raw)
In-Reply-To: <20200113033451.GA15150@vmh-VirtualBox>

Hello Mao Han,

El lun., 13 ene. 2020 a las 4:39, Mao Han (<han_mao@c-sky.com>) escribió:
>
> Hi,
> On Fri, Jan 10, 2020 at 11:57:00AM +0100, Thomas De Schampheleire wrote:
> > Hello,
> >
> > El jue., 2 ene. 2020 a las 5:15, Mao Han (<han_mao@c-sky.com>) escribió:
> > >
> > > Different architecture may have different arch library folder structure
> > > for their multilib toolchain. RISC-V toolchain has folder structure
> > > like:
> > > /sysroot/lib64/
> > > /sysroot/lib64/lp64
> > > /sysroot/lib64/lp64d
> > > The first level is for ISA and the second level is for ABI.
> > > Current buildroot only creat lib and lib64, some error is reported
> > > while installing the external toolchain:
> > > >>> toolchain-external-custom  Installing to staging directory
> > > /usr/bin/install -D -m 0755 /.../build/toolchain-external-custom/toolchain-wrapper /.../host/bin/toolchain-wrapper
> > > ln: failed to create symbolic link '/.../host/riscv64-buildroot-linux-gnu/sysroot/lib64/lp64': No such file or directory
> > > ln: failed to create symbolic link '/.../host/riscv64-buildroot-linux-gnu/sysroot/usr/lib64/lp64': No such file or directory
> > >
> > > Signed-off-by: Qu Xianmiao <xianmiao_qu@c-sky.com>
> > > Signed-off-by: Chen Hongdeng <hongdeng_chen@c-sky.com>
> > > Signed-off-by: Guo Ren<ren_guo@c-sky.com>
> > > Signed-off-by: Mao Han <han_mao@c-sky.com>
> > > Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
> > > Cc: Mark Corbin <mark.corbin@embecosm.com>
> > > ---
> > >  toolchain/toolchain-external/pkg-toolchain-external.mk | 2 ++
> > >  1 file changed, 2 insertions(+)
> > >
> > > diff --git a/toolchain/toolchain-external/pkg-toolchain-external.mk b/toolchain/toolchain-external/pkg-toolchain-external.mk
> > > index baf719a..13b2468 100644
> > > --- a/toolchain/toolchain-external/pkg-toolchain-external.mk
> > > +++ b/toolchain/toolchain-external/pkg-toolchain-external.mk
> > > @@ -454,6 +454,8 @@ create_lib_symlinks = \
> > >         ARCH_LIB_DIR="$(call toolchain_find_libdir,$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS))" ; \
> > >         if [ ! -e "$${DESTDIR}/$${ARCH_LIB_DIR}" -a ! -e "$${DESTDIR}/usr/$${ARCH_LIB_DIR}" ]; then \
> > >                 relpath="$(call relpath_prefix,$${ARCH_LIB_DIR})" ; \
> > > +               mkdir -p "$${DESTDIR}/$${ARCH_LIB_DIR}" ; \
> > > +               mkdir -p "$${DESTDIR}/usr/$${ARCH_LIB_DIR}" ; \
> > >                 ln -snf $${relpath}lib "$${DESTDIR}/$${ARCH_LIB_DIR}" ; \
> > >                 ln -snf $${relpath}lib "$${DESTDIR}/usr/$${ARCH_LIB_DIR}" ; \
> >
> > This is not correct.
> >
> > The purpose of this code is to create a symbolic link named according
> > to 'ARCH_LIB_DIR' inside DESTDIR and DESTDIR/usr.
> > It is not the purpose to create a symbolic link called 'lib' inside a
> > directory DESTDIR/ARCH_LIB_DIR.
> > The change you made is creating a _directory_ ARCH_LIB_DIR while it
> > should be a _symbolic link_.
> >
>
> Yes, I misunderstood the option -f as it will only remove the symbol
> file not the directory.
> The path sysroot/lib64 is relinked to sysroot/lib after the external
> tool installation, all the libraries are copied to sysroot/lib/lp64d.
> The toolchain can find it's corresponding library, so I don't notice
> the mistake.
>
> If I change the code like:
> mkdir -p `dirname "$${DESTDIR}/$${ARCH_LIB_DIR}"` ; \
> mkdir -p `dirname "$${DESTDIR}/usr/$${ARCH_LIB_DIR}"` ; \
>
> Two symbol links are created:
> sysroot/:lib64 -> lib
> sysroot/lib: lp64d -> ../lib
> The libraries are under: lib, lib64, lib64/lp64d ...
>
> > Could you please clarify what is the value of ARCH_LIB_DIR in your case?
> >
> > And could you clarify which part of the path is missing?
> > '/.../host/riscv64-buildroot-linux-gnu/sysroot/lib64/lp64' ?
> > I assume that the 'lib64' part is missing?
> >
>
> Yes, "lib64" is the missing part. It can be some other value like
> "lib64xthead" when the extension is different.
>
> > Finally, please provide a defconfig that allows to reproduce and test
> > this problem.
> >
>
> The defconfig is attached. And the toolchain I used comes from:
> https://github.com/riscv/riscv-gnu-toolchain
>
> make with:
> git clone https://github.com/riscv/riscv-gnu-toolchain
> cd riscv-gnu-toolchain
> git submodule update --init --recursive
> ./configure --prefix=/opt/riscv --enable-multilib
> make linux
>
> I can't provide the toolchain binary as it is quite large, and
> the network is also limited.
>

I compiled the riscv toolchain as instructed, and applied your config
(note: it was a full config, not a defconfig). The defconfig is:

BR2_riscv=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/riscv"
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-unknown-linux-gnu"
BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_0=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"
BR2_SYSTEM_DHCP="eth0"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.1.12"
BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_OPENSBI=y
BR2_TARGET_OPENSBI_PLAT="qemu/virt"
BR2_PACKAGE_HOST_QEMU=y
BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y

Using this config, I do not see the same error as you. The toolchain
seems to install correctly (note: later we will notice it does not;
see below), but I do get an error later when busybox is compiled:

...
  CC      libbb/xregcomp.o
  AR      libbb/lib.a
  LINK    busybox_unstripped
Your linker does not support --sort-section,alignment
Your linker does not support --sort-common
Your linker does not support -Wl,--gc-sections
Trying libraries: m resolv
Failed: -Wl,--start-group  -lm -lresolv  -Wl,--end-group
Output of:
/home/tdescham/repo/contrib/buildroot/output/host/bin/riscv64-unknown-linux-gnu-gcc
-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os
-Wall -Wshadow -Wwrite-strings -Wundef -Wstrict-prototypes -Wunused
-Wunused-parameter -Wunused-function -Wunused-value
-Wmissing-prototypes -Wmissing-declarations -Wno-format-security
-Wdeclaration-after-statement -Wold-style-definition
-fno-builtin-strlen -finline-limit=0 -fomit-frame-pointer
-ffunction-sections -fdata-sections -fno-guess-branch-probability
-funsigned-char -static-libgcc -falign-functions=1 -falign-jumps=1
-falign-labels=1 -falign-loops=1 -fno-unwind-tables
-fno-asynchronous-unwind-tables -fno-builtin-printf -Os -o
busybox_unstripped -Wl,--start-group applets/built-in.o archival/lib.a
archival/libarchive/lib.a console-tools/lib.a coreutils/lib.a
coreutils/libcoreutils/lib.a debianutils/lib.a klibc-utils/lib.a
e2fsprogs/lib.a editors/lib.a findutils/lib.a init/lib.a libbb/lib.a
libpwdgrp/lib.a loginutils/lib.a mailutils/lib.a miscutils/lib.a
modutils/lib.a networking/lib.a networking/libiproute/lib.a
networking/udhcp/lib.a printutils/lib.a procps/lib.a runit/lib.a
selinux/lib.a shell/lib.a sysklogd/lib.a util-linux/lib.a
util-linux/volume_id/lib.a archival/built-in.o
archival/libarchive/built-in.o console-tools/built-in.o
coreutils/built-in.o coreutils/libcoreutils/built-in.o
debianutils/built-in.o klibc-utils/built-in.o e2fsprogs/built-in.o
editors/built-in.o findutils/built-in.o init/built-in.o
libbb/built-in.o libpwdgrp/built-in.o loginutils/built-in.o
mailutils/built-in.o miscutils/built-in.o modutils/built-in.o
networking/built-in.o networking/libiproute/built-in.o
networking/udhcp/built-in.o printutils/built-in.o procps/built-in.o
runit/built-in.o selinux/built-in.o shell/built-in.o
sysklogd/built-in.o util-linux/built-in.o
util-linux/volume_id/built-in.o -Wl,--end-group -Wl,--start-group -lm
-lresolv -Wl,--end-group
==========
/home/tdescham/repo/contrib/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.2.0/../../../../riscv64-unknown-linux-gnu/bin/ld:
coreutils/lib.a(mktemp.o): in function `.L5':
mktemp.c:(.text.mktemp_main+0xb4): warning: the use of `mktemp' is
dangerous, better use `mkstemp' or `mkdtemp'
/home/tdescham/repo/contrib/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.2.0/../../../../riscv64-unknown-linux-gnu/bin/ld:
cannot find /lib/ld-linux-riscv64-lp64d.so.1 inside
/home/tdescham/repo/contrib/buildroot/output/host/riscv64-buildroot-linux-gnu/sysroot
collect2: error: ld returned 1 exit status
Note: if build needs additional libraries, put them in CONFIG_EXTRA_LDLIBS.
Example: CONFIG_EXTRA_LDLIBS="pthread dl tirpc audit pam"
make[1]: *** [Makefile:718: busybox_unstripped] Error 1
make[1]: Leaving directory
'/home/tdescham/repo/contrib/buildroot/output/build/busybox-1.31.1'
make: *** [package/pkg-generic.mk:260:
/home/tdescham/repo/contrib/buildroot/output/build/busybox-1.31.1/.stamp_built]
Error 2


So the actual error here is:
/home/tdescham/repo/contrib/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.2.0/../../../../riscv64-unknown-linux-gnu/bin/ld:
cannot find /lib/ld-linux-riscv64-lp64d.so.1 inside
/home/tdescham/repo/contrib/buildroot/output/host/riscv64-buildroot-linux-gnu/sysroot
collect2: error: ld returned 1 exit status

At this point, the situation in the buildroot sysroot is:

$ ls -l output/host/riscv64-buildroot-linux-gnu/sysroot/
total 56
drwxr-xr-x 2 tdescham tdescham 4096 Jan 16 10:05 bin/
drwxr-xr-x 2 tdescham tdescham 4096 May  7  2019 dev/
drwxr-xr-x 3 tdescham tdescham 4096 Jan 15 21:58 etc/
drwxr-xr-x 2 tdescham tdescham 4096 Jan 16 08:48 lib/
lrwxrwxrwx 1 tdescham tdescham    3 Jan 16 10:05 lib64 -> lib/
drwxr-xr-x 2 tdescham tdescham 4096 May 28  2014 media/
drwxr-xr-x 2 tdescham tdescham 4096 May 28  2014 mnt/
drwxr-xr-x 2 tdescham tdescham 4096 May 28  2014 opt/
drwxr-xr-x 2 tdescham tdescham 4096 May 28  2014 proc/
drwxr-xr-x 2 tdescham tdescham 4096 Jan 25  2017 root/
drwxr-xr-x 2 tdescham tdescham 4096 Feb  2  2016 run/
drwxr-xr-x 2 tdescham tdescham 4096 Jan 15 21:58 sbin/
drwxr-xr-x 2 tdescham tdescham 4096 May 28  2014 sys/
drwxr-xr-x 2 tdescham tdescham 4096 May 28  2014 tmp/
drwxr-xr-x 8 tdescham tdescham 4096 Jan 15 21:57 usr/

$ ls -l output/host/riscv64-buildroot-linux-gnu/sysroot/lib/lp64d
lrwxrwxrwx 1 tdescham tdescham 6 Jan 16 10:05
output/host/riscv64-buildroot-linux-gnu/sysroot/lib/lp64d -> ../lib/

and there is no ld-linux* file found anywhere, indeed.

Looking at the output of the toolchain installation, there was an error:
>>> toolchain-external-custom  Copying external toolchain sysroot to staging...
/bin/sh: line 0: [: too many arguments

which is caused by the fact that there are multiple 'ld*' matches:
(extra traces added)

SYSROOT_DIR=/home/tdescham/repo/contrib/riscv/sysroot/
ARCH_SYSROOT_DIR=/home/tdescham/repo/contrib/riscv/sysroot/
ARCH_SUBDIR=
ARCH_LIB_DIR=lib64/lp64d
SUPPORT_LIB_DIR=
no ld found yet @@@@@@@@@@@@
/home/tdescham/repo/contrib/riscv/sysroot//lib/ld-linux-riscv32-ilp32d.so.1
/home/tdescham/repo/contrib/riscv/sysroot//lib/ld-linux-riscv32-ilp32.so.1
/home/tdescham/repo/contrib/riscv/sysroot//lib/ld-linux-riscv64-lp64d.so.1
/home/tdescham/repo/contrib/riscv/sysroot//lib/ld-linux-riscv64-lp64.so.1
/bin/sh: line 0: [: too many arguments
done no ld found @@@@@@@@@@@@

Corresponding to this code:

    if [ ! -e $(STAGING_DIR)/lib/ld*.so.* ]; then \
        echo "no ld found yet @@@@@@@@@@@@"; \
        ls $${ARCH_SYSROOT_DIR}/lib/ld*.so.* ; \
        if [ -e $${ARCH_SYSROOT_DIR}/lib/ld*.so.* ]; then \
            echo "ld found in arch_sysroot_dir @@@@@@@@@@@@@"; \
            cp -a $${ARCH_SYSROOT_DIR}/lib/ld*.so.* $(STAGING_DIR)/lib/ ; \
        fi ; \
        echo "done no ld found @@@@@@@@@@@@" ; \
    fi ; \


I'm not yet sure how this should be solved...

Best regards,
Thomas

  reply index

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-02  3:57 Mao Han
2020-01-02  3:57 ` [PATCH 2/2] toolchain: Get ld.so name if available Mao Han
2020-01-10 10:57 ` [Buildroot] [PATCH 1/2] package/toolchain-external: ensure ARCH_LIB_DIR exist Thomas De Schampheleire
2020-01-10 11:15   ` Thomas Petazzoni
2020-01-13  3:34   ` Mao Han
2020-01-16  9:36     ` Thomas De Schampheleire [this message]
2020-01-17  2:35       ` Mao Han

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAAXf6LWZZKCW=g=ReXz00hLJSiBw6sJfsmSxu0=Q_J4FVda32g@mail.gmail.com' \
    --to=patrickdepinguin@gmail.com \
    --cc=buildroot@buildroot.org \
    --cc=han_mao@c-sky.com \
    --cc=hongdeng_chen@c-sky.com \
    --cc=linux-csky@vger.kernel.org \
    --cc=ren_guo@c-sky.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=xianmiao_qu@c-sky.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-csky Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-csky/0 linux-csky/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-csky linux-csky/ https://lore.kernel.org/linux-csky \
		linux-csky@vger.kernel.org
	public-inbox-index linux-csky

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-csky


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git