Message ID | Zq9j8m3YPt0Xh0gY@waldemar-brodkorb.de |
---|---|
State | New |
Headers | show |
Series | package/nginx: fix sparc compile | expand |
On Sun, 4 Aug 2024 13:20:18 +0200 Waldemar Brodkorb <wbx@openadk.org> wrote: > When libatomic_ops are enabled the shared library is using symbols > from libatomic. > > In output/build/nginx-1.24.0/objs/autoconf.err > You get: > checking for atomic_ops library > > /home/wbx/buildroot/output/host/lib/gcc/sparc-buildroot-linux-uclibc/13.3.0/../../../../sparc-buildroot-linux-uclibc/bin/ld: > /tmp/ccx4rHjO.o: in function `main': > autotest.c:(.text.startup+0x30): undefined reference to > `__atomic_fetch_add_4' > collect2: error: ld returned 1 exit status > > Fixes: > - http://autobuild.buildroot.net/results/5de/5de45530bbc615b1c44cc73a0ae7bf4cff5f1a56/ Do you have a minimal reproducer for this issue? > NGINX_CONF_ENV += ngx_force_have_libatomic=yes > ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y) > NGINX_CFLAGS += "-DAO_NO_SPARC_V9" > +NGINX_LDFLAGS += -latomic > endif Basically, I am wondering if this is the correct condition to put this. Other architecture than SPARC may need to link against libatomic. So perhaps it should instead be: ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) NGINX_LDFLAGS += -latomic endif but as I am not 100% sure, I wanted to first reproduce the issue. Thomas
Hi Thomas, Thomas Petazzoni wrote, > On Sun, 4 Aug 2024 13:20:18 +0200 > Waldemar Brodkorb <wbx@openadk.org> wrote: > > > When libatomic_ops are enabled the shared library is using symbols > > from libatomic. > > > > In output/build/nginx-1.24.0/objs/autoconf.err > > You get: > > checking for atomic_ops library > > > > /home/wbx/buildroot/output/host/lib/gcc/sparc-buildroot-linux-uclibc/13.3.0/../../../../sparc-buildroot-linux-uclibc/bin/ld: > > /tmp/ccx4rHjO.o: in function `main': > > autotest.c:(.text.startup+0x30): undefined reference to > > `__atomic_fetch_add_4' > > collect2: error: ld returned 1 exit status > > > > Fixes: > > - http://autobuild.buildroot.net/results/5de/5de45530bbc615b1c44cc73a0ae7bf4cff5f1a56/ > > Do you have a minimal reproducer for this issue? > > > NGINX_CONF_ENV += ngx_force_have_libatomic=yes > > ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y) > > NGINX_CFLAGS += "-DAO_NO_SPARC_V9" > > +NGINX_LDFLAGS += -latomic > > endif > > Basically, I am wondering if this is the correct condition to put this. > Other architecture than SPARC may need to link against libatomic. So > perhaps it should instead be: > > ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) > NGINX_LDFLAGS += -latomic > endif > > but as I am not 100% sure, I wanted to first reproduce the issue. The minimal reproducer is: BR2_sparc=y BR2_PACKAGE_NGINX=y For sparc only libatomic_ops is selected via package/nginx/Config.in. So I think the build issue is unique to sparcv8/leon. best regards Waldemar
On Mon, 5 Aug 2024 09:24:49 +0200 Waldemar Brodkorb <wbx@openadk.org> wrote: > The minimal reproducer is: > BR2_sparc=y > BR2_PACKAGE_NGINX=y Weird, I didn't reproduce it with the Bootlin SPARC toolchain. > For sparc only libatomic_ops is selected via > package/nginx/Config.in. So I think the build issue is unique to > sparcv8/leon. Correct, but in the .mk file we have: ifeq ($(BR2_PACKAGE_LIBATOMIC_OPS),y) NGINX_DEPENDENCIES += libatomic_ops NGINX_CONF_OPTS += --with-libatomic NGINX_CONF_ENV += ngx_force_have_libatomic=yes ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y) NGINX_CFLAGS += "-DAO_NO_SPARC_V9" endif else NGINX_CONF_ENV += ngx_force_have_libatomic=no endif and BR2_PACKAGE_LIBATOMIC_OPS can very well be enabled on non-SPARC architectures. Yes nginx only forces BR2_PACKAGE_LIBATOMIC_OPS on Sparc, but nothing prevents another package (or even the user) to enable BR2_PACKAGE_LIBATOMIC_OPS on non-Sparc architectures. Thomas
diff --git a/package/nginx/nginx.mk b/package/nginx/nginx.mk index 7bd2173b48..c462c1f265 100644 --- a/package/nginx/nginx.mk +++ b/package/nginx/nginx.mk @@ -75,6 +75,7 @@ NGINX_CONF_OPTS += --with-libatomic NGINX_CONF_ENV += ngx_force_have_libatomic=yes ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y) NGINX_CFLAGS += "-DAO_NO_SPARC_V9" +NGINX_LDFLAGS += -latomic endif else NGINX_CONF_ENV += ngx_force_have_libatomic=no @@ -300,7 +301,8 @@ define NGINX_CONFIGURE_CMDS cd $(@D) ; $(NGINX_CONF_ENV) \ PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \ ./configure $(NGINX_CONF_OPTS) \ - --with-cc-opt="$(TARGET_CFLAGS) $(NGINX_CFLAGS)" + --with-cc-opt="$(TARGET_CFLAGS) $(NGINX_CFLAGS)" \ + --with-ld-opt="$(NGINX_LDFLAGS)" endef define NGINX_BUILD_CMDS
When libatomic_ops are enabled the shared library is using symbols from libatomic. In output/build/nginx-1.24.0/objs/autoconf.err You get: checking for atomic_ops library /home/wbx/buildroot/output/host/lib/gcc/sparc-buildroot-linux-uclibc/13.3.0/../../../../sparc-buildroot-linux-uclibc/bin/ld: /tmp/ccx4rHjO.o: in function `main': autotest.c:(.text.startup+0x30): undefined reference to `__atomic_fetch_add_4' collect2: error: ld returned 1 exit status Fixes: - http://autobuild.buildroot.net/results/5de/5de45530bbc615b1c44cc73a0ae7bf4cff5f1a56/ Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> --- package/nginx/nginx.mk | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)