Re: NanoBSD: CURRENT unable to compile 13-STABLE : ld: error: args.o: Opaque pointers are only supported in -opaque-pointers mode (Producer: 'LLVM15.0.7' Reader: 'LLVM 14.0.5')

From: Mateusz Guzik <mjguzik_at_gmail.com>
Date: Thu, 30 Mar 2023 13:53:19 UTC
On 3/30/23, FreeBSD User <freebsd@walstatt-de.de> wrote:
> Hello folks,
>
> some strange misbehaviour in a NanoBSD compilation is driving me nuts.
> Recently I posted some
> error messages regarding
>
> [...]
> src/sys/dev/an/if_an_pci.c:143:1: error: a
> function definition without a prototype is deprecated in all versions of C
> and is not
> supported in C2x [-Werror,-Wdeprecated-non-prototype]
> [...]
>
> but being able compiling the kernel was "a lucky shot/mistake" and in the
> vain of discussion
> it has been revealed that my nanoBSD specific "make.conf/src.conf"
> configurations were wrong.
>
> So, again:
>
> The builder host is a recent CURRENT (FreeBSD 14.0-CURRENT #2
> main-n261876-f5a365e51fee: Thu
> Mar 30 11:23:19 CEST 2023 amd64), the target is a most recent 13-STABLE (git
> pull on a
> daily/hourly/most recentl basis when trying to build).
>
> As I understand the src/buildworld config, it seems crucial to have CURRENT
> and 13-STABLE
> somehow separated due to their divergende in used LLVM/CLANG (CURRENT has
> LLVM 15, 13-STABLE
> is with LLVM 14).
>
> Putting
>
> WITHOUT_SYSTEM_COMPILER=YES
> WITHOUT_SYSTEM_LINKER=YES
>
> into CONF_BUILD= AND CONF_WORLD= of NanoBSD configuration should prevent the
> usage of
> CURRENT's LLVM 15 and instead a cross compiling with 13-STABLE's LLVM 14
> compiler and linker
> should be used to buildworld.
>
> But this doesn't seem to happen (at least in my case), since buildworld
> fails to build with:
>
> [...]
> cc -target x86_64-unknown-freebsd13.2
> --sysroot=/pool/home/ohartmann/Projects/router/router/apu2c4/world/obj/amd64/ALERICH_13-STABLE_amd64/pool/home/ohartmann/Projects/router/router/apu2c4/src/amd64.amd64/tmp
> -B/pool/home/ohartmann/Projects/router/router/apu2c4/world/obj/amd64/ALERICH_13-STABLE_amd64/pool/home/ohartmann/Projects/router/router/apu2c4/src/amd64.amd64/tmp/usr/bin
> -O2 -pipe -fno-common -DMAINEXEC=bc -DNLSPATH=/usr/share/nls/%L/%N.cat
> -DBUILD_TYPE=A
> -DBC_DEFAULT_BANNER=0 -DBC_DEFAULT_PROMPT=0 -DBC_DEFAULT_SIGINT_RESET
> -DBC_DEFAULT_TTY_MODE
> -DBC_ENABLED -DBC_ENABLE_EDITLINE -DBC_ENABLE_EXTRA_MATH
> -DBC_ENABLE_LIBRARY=0
> -DBC_ENABLE_LONG_OPTIONS -DBC_ENABLE_HISTORY -DBC_ENABLE_PROMPT
> -DBC_ENABLE_RAND
> -DDC_DEFAULT_PROMPT=0 -DDC_DEFAULT_SIGINT_RESET -DDC_DEFAULT_TTY_MODE=0
> -DDC_ENABLED -DNDEBUG
> -I/pool/home/ohartmann/Projects/router/router/apu2c4/src/contrib/bc/include
> -DBC_ENABLE_NLS=1
> -flto -DNDEBUG -fPIE -mretpoline -ftrivial-auto-var-init=zero
> -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
> -std=gnu99
> -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Wall
> -Wno-format-y2k -W
> -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes
> -Wpointer-arith -Wreturn-type
> -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter
> -Wcast-align
> -Wchar-subscripts -Wnested-externs -Wold-style-definition -Wno-pointer-sign
> -Wmissing-variable-declarations -Wthread-safety -Wno-empty-body
> -Wno-string-plus-int
> -Wno-unused-const-variable -Wno-error=unused-but-set-variable
> -Qunused-arguments  -Wl,-zrelro
> -pie -Wl,-zretpolineplt   -o gh-bc args.o bc.o bc_lex.o bc_parse.o data.o
> dc.o dc_lex.o
> dc_parse.o file.o history.o lang.o lex.o main.o num.o opt.o parse.o
> program.o rand.o read.o
> vector.o vm.o bc_help.o dc_help.o lib.o lib2.o   -ledit ld: error: args.o:
> Opaque pointers are
> only supported in -opaque-pointers mode (Producer: 'LLVM15.0.7' Reader:
> 'LLVM 14.0.5') cc:
> error: linker command failed with exit code 1 (use -v to see invocation) ***
> [gh-bc] Error
> code 1
>
> make[5]: stopped in
> /pool/home/ohartmann/Projects/router/router/apu2c4/src/usr.bin/gh-bc
> [...]
>
>
> I'm now out of options here :-(
>

are you even using the dev/an driver?

you should probably just remove it from the kernel (and any other
driver of the sort)

ultimately you should be able to stick to the compiler from main. in
the worst case the commit to turn "function definition without a
prototype is deprecated" from errors to warnings could be merged to
stable/13 to facilitate the build

it may be you will be able to get away with modifying CFLAGS like so:
CFLAGS+=-Wno-deprecated-non-prototype

in src.conf and/or make.conf

-- 
Mateusz Guzik <mjguzik gmail.com>