Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Apr 2020 14:00:57 -0700
From:      Mark Millard <marklmi@yahoo.com>
To:        Emmanuel Vadot <manu@bidouilliste.com>
Cc:        freebsd-arm <freebsd-arm@freebsd.org>, FreeBSD ports <freebsd-ports@freebsd.org>
Subject:   Re: aarch64 host based sysutils/u-boot-{pine64, rock64, rpi[34]} builds fail for: "aarch64-none-elf-gcc: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found"
Message-ID:  <1D414E35-6785-4D15-A798-DFB34C2ACC34@yahoo.com>
In-Reply-To: <7CD48F1B-7405-454A-BEFE-3B17D321D89F@yahoo.com>
References:  <0085757C-02B1-4CB9-9B67-01EB5D6AA86A@yahoo.com> <E5B9A9B4-B574-4303-BD17-F4366BBBD2DC@yahoo.com> <20200427123246.42e3844f39c349aac81009ff@bidouilliste.com> <20200427204606.69157e78e6eb92f3481e47e3@bidouilliste.com> <38BE4488-2BE4-4B9F-BABA-0324B6A7AE8D@yahoo.com> <90693ED6-E93D-4105-8B63-F77313F77079@yahoo.com> <20200428163906.a5081a0493970fb4556fe08b@bidouilliste.com> <13AAC979-927E-43BA-BF16-64C41546A690@yahoo.com> <7CD48F1B-7405-454A-BEFE-3B17D321D89F@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
[Found a cause of the poudiere vs. not distinction.]

On 2020-Apr-28, at 13:01, Mark Millard <marklmi at yahoo.com> wrote:
>=20
> On 2020-Apr-28, at 09:23, Mark Millard <marklmi at yahoo.com> wrote:
>=20
>> On 2020-Apr-28, at 07:39, Emmanuel Vadot <manu at bidouilliste.com> =
wrote:
>>=20
>>> On Mon, 27 Apr 2020 20:14:47 -0700
>>> Mark Millard <marklmi@yahoo.com> wrote:
>>>=20
>>>> On 2020-Apr-27, at 17:15, Mark Millard <marklmi at yahoo.com> =
wrote:
>>>>=20
>>>>> On 2020-Apr-27, at 11:46, Emmanuel Vadot <manu at =
bidouilliste.com> wrote:
>>>>>=20
>>>>>> On Mon, 27 Apr 2020 12:32:46 +0200
>>>>>> Emmanuel Vadot <manu at bidouilliste.com> wrote:
>>>>>>=20
>>>>>>> On Sun, 26 Apr 2020 12:13:46 -0700
>>>>>>> . . .
>>>>>>=20
>>>>>> This is solved with r533162.
>>>>>> I've tested that sysutils/u-boot-pine64-lts build and boots fine.
>>>>>> Let me know if you have still any issues.
>>>>>=20
>>>>> The poudriere-devel runs based on updating /usr/ports content
>>>>> ended up scheduling 190 package builds, including a couple of
>>>>> llvm*'s. Depending on where in the sequence things happen, it
>>>>> could be some time before having such full-native results.
>>>>>=20
>>>>> In a amd64->aarch64 pouriere-devel based cross-build, with
>>>>> nxb-bin in use (a faster build environment in my context),
>>>>> I got:
>>>>>=20
>>>>> . . .
>>>>> gmake[4]: Leaving directory =
'/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/.build/aarch64-none-el=
f/ilp32/libgcc'
>>>>> gmake[3]: Leaving directory =
'/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/.build/aarch64-none-el=
f/libgcc'
>>>>> gmake[2]: Leaving directory =
'/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/.build/aarch64-none-el=
f/libgcc'
>>>>> gmake[1]: Leaving directory =
'/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/.build'
>>>>> =3D=3D=3D=3D> Compressing man pages (compress-man)
>>>>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=

