Hi, > http://build-failures.rhaalovely.net/mips64/2021-01-12/devel/fmt.log (and the same in the current bulk for the other clang+ld.bfd arch, macppc)
As often '-Wl,--as-needed' causes undefined reference errors with ld.bfd. Surprisingly gcc archs are not impacted. target_link_libraries() takes precedence over our LDFLAGS, so i could not use them. Sadly cmake has not meson's 'b_asneeded' out of the box, so i've added an AS_NEEDED option, which is ON by default, bringing no change to clang+ld.lld archs, and turn it OFF on clang+ld.bfd archs. That also means no REVISION bump is needed (fmt has never been built on impacted archs). With the below diff i can build fmt and pass its tests on macppc [0]. mips64 seems to have further problems, i'm not 100% positive it would fix the build there. I would be happy to upstream this, but it seems they preferred an OS centric approach which doesn't play nice with our situation. Comments and feedback are welcome, Charlène. [0] https://bin.charlenew.xyz/fmt.log Index: Makefile =================================================================== RCS file: /cvs/ports/devel/fmt/Makefile,v retrieving revision 1.1.1.1 diff -u -p -u -p -r1.1.1.1 Makefile --- Makefile 2 Jan 2021 21:51:19 -0000 1.1.1.1 +++ Makefile 19 Jan 2021 14:59:19 -0000 @@ -23,4 +23,11 @@ WANTLIB+= ${COMPILER_LIBCXX} CONFIGURE_ARGS+= -DBUILD_SHARED_LIBS=on +# Fix undefined references to pthread_* symbols on clang+ld.bfd archs by +# disabling -Wl,--as-needed. +.include <bsd.port.arch.mk> +.if !${PROPERTIES:Mlld} && ${PROPERTIES:Mclang} +CONFIGURE_ARGS+= -DAS_NEEDED=off +.endif + .include <bsd.port.mk> Index: patches/patch-CMakeLists_txt =================================================================== RCS file: patches/patch-CMakeLists_txt diff -N patches/patch-CMakeLists_txt --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-CMakeLists_txt 19 Jan 2021 14:59:19 -0000 @@ -0,0 +1,26 @@ +$OpenBSD$ + +Allow linking without '-Wl,--as-needed', fix the build on clang+ld.bfd archs. +It's needed to do it like this since target_link_libraries takes preference +over LDFLAGS. + +Index: CMakeLists.txt +--- CMakeLists.txt.orig ++++ CMakeLists.txt +@@ -59,6 +59,7 @@ set_verbose(FMT_INC_DIR ${CMAKE_INSTALL_INCLUDEDIR} CA + option(FMT_PEDANTIC "Enable extra warnings and expensive tests." OFF) + option(FMT_WERROR "Halt the compilation with an error on compiler warnings." + OFF) ++option(AS_NEEDED "Use -Wl,--as-needed for linking." ON) + + # Options that control generation of various targets. + option(FMT_DOC "Generate the doc target." ${MASTER_PROJECT}) +@@ -233,7 +234,7 @@ endif () + + if (BUILD_SHARED_LIBS) + if (UNIX AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS" AND +- NOT EMSCRIPTEN) ++ NOT EMSCRIPTEN AND AS_NEEDED) + # Fix rpmlint warning: + # unused-direct-shlib-dependency /usr/lib/libformat.so.1.1.0 /lib/libm.so.6. + target_link_libraries(fmt -Wl,--as-needed)