Hi;
I am dealing with / attempting to solve this issue:
The basic issue is, perl package build uses a bootstrap approach, where previously compiled modules are used in subsequent build steps. When target != host, perl compile fails due to required dynamic libraries being of wrong $ARCH.
I have mostly solved this by altering perl_build_dir/Makefile (as created by configure. Snippet:
d_dummy $(dynamic_ext): $(MINIPERL_EXE) lib/buildcustomize.pl preplibrary makeppport $(DYNALOADER) FORCE $(PERLEXPORT) $(LIBPERL)
$(MINIPERL) make_ext.pl -v $@ $(MAKE_EXT_ARGS) MAKE="$(MAKE)" LIBPERL_A=$(LIBPERL) LINKTYPE=dynamic
if [ $@ == lib/auto/File/Glob.so ]; then ls -la ext/File-Glob/; fi
for f in $(dynamic_ext); \
do \
if [ -f $$f ] && [ ! -L $$f ]; \
then \
echo file: $$f; \
ls -la $${f%/*}; \
mkdir -p aarch64/$${f%/*}; \
mv $$f aarch64/$$f; \
ln -sf /home/rossb/OpenWrt/CortexA53/trunk/openwrt/build_dir/hostpkg/perl/perl-5.28.1/$$f $$f; \
fi \
done
What I am doing is capturing all cross-compiled perl (aarch64) dynamic libraries to a parallel library directory and linking the library to the host/perl equivalent library so perl can use them for subsequent build steps. Later, during install step, the $ARCH correct libraries replace the host/perl equivalents.
This is mostly working except for the File/Glob module. My debug instrumentation yields this failure (and, the module is not built,although build completes:
LD_LIBRARY_PATH=/home/rossb/OpenWrt/CortexA53/trunk/openwrt/build_dir/target-aarch64_cortex-a53_glibc/perl/perl-5.28.1:/home/rossb/OpenWrt/CortexA53/trunk/openwrt/staging_dir/hostpkg/lib:/home/rossb/OpenWrt/CortexA53/trunk/openwrt/staging_dir/hostpkg/usr/lib:/home/rossb/OpenWrt/CortexA53/trunk/openwrt/staging_dir/host/lib ./miniperl -Ilib -I. make_ext.pl -v lib/auto/File/Glob.so MAKE="make" LIBPERL_A=libperl.so LINKTYPE=dynamic
Can't find extension File in any of cpan dist ext at make_ext.pl line 251.
if [ lib/auto/File/Glob.so == lib/auto/File/Glob.so ]; then ls -la ext/File-Glob/; fi
total 84
drwxr-xr-x 3 rossb rossb 4096 Nov 28 2018 .
drwxr-xr-x 43 rossb rossb 4096 Nov 28 2018 ..
-r--r--r-- 1 rossb rossb 1893 Mar 1 2018 Changes
-r--r--r-- 1 rossb rossb 13147 Nov 1 2018 Glob.pm
-r--r--r-- 1 rossb rossb 10440 Nov 1 2018 Glob.xs
-r--r--r-- 1 rossb rossb 1067 Mar 1 2018 Makefile.PL
-r--r--r-- 1 rossb rossb 882 Mar 1 2018 TODO
-r--r--r-- 1 rossb rossb 26989 Nov 1 2018 bsd_glob.c
-r--r--r-- 1 rossb rossb 3816 Mar 1 2018 bsd_glob.h
drwxr-xr-x 2 rossb rossb 4096 Nov 28 2018 t
The exact error is:
Can't find extension File in any of cpan dist ext at make_ext.pl line 251
resulting in File:Glob not being built
I am unsure (no clue) how to specify the missing extension file.
I can provide perl/Makefile, files and patches if anyone wants to test drive.
Suggestions?
Thanks;
Bill