*** Introduction ***

OpenWrt compiles U-Boot with some host tools like mkimage.


*** Problem ***

  HOSTLD  tools/mkimage
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: 
/home/rmilecki/openwrt/openwrt-master-bcm4908/staging_dir/host/lib/libssl.a(ssl_init.o):
 in function `OPENSSL_init_ssl':
ssl_init.c:(.text+0x59): undefined reference to `pthread_once'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: 
/home/rmilecki/openwrt/openwrt-master-bcm4908/staging_dir/host/lib/libcrypto.a(libcrypto_la-crypto_init.o):
 in function `OPENSSL_init_crypto':
crypto_init.c:(.text+0x51): undefined reference to `pthread_once'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: 
/home/rmilecki/openwrt/openwrt-master-bcm4908/staging_dir/host/lib/libcrypto.a(libcrypto_la-conf_sap.o):
 in function `OpenSSL_config':
conf_sap.c:(.text+0xbc): undefined reference to `pthread_once'

It seems that OpenWrt wants to compile mkimage with statically linked
LibreSSL.

LibreSSL seems to be compiled OK:
$ grep Libs staging_dir/host/lib/pkgconfig/libcrypto.pc
Libs: -L${libdir} -lcrypto
Libs.private: -lresolv -lpthread

Related:
9bfca308268e ("uboot-mvebu: Fix build with libressl 2.7.2")


*** Manual pkg-config test ***

I'm not sure if I test it correctly but output looks OK:

$ PATH=/home/rmilecki/openwrt/openwrt-master-bcm4908/staging_dir/host/bin:$PATH 
./staging_dir/host/bin/pkg-config --libs libssl libcrypto
-L/lib64 -lssl -lcrypto

$ PATH=/home/rmilecki/openwrt/openwrt-master-bcm4908/staging_dir/host/bin:$PATH 
./staging_dir/host/bin/pkg-config --static --libs libssl libcrypto
-L/lib64 -lssl -lresolv -lpthread -lcrypto -L/lib64 -lresolv -lpthread -lcrypto 
-lresolv -lpthread


*** U-Boot code ***

In tools/Makefile it uses:

HOSTLOADLIBES_mkimage += \
        $(shell pkg-config --libs libssl libcrypto 2> /dev/null || echo "-lssl 
-lcrypto")

Above works for most cases. Adding -pthread was rejected, see:
[U-Boot] [PATCH] Add -pthread to HOSTLOADLIBES_mkimage
https://patchwork.ozlabs.org/project/uboot/patch/[email protected]/

I guess OpenWrt is special case with static linking.

First of all I'm not sure if that pkg-config shouldn't use --static. I
have no idea how to tell U-Boot we want mkimage built static.

Secondly for some reason pkg-config doesn't seem to work from U-Boot
build context. After dropping "2> /dev/null" I can see:

Package libssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `libssl.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libssl', required by 'virtual:world', not found
Package 'libcrypto', required by 'virtual:world', not found
Package libssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `libssl.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libssl', required by 'virtual:world', not found
Package 'libcrypto', required by 'virtual:world', not found
Package libssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `libssl.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libssl', required by 'virtual:world', not found
Package 'libcrypto', required by 'virtual:world', not found

_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to