A partial workaround for lang/gcc14 building on/for armv7, given STANDARD_BOOTSTRAP hitting some FreeBSD __aeabi_* symbol issues

Mark Millard <[email protected]>
Newsgroups gmane.os.freebsd.devel.toolchain,gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
FreeBSD has not and does not support all the __aeabi_ prefixed
symbols to make everything work for all the lang/gcc* .

It has gotten to the point that for lang/gcc14 (so modern) that
the likes of:

__aeabi_unwind_cpp_pr0
__aeabi_unwind_cpp_pr1
__aeabi_unwind_cpp_pr2

lead to the likes of:

/usr/local/bin/ld: a.out: hidden symbol `__aeabi_unwind_cpp_pr0' in /wrkdirs/usr/ports/lang/gcc14/work/.build/./prev-gcc/libgcc_eh.a(unwind-arm.o) is referenced by DSO

when attempting a build of lang/gcc14 for:

OPTIONS_DEFAULT_armv7= STANDARD_BOOTSTRAP

# find /wrkdirs/ -name config.log -exec grep -q __aeabi_unwind_cpp_pr0 {} \; -print | more
/wrkdirs/usr/ports/lang/gcc14/work/.build/libdecnumber/config.log
/wrkdirs/usr/ports/lang/gcc14/work/.build/libbacktrace/config.log
/wrkdirs/usr/ports/lang/gcc14/work/.build/libiberty/config.log
/wrkdirs/usr/ports/lang/gcc14/work/.build/lto-plugin/config.log

Note: The poudriere log file ends up instead reporting the likes of:

checking for library containing strerror... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.

So: Giving no clue about the specifics.

Going in the direction of instead having:

#OPTIONS_DEFAULT_armv7= STANDARD_BOOTSTRAP

so that gcc is not used at all, the "jit" in:

LANGUAGES:=     c,c++,objc,fortran,jit

prevents having the system clang/clang++ do all
the build: after the early stages, gcc/g++
depends on library coding conventions specific
to gcc/g++ and clang/clang++ based builds do
not follow those conventions in libc++ or such.
(Poisoned names are detected and stop the build.)

As I do not need jit, I do the following in
order to have lang/gcc14 build on/for armv7
(and, presumably could for armv6 as well) :

# git -C /usr/ports/ diff lang/gcc14/ | cat
diff --git a/lang/gcc14/Makefile b/lang/gcc14/Makefile
index 74c59905c48d..7f082e68ecfe 100644
--- a/lang/gcc14/Makefile
+++ b/lang/gcc14/Makefile
@@ -39,8 +39,8 @@ CXXFLAGS:=	${CXXFLAGS:N-mretpoline}
 
 OPTIONS_DEFINE=		GRAPHITE
 OPTIONS_DEFAULT_aarch64=STANDARD_BOOTSTRAP
-OPTIONS_DEFAULT_armv6=	STANDARD_BOOTSTRAP
-OPTIONS_DEFAULT_armv7=	STANDARD_BOOTSTRAP
+#OPTIONS_DEFAULT_armv6=	STANDARD_BOOTSTRAP
+#OPTIONS_DEFAULT_armv7=	STANDARD_BOOTSTRAP
 OPTIONS_DEFAULT_amd64=	STANDARD_BOOTSTRAP
 OPTIONS_DEFAULT_i386=	STANDARD_BOOTSTRAP
 OPTIONS_DEFAULT_powerpc=	STANDARD_BOOTSTRAP
@@ -80,7 +80,11 @@ CONFIGURE_TARGET=	x86_64-portbld-${OPSYS:tl}${OSREL}
 CONFIGURE_ARGS+=	--with-abi=elfv2
 .endif
 
+.if ${ARCH} == armv7 || ${ARCH} == armv6
+LANGUAGES:=	c,c++,objc,fortran
+.else
 LANGUAGES:=	c,c++,objc,fortran,jit
+.endif
 TARGLIB=	${PREFIX}/lib/gcc${SUFFIX}
 TARGLIB32=	${PREFIX}/lib32	# The version information is added later
 LIBEXEC=	${PREFIX}/libexec/gcc${SUFFIX}


(I do not show my disabling of install-strip use,
which is done for other reasons.)

At least for now that allows me to have lang/gcc14
other than for the jit language that I do not use.
But gcc14 or g++14 is not involved in producing
that gcc14 and g++14 .


===
Mark Millard
marklmi at yahoo.com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.