Wednesday, August 03, 2022

[aarch64] broken neon handling in graphics/freeimage

graphics/freeimage bundles an old libpng whose pngpriv.h detects neon
support at compile time unless PNG_ARM_NEON_OPT is defined. Since
libpng's arm source directory is missing, this leads to missing external
references such as png_init_filter_functions_neon. This in turn leads
to these build failures:

http://build-failures.rhaalovely.net/aarch64/2022-08-01/emulators/emulationstation.log
http://build-failures.rhaalovely.net/aarch64/2022-08-01/x11/ogre.log

With the diff below these ports build and package. I am not set up to
test these or any other reverse dependencies of graphics/freeimage.

Index: Makefile
===================================================================
RCS file: /cvs/ports/graphics/freeimage/Makefile,v
retrieving revision 1.19
diff -u -p -r1.19 Makefile
--- Makefile 10 Jul 2022 12:27:10 -0000 1.19
+++ Makefile 3 Aug 2022 19:10:43 -0000
@@ -3,6 +3,7 @@ COMMENT= c++ library for common image f
DISTNAME= FreeImage3180
PKGNAME= freeimage-3.18.0
CATEGORIES= graphics
+REVISION= 0

SHARED_LIBS+= freeimage 3.0

@@ -28,6 +29,12 @@ MAKE_ENV= LIBfreeimage_VERSION=${LIBfre
MAKE_TARGET= Makefile.gnu

FIX_CRLF_FILES= Makefile.gnu TestAPI/Makefile
+
+# The bundled libpng ships without the source for neon support, so
+# disable it to avoid undefined symbols.
+.if ${MACHINE_ARCH} == "aarch64"
+CFLAGS += -DPNG_ARM_NEON_OPT=0
+.endif

do-test:
cd ${WRKSRC}/TestAPI && ${MAKE_PROGRAM} ${MAKE_ENV}

No comments:

Post a Comment