>>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
<phase: package        >=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>>>> =3D=3D=3D>  Building package for aarch64-none-elf-gcc-8.4.0_1
>>>>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/stage/usr/local/lib/gcc=
/aarch64-none-elf/8.4.0/plugin/gtype.state:No such file or directory
>>>>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/stage/usr/local/lib/gcc=
/aarch64-none-elf/8.4.0/plugin/include/ada/gcc-interface/ada-tree.def:No =
such file or direct
>>>>> ory
>>>>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/stage/usr/local/lib/gcc=
/aarch64-none-elf/8.4.0/plugin/include/addresses.h:No such file or =
directory
>>>>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/stage/usr/local/lib/gcc=
/aarch64-none-elf/8.4.0/plugin/include/alias.h:No such file or directory
>>>>> . . . (long list) . . .
>>>>>=20
>>>>>=20
>>>>> That leads to:
>>>>>=20
>>>>> [00:29:06] [04] [00:10:01] Saved devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 wrkdir to: =
/usr/local/poudriere/data/wrkdirs/FBSDFSSDjailCortexA53-default/default/aa=
rch64-none-elf-gcc-8.4.0_1.tar
>>>>> [00:29:10] [04] [00:10:05] Finished devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1: Failed: package
>>>>> [00:29:12] [04] [00:10:07] Skipping sysutils/atf-rk3328 | =
atf-rk3328-v2.3: Dependent port devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 failed
>>>>> [00:29:12] [04] [00:10:07] Skipping sysutils/atf-sun50i_a64 | =
atf-sun50i_a64-v2.3: Dependent port devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 failed
>>>>> [00:29:12] [04] [00:10:07] Skipping sysutils/u-boot-pine64 | =
u-boot-pine64-2020.04: Dependent port devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 failed
>>>>> [00:29:12] [04] [00:10:07] Skipping sysutils/u-boot-rock64 | =
u-boot-rock64-2020.04: Dependent port devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 failed
>>>>> [00:29:12] [04] [00:10:07] Skipping sysutils/u-boot-rpi3 | =
u-boot-rpi3-2020.04: Dependent port devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 failed
>>>>> [00:29:12] [04] [00:10:07] Skipping sysutils/u-boot-rpi4 | =
u-boot-rpi4-2020.04: Dependent port devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 failed
>>>>>=20
>>>>>=20
>>>>>=20
>>>>> I'm guessing that the full-native builds will do similarly.
>>>>> But we will eventually see.
>>>>=20
>>>> One of the aarch64 environments finally got there:
>>>>=20
>>>> [07:40:23] [02] [00:23:04] Saved devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 wrkdir to: =
/usr/local/poudriere/data/wrkdirs/FBSDFSSDjailCortexA57-default/default/aa=
rch64-none-elf-gcc-8.4.0_1.tar
>>>> [07:40:42] [02] [00:23:23] Finished devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1: Failed: package
>>>> [07:40:55] [02] [00:23:36] Skipping sysutils/u-boot-pine64 | =
u-boot-pine64-2020.04: Dependent port devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 failed
>>>> [07:40:55] [02] [00:23:36] Skipping sysutils/u-boot-rock64 | =
u-boot-rock64-2020.04: Dependent port devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 failed
>>>> [07:40:55] [02] [00:23:36] Skipping sysutils/u-boot-rpi3 | =
u-boot-rpi3-2020.04: Dependent port devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 failed
>>>> [07:40:55] [02] [00:23:36] Skipping sysutils/u-boot-rpi4 | =
u-boot-rpi4-2020.04: Dependent port devel/aarch64-none-elf-gcc | =
aarch64-none-elf-gcc-8.4.0_1 failed
>>>>=20
>>>> It failed for the same sorts of reasons as the cross build:
>>>>=20
>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
<phase: package        >=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>>> =3D=3D=3D>  Building package for aarch64-none-elf-gcc-8.4.0_1
>>>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/stage/usr/local/lib/gcc=
/aarch64-none-elf/8.4.0/plugin/gtype.state:No such file or directory
>>>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/stage/usr/local/lib/gcc=
/aarch64-none-elf/8.4.0/plugin/include/ada/gcc-interface/ada-tree.def:No =
such file or direct
>>>> ory
>>>> . . .
>>>>=20
>>>=20
>>> I can reproduce that with poudriere too.
>>> For some reason this doesn't happened when doing a make package ...
>>=20
>> It also happened for the poudriere-based build of
>> devel/arm-none-eabi-gcc :
>>=20
>> [00:26:15] [07] [00:13:23] Saving devel/arm-none-eabi-gcc | =
arm-none-eabi-gcc-8.4.0_1 wrkdir
>> [00:26:23] [07] [00:13:31] Saved devel/arm-none-eabi-gcc | =
arm-none-eabi-gcc-8.4.0_1 wrkdir to: =
/usr/local/poudriere/data/wrkdirs/FBSDFSSDjailCortexA53-default/default/ar=
m-none-eabi-gcc-8.4.0_1.tar
>> [00:26:28] [07] [00:13:36] Finished devel/arm-none-eabi-gcc | =
arm-none-eabi-gcc-8.4.0_1: Failed: package
>> [00:26:30] [07] [00:13:38] Skipping sysutils/u-boot-orangepi-plus-2e =
| u-boot-orangepi-plus-2e-2020.04: Dependent port =
devel/arm-none-eabi-gcc | arm-none-eabi-gcc-8.4.0_1 failed
>> [00:26:30] [07] [00:13:38] Skipping sysutils/u-boot-rpi2 | =
u-boot-rpi2-2020.04: Dependent port devel/arm-none-eabi-gcc | =
arm-none-eabi-gcc-8.4.0_1 failed
>> [00:26:30] [07] [00:13:38] Skipping sysutils/u-boot-sinovoip-bpi-m3 | =
u-boot-sinovoip-bpi-m3-2020.04: Dependent port devel/arm-none-eabi-gcc | =
arm-none-eabi-gcc-8.4.0_1 failed
>>=20
>> because of:
>>=20
>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<p=
hase: package        >=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> =3D=3D=3D>  Building package for arm-none-eabi-gcc-8.4.0_1
>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/arm-none-eabi-gcc/work/stage/usr/local/lib/gcc/ar=
m-none-eabi/8.4.0/plugin/gtype.state:No such file or directory
>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/arm-none-eabi-gcc/work/stage/usr/local/lib/gcc/ar=
m-none-eabi/8.4.0/plugin/include/ada/gcc-interface/ada-tree.def:No such =
file or directory
>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/arm-none-eabi-gcc/work/stage/usr/local/lib/gcc/ar=
m-none-eabi/8.4.0/plugin/include/addresses.h:No such file or directory
>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/arm-none-eabi-gcc/work/stage/usr/local/lib/gcc/ar=
m-none-eabi/8.4.0/plugin/include/alias.h:No such file or directory
>> pkg-static: Unable to access file =
/wrkdirs/usr/ports/devel/arm-none-eabi-gcc/work/stage/usr/local/lib/gcc/ar=
m-none-eabi/8.4.0/plugin/include/all-tree.def:No such file or directory
>> . . .
>>=20
>=20
> Some other differences between a poudriere based build
> and a portmaster based build for the aarch64 case follow.
> The paths with /mnt/prefixes are to the portmaster based
> build:
>=20
> # diff -r /wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/ =
/mnt/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/ | grep -i =
"enable_plugin"
> < enable_plugin =3D no
>> enable_plugin =3D yes
> < /* #undef ENABLE_PLUGIN */
>> #define ENABLE_PLUGIN 1
> < enable_plugin=3D'no'
>> enable_plugin=3D'yes'
>> #define ENABLE_PLUGIN 1
> < S["enable_plugin"]=3D"no"
>> S["enable_plugin"]=3D"yes"
>> D["ENABLE_PLUGIN"]=3D" 1"
>=20
> While looking for differences that might contribute to the
> "no"s above, I ran into something possibly unrelated but
> important in the future . . .
>=20
> One thing is that I have a WITHOUT_BINUTILS=3D system build as
> part of testing that such will work when if fully goes away.
> I see differences in part based on that:
>=20
> 1383c1382,1383
> < configure:8340: result: no
> ---
>> configure:8326: found /usr/local/bin/as
>> configure:8337: result: as
> 1407c1407,1408
> < configure:9740: result: no
> ---
>> configure:9726: found /usr/local/bin/objdump
>> configure:9737: result: objdump
> . . .
> 2369a2371
>> ac_cv_prog_AS=3Das
> 2377a2380
>> ac_cv_prog_OBJDUMP=3Dobjdump
>=20
> (No evidence so far that such contributes to lack of
> plugins being enabled. It is just a difference that
> I ran into while looking.)
>=20
> The devel/*-none-*-gcc examples do not cause
> /usr/local/bin/ instances of as or objdump to
> exist in poudriere-devel contexts, even when
> the system does not have the commands of itself.
> At some point this likely will need to change.
>=20
>=20
>=20
> As I have time I'll look around more at the build
> materials and see if I find an explanation for
> plugins not being enabled under poudriere-devel
> based builds.

Turns out that objdump is important and makes the
distinction in my context . . .

work/gcc-8.4.0/config/gcc-plugin.m4 has:

. . .
AC_DEFUN([GCC_ENABLE_PLUGINS],
  [# Check for plugin support
   AC_ARG_ENABLE(plugin,
   [AS_HELP_STRING([--enable-plugin], [enable plugin support])],
   enable_plugin=3D$enableval,
   enable_plugin=3Dyes; default_plugin=3Dyes)

   pluginlibs=3D
   plugin_check=3Dyes

   case "${host}" in
. . .
     *)
       if test x$build =3D x$host; then
         export_sym_check=3D"objdump${exeext} -T"
       elif test x$host =3D x$target; then
         export_sym_check=3D"$gcc_cv_objdump -T"
       else
         export_sym_check=3D
       fi
     ;;
   esac
. . .
   if test x"$enable_plugin" =3D x"yes" -a x"$plugin_check" =3D x"yes"; =
then

     AC_MSG_CHECKING([for exported symbols])
     if test "x$export_sym_check" !=3D x; then
       echo "int main() {return 0;} int foobar() {return 0;}" > =
conftest.c
       ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > =
/dev/null 2>&1
       if $export_sym_check conftest$ac_exeext | grep foobar > =
/dev/null; then
         : # No need to use a flag
         AC_MSG_RESULT([yes])
       else
         AC_MSG_RESULT([yes])
         AC_MSG_CHECKING([for -rdynamic])
         ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o =
conftest$ac_exeext > /dev/null 2>&1
         if $export_sym_check conftest$ac_exeext | grep foobar > =
/dev/null; then
           plugin_rdynamic=3Dyes
           pluginlibs=3D"-rdynamic"
         else
           plugin_rdynamic=3Dno
           enable_plugin=3Dno
         fi
         AC_MSG_RESULT([$plugin_rdynamic])
       fi
     else
       AC_MSG_RESULT([unable to check])
     fi
. . .

But (both the poudriere-devel based build and the portmaster
build show such so I picked to show just one):

=
/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/.build/gcc/config.log:g=
cc_cv_objdump=3D/usr/local/aarch64-none-elf/bin/objdump
=
/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/.build/gcc/config.log:g=
cc_cv_objdump=3D'/usr/local/aarch64-none-elf/bin/objdump'
=
/wrkdirs/usr/ports/devel/aarch64-none-elf-gcc/work/.build/gcc/config.cache=
:gcc_cv_objdump=3D${gcc_cv_objdump=3D/usr/local/aarch64-none-elf/bin/objdu=
mp}

Under poudiere-devel there is no /usr/local/aarch64-none-elf/bin/objdump =
path.
Under make/portmaster there may be an old =
/usr/local/aarch64-none-elf/bin/objdump path.

In my environments (showing one example context):

# ls -ldT /usr/local/aarch64-none-elf/bin/objdump
-r-xr-xr-x  2 root  wheel  8593272 Jan 30 01:05:50 2020 =
/usr/local/aarch64-none-elf/bin/objdump

So in portmaster (or make) the old =
/usr/local/aarch64-none-elf/bin/objdump
is used but in poudriere the path used fails and that failure is not
handled distinctly as "objdump tool missing".

It looks like devel/aarch64-none-elf-gcc/Makefile would need
changes for WITHOUT_BINUTILS=3D contexts in order to make sure
that an objdump exists via a known/used path, including in
poudriere based builds.

=3D=3D=3D
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1D414E35-6785-4D15-A798-DFB34C2ACC34>