Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Jul 2020 21:02:02 -0700
From:      Mark Millard <marklmi@yahoo.com>
To:        Jan Beich <jbeich@FreeBSD.org>
Cc:        "pkubaj@freebsd.org" <pkubaj@FreeBSD.org>, FreeBSD ports <freebsd-ports@freebsd.org>
Subject:   Re: 32-bit powerpc graphics/mesa-dri build failure (poudriere based): "error: cannot redeclare builtin function" (e.g., __sync_add_and_fetch_8)
Message-ID:  <6C21ED1D-BDE8-4E28-A56E-76A670B66ED6@yahoo.com>
In-Reply-To: <C3EF3AFE-A9A0-4924-A83C-7D6812BCB3EE@yahoo.com>
References:  <E062392D-1207-48D4-B503-5EC2227D2D20.ref@yahoo.com> <E062392D-1207-48D4-B503-5EC2227D2D20@yahoo.com> <v9if-s1ax-wny@FreeBSD.org> <C3EF3AFE-A9A0-4924-A83C-7D6812BCB3EE@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2020-Jul-22, at 17:16, Mark Millard <marklmi at yahoo.com> wrote:

> On 2020-Jul-22, at 14:11, Jan Beich <jbeich at FreeBSD.org> wrote:
>=20
>> Mark Millard via freebsd-ppc <freebsd-ppc at freebsd.org> writes:
>>=20
>>> ../src/util/u_atomic.c:38:1: error: cannot redeclare builtin =
function '__sync_add_and_fetch_8'
>>> __sync_add_and_fetch_8(uint64_t *ptr, uint64_t val)
>>> ^
>>> ../src/util/u_atomic.c:38:1: note: '__sync_add_and_fetch_8' is a =
builtin with type 'long long (volatile long long *, long long, ...)'
>>> ../src/util/u_atomic.c:38:1: error: definition of builtin function =
'__sync_add_and_fetch_8'
>>> __sync_add_and_fetch_8(uint64_t *ptr, uint64_t val)
>>> ^
>>> ../src/util/u_atomic.c:51:1: error: cannot redeclare builtin =
function '__sync_sub_and_fetch_8'
>>> __sync_sub_and_fetch_8(uint64_t *ptr, uint64_t val)
>>> ^
>>> ../src/util/u_atomic.c:51:1: note: '__sync_sub_and_fetch_8' is a =
builtin with type 'long long (volatile long long *, long long, ...)'
>>> ../src/util/u_atomic.c:51:1: error: definition of builtin function =
'__sync_sub_and_fetch_8'
>>> __sync_sub_and_fetch_8(uint64_t *ptr, uint64_t val)
>>> ^
>>> ../src/util/u_atomic.c:64:1: error: cannot redeclare builtin =
function '__sync_val_compare_and_swap_8'
>>> __sync_val_compare_and_swap_8(uint64_t *ptr, uint64_t oldval, =
uint64_t newval)
>>> ^
>>> ../src/util/u_atomic.c:64:1: note: '__sync_val_compare_and_swap_8' =
is a builtin with type 'long long (volatile long long *, long long, long =
long, ...)'
>>> ../src/util/u_atomic.c:64:1: error: definition of builtin function =
'__sync_val_compare_and_swap_8'
>>> __sync_val_compare_and_swap_8(uint64_t *ptr, uint64_t oldval, =
uint64_t newval)
>>> ^
>>> 6 errors generated.
>>=20
>> Try replacing files/patch-i386 with =
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5464
>> On i386 (clang) one can sometimes avoid -latomic by bumping -march
>> (FreeBSD 11.4/12.2/13.0 defaults to i686) but powerpc (gcc) probably
>> can't use __sync* with 64-bit types without -latomic, making Meson
>> define MISSING_64BIT_ATOMICS to use src/util/u_atomic.c
>=20
> The context was head (so system-clang instead of
> gcc 4.2.1). But, looking in the logs, it seems to
> have used an odd mix of system-clang and devel/lvm80
> materials:
>=20
> . . .
> Project name: mesa
> Project version: 19.0.8
> Using 'CC' from environment with value: 'cc'
> Using 'CFLAGS' from environment with value: '-O2 -pipe  -g =
-fstack-protector-strong -fno-strict-aliasing '
> Using 'LDFLAGS' from environment with value: ' =
-Wl,-rpath=3D/usr/local/llvm80/lib -fstack-protector-strong '
> Using 'CPPFLAGS' from environment with value: ''
> Using 'CXX' from environment with value: 'c++'
> Using 'CXXFLAGS' from environment with value: '-O2 -pipe -g =
-fstack-protector-strong -fno-strict-aliasing  '
> Using 'LDFLAGS' from environment with value: ' =
-Wl,-rpath=3D/usr/local/llvm80/lib -fstack-protector-strong '
> Using 'CPPFLAGS' from environment with value: ''
> Using 'CC' from environment with value: 'cc'
> Using 'CFLAGS' from environment with value: '-O2 -pipe  -g =
-fstack-protector-strong -fno-strict-aliasing '
> Using 'LDFLAGS' from environment with value: ' =
-Wl,-rpath=3D/usr/local/llvm80/lib -fstack-protector-strong '
> Using 'CPPFLAGS' from environment with value: ''
> C compiler for the host machine: cc (clang 10.0.1 "FreeBSD clang =
version 10.0.1 (git@github.com:llvm/llvm-project.git =
llvmorg-10.0.1-rc2-0-g77d76b71d7d)")
> C linker for the host machine: cc ld.lld 10.0.1
> Using 'CXX' from environment with value: 'c++'
> Using 'CXXFLAGS' from environment with value: '-O2 -pipe -g =
-fstack-protector-strong -fno-strict-aliasing  '
> Using 'LDFLAGS' from environment with value: ' =
-Wl,-rpath=3D/usr/local/llvm80/lib -fstack-protector-strong '
> Using 'CPPFLAGS' from environment with value: ''
> C++ compiler for the host machine: c++ (clang 10.0.1 "FreeBSD clang =
version 10.0.1 (git@github.com:llvm/llvm-project.git =
llvmorg-10.0.1-rc2-0-g77d76b71d7d)")
> C++ linker for the host machine: c++ ld.lld 10.0.1
> Host machine cpu family: ppc
> Host machine cpu: powerpc
> . . .
> llvm-config found: YES (/usr/local/bin/llvm-config80) 8.0.1
> Run-time dependency LLVM (modules: amdgpu, asmparser, bitreader, =
bitwriter, engine, ipo, mcdisassembler, mcjit, native) found: YES 8.0.1
> . . .
> cc . . . -DHAVE_LLVM=3D0x0800 -DMESA_LLVM_VERSION_PATCH=3D1 . . . -c =
../src/util/u_atomic.c
> . . .
>=20
>=20
> The system-clang devel/llvm80 mix seems to be at
> least declaring __sync_add_and_fetch_8 ,
> __sync_sub_and_fetch_8 , and
> __sync_val_compare_and_swap_8 as builtin,
> possibly implicitly.
>=20
> At this point I'm unclear if:
>=20
> https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5464
>=20
> is relevant. The system-clang and devel/llvm80 mix
> just does not seem the right kind of thing to be
> doing in the build.
>=20

I'm not sure how analogous gecko is but I'll note
that /usr/ports/Mk/bsd.gecko.mk has the related
and additional logic:

BUILD_DEPENDS+=3D llvm${LLVM_DEFAULT}>0:devel/llvm${LLVM_DEFAULT} \
. . .

MOZ_EXPORT+=3D    ${CONFIGURE_ENV} \
                                LLVM_CONFIG=3Dllvm-config${LLVM_DEFAULT} =
\
. . .

. if ${CC} =3D=3D cc && ${CXX} =3D=3D c++ && exists(/usr/lib/libc++.so)
BUILD_DEPENDS+=3D =
${LOCALBASE}/bin/clang${LLVM_DEFAULT}:devel/llvm${LLVM_DEFAULT}
CPP=3D                    ${LOCALBASE}/bin/clang-cpp${LLVM_DEFAULT}
CC=3D                             ${LOCALBASE}/bin/clang${LLVM_DEFAULT}
CXX=3D                    ${LOCALBASE}/bin/clang++${LLVM_DEFAULT}
USES:=3D                  ${USES:Ncompiler\:*} # XXX avoid warnings
. endif

This last block of code appears to be forcing it to use
the matching devel/llvm* port's llvm/clang materials
under some conditions (instead of an odd mix with system
clang).


=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?6C21ED1D-BDE8-4E28-A56E-76A670B66ED6>