A partial workaround for lang/gcc14 building on/for armv7, given STANDARD_BOOTSTRAP hitting some FreeBSD __aeabi_* symbol issues
Date: Sat, 26 Apr 2025 07:23:14 UTC
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