* [Buildroot] perl XS modules
@ 2016-07-08 7:59 Arne Caspari
2016-07-08 15:40 ` Thomas Petazzoni
0 siblings, 1 reply; 11+ messages in thread
From: Arne Caspari @ 2016-07-08 7:59 UTC (permalink / raw)
To: buildroot
Hi all,
I try to build the libxml-parser-perl package for an ARM target.
Unfortunately the compiled perl module fails to load with the following
error message:
loadable library and perl binaries are mismatched
After some digging I found that the module needs to be compiled with
the same toolchain and compiler defines as the perl binary in order to
be ABI compatible. Forcing the defines to be exactly the same as the
ones used for the perl binary did not fix the issue so I believe it
must be a problem with the toolchain.
I get it right, buildroot builds the host-perl package with the GCC
installed on the build system. In my case this is GCC Version 6.1 while
the toolchain in buildroot uses 4.9.3. If I get the build procedure
right, the ABI for perl is then configured for the 6.1 toolchain while
module builds will use the toolchain provided by buildroot which is ABI
incompatible.
Is there a way to make buildroot build an initial toolchain to build
the host packages with? Did anybody ever successfully build perlXS
modules?
Thanks,
/Arne
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] perl XS modules
2016-07-08 7:59 [Buildroot] perl XS modules Arne Caspari
@ 2016-07-08 15:40 ` Thomas Petazzoni
2016-07-12 8:00 ` François Perrad
0 siblings, 1 reply; 11+ messages in thread
From: Thomas Petazzoni @ 2016-07-08 15:40 UTC (permalink / raw)
To: buildroot
Hello,
Fran?ois, could you have a look at the below question, that is Perl and
cross-compilation related?
Thanks!
Thomas
On Fri, 8 Jul 2016 09:59:10 +0200, Arne Caspari wrote:
> Hi all,
>
> I try to build the libxml-parser-perl package for an ARM target.
> Unfortunately the compiled perl module fails to load with the following
> error message:
>
> loadable library and perl binaries are mismatched
>
> After some digging I found that the module needs to be compiled with
> the same toolchain and compiler defines as the perl binary in order to
> be ABI compatible. Forcing the defines to be exactly the same as the
> ones used for the perl binary did not fix the issue so I believe it
> must be a problem with the toolchain.
>
> I get it right, buildroot builds the host-perl package with the GCC
> installed on the build system. In my case this is GCC Version 6.1 while
> the toolchain in buildroot uses 4.9.3. If I get the build procedure
> right, the ABI for perl is then configured for the 6.1 toolchain while
> module builds will use the toolchain provided by buildroot which is ABI
> incompatible.
>
> Is there a way to make buildroot build an initial toolchain to build
> the host packages with? Did anybody ever successfully build perlXS
> modules?
>
> Thanks,
>
> /Arne
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] perl XS modules
2016-07-08 15:40 ` Thomas Petazzoni
@ 2016-07-12 8:00 ` François Perrad
2016-07-12 8:09 ` Thomas Petazzoni
2016-07-12 8:15 ` Arne Caspari
0 siblings, 2 replies; 11+ messages in thread
From: François Perrad @ 2016-07-12 8:00 UTC (permalink / raw)
To: buildroot
The BR package libxml-parser-perl is a very specific host package which
works only with the the system perl.
(The reason is : this packge is heavy used, and we don't want the cost|time
of the host-perl build)
All Perl modules (XS or Pure Perl) use the naming scheme :
perl-module-name.
For example, the wrapper for libxml2 is perl-xml-libxml.
All these packages use the BR infrastructure perl-package.
If you want a target package perl-xml-parser (XML expat wrapper), start by
running:
$ support/script/scancpan XML-Parser
which creates a decent template.
After add manually, the specific part required by the expat C library.
(And obviously, read
https://buildroot.org/downloads/manual/manual.html#_infrastructure_for_perl_cpan_packages
)
Fran?ois
2016-07-08 17:40 GMT+02:00 Thomas Petazzoni <
thomas.petazzoni@free-electrons.com>:
> Hello,
>
> Fran?ois, could you have a look at the below question, that is Perl and
> cross-compilation related?
>
> Thanks!
>
> Thomas
>
> On Fri, 8 Jul 2016 09:59:10 +0200, Arne Caspari wrote:
> > Hi all,
> >
> > I try to build the libxml-parser-perl package for an ARM target.
> > Unfortunately the compiled perl module fails to load with the following
> > error message:
> >
> > loadable library and perl binaries are mismatched
> >
> > After some digging I found that the module needs to be compiled with
> > the same toolchain and compiler defines as the perl binary in order to
> > be ABI compatible. Forcing the defines to be exactly the same as the
> > ones used for the perl binary did not fix the issue so I believe it
> > must be a problem with the toolchain.
> >
> > I get it right, buildroot builds the host-perl package with the GCC
> > installed on the build system. In my case this is GCC Version 6.1 while
> > the toolchain in buildroot uses 4.9.3. If I get the build procedure
> > right, the ABI for perl is then configured for the 6.1 toolchain while
> > module builds will use the toolchain provided by buildroot which is ABI
> > incompatible.
> >
> > Is there a way to make buildroot build an initial toolchain to build
> > the host packages with? Did anybody ever successfully build perlXS
> > modules?
> >
> > Thanks,
> >
> > /Arne
> > _______________________________________________
> > buildroot mailing list
> > buildroot at busybox.net
> > http://lists.busybox.net/mailman/listinfo/buildroot
>
>
>
> --
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20160712/c5cd40bc/attachment.html>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] perl XS modules
2016-07-12 8:00 ` François Perrad
@ 2016-07-12 8:09 ` Thomas Petazzoni
2016-07-12 8:15 ` Arne Caspari
1 sibling, 0 replies; 11+ messages in thread
From: Thomas Petazzoni @ 2016-07-12 8:09 UTC (permalink / raw)
To: buildroot
Hello,
On Tue, 12 Jul 2016 10:00:41 +0200, Fran?ois Perrad wrote:
> The BR package libxml-parser-perl is a very specific host package which
> works only with the the system perl.
> (The reason is : this packge is heavy used, and we don't want the cost|time
> of the host-perl build)
The question from Arne was not about the host variant of
libxml-parser-perl, but about he target variant.
> All Perl modules (XS or Pure Perl) use the naming scheme :
> perl-module-name.
> For example, the wrapper for libxml2 is perl-xml-libxml.
> All these packages use the BR infrastructure perl-package.
Right, but Arne seems to indicate that when you build a *target* Perl
modules with cross-compiled C code (i.e not a pure Perl module), there
is an ABI compatibility issue, because the host perl and the target
perl don't use the same ABI.
Arne: can you give a specific Buildroot configuration and commands to
test that exhibit the problem?
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] perl XS modules
2016-07-12 8:00 ` François Perrad
2016-07-12 8:09 ` Thomas Petazzoni
@ 2016-07-12 8:15 ` Arne Caspari
2016-07-12 8:56 ` Thomas Petazzoni
1 sibling, 1 reply; 11+ messages in thread
From: Arne Caspari @ 2016-07-12 8:15 UTC (permalink / raw)
To: buildroot
Fran?ois,
Thank you very much for coming back to me. It is highly appreciated.
I did not know about the scancpan-Script - this would have saved me a
ton of work, literally since I just ported a package with very very
many module dependencies (the Logitech Media Server) to buildroot. Ah
well...
I finally found the issue with the perl XS packages though: The perl
MakeMaker module fails to generate a correct Makefile but instead
messes up the configuration with the host-perl one. I kind of fixed the
issue for me in a very hackish way by modifying the generated Makefile
with the following script:
define PERL_XML_PARSER_BUILD_CMDS
sed "s~/usr/bin/gcc~$(TARGET_CC) -Os~" -i $(@D)/Makefile
sed "s~/usr/bin/gcc~$(TARGET_CC) -Os~" -i $(@D)/Expat/Makefile
sed "s~x86_64~$(KERNEL_ARCH)~" -i $(@D)/Expat/Makefile
sed "s~host/usr/lib~staging/usr/lib~" -i $(@D)/Expat/Makefile
$(MAKE) $(@D)/Makefile -C $(@D)
endef
The module loads correctly afterwards. Unfortunately I do not have any
experience with perl or the MakeMaker module to come up with a less
insane fix.
/Arne
Am Tue, 12 Jul 2016 10:00:41 +0200
schrieb Fran?ois Perrad <fperrad@gmail.com>:
> The BR package libxml-parser-perl is a very specific host package
> which works only with the the system perl.
> (The reason is : this packge is heavy used, and we don't want the
> cost|time of the host-perl build)
>
> All Perl modules (XS or Pure Perl) use the naming scheme :
> perl-module-name.
> For example, the wrapper for libxml2 is perl-xml-libxml.
> All these packages use the BR infrastructure perl-package.
>
> If you want a target package perl-xml-parser (XML expat wrapper),
> start by running:
> $ support/script/scancpan XML-Parser
> which creates a decent template.
> After add manually, the specific part required by the expat C library.
> (And obviously, read
> https://buildroot.org/downloads/manual/manual.html#_infrastructure_for_perl_cpan_packages
> )
>
> Fran?ois
>
> 2016-07-08 17:40 GMT+02:00 Thomas Petazzoni <
> thomas.petazzoni at free-electrons.com>:
>
> > Hello,
> >
> > Fran?ois, could you have a look at the below question, that is Perl
> > and cross-compilation related?
> >
> > Thanks!
> >
> > Thomas
> >
> > On Fri, 8 Jul 2016 09:59:10 +0200, Arne Caspari wrote:
> > > Hi all,
> > >
> > > I try to build the libxml-parser-perl package for an ARM target.
> > > Unfortunately the compiled perl module fails to load with the
> > > following error message:
> > >
> > > loadable library and perl binaries are mismatched
> > >
> > > After some digging I found that the module needs to be compiled
> > > with the same toolchain and compiler defines as the perl binary
> > > in order to be ABI compatible. Forcing the defines to be exactly
> > > the same as the ones used for the perl binary did not fix the
> > > issue so I believe it must be a problem with the toolchain.
> > >
> > > I get it right, buildroot builds the host-perl package with the
> > > GCC installed on the build system. In my case this is GCC Version
> > > 6.1 while the toolchain in buildroot uses 4.9.3. If I get the
> > > build procedure right, the ABI for perl is then configured for
> > > the 6.1 toolchain while module builds will use the toolchain
> > > provided by buildroot which is ABI incompatible.
> > >
> > > Is there a way to make buildroot build an initial toolchain to
> > > build the host packages with? Did anybody ever successfully build
> > > perlXS modules?
> > >
> > > Thanks,
> > >
> > > /Arne
> > > _______________________________________________
> > > buildroot mailing list
> > > buildroot at busybox.net
> > > http://lists.busybox.net/mailman/listinfo/buildroot
> >
> >
> >
> > --
> > Thomas Petazzoni, CTO, Free Electrons
> > Embedded Linux, Kernel and Android engineering
> > http://free-electrons.com
> >
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] perl XS modules
2016-07-12 8:15 ` Arne Caspari
@ 2016-07-12 8:56 ` Thomas Petazzoni
2016-07-12 9:04 ` Arne Caspari
0 siblings, 1 reply; 11+ messages in thread
From: Thomas Petazzoni @ 2016-07-12 8:56 UTC (permalink / raw)
To: buildroot
Hello,
On Tue, 12 Jul 2016 10:15:54 +0200, Arne Caspari wrote:
> Thank you very much for coming back to me. It is highly appreciated.
>
> I did not know about the scancpan-Script - this would have saved me a
> ton of work, literally since I just ported a package with very very
> many module dependencies (the Logitech Media Server) to buildroot. Ah
> well...
The scancpan script is mentioned in the Buildroot manual:
"""
So, this file and the Config.in can be generated by running the script
supports/scripts/scancpan Foo-Bar in the Buildroot directory (or in
the BR2_EXTERNAL directory). This script creates a Config.in file and
foo-bar.mk file for the requested package, and also recursively for
all dependencies specified by CPAN. You should still manually edit the
result. In particular, the following things should be checked.
"""
> I finally found the issue with the perl XS packages though: The perl
> MakeMaker module fails to generate a correct Makefile but instead
> messes up the configuration with the host-perl one. I kind of fixed the
> issue for me in a very hackish way by modifying the generated Makefile
> with the following script:
>
> define PERL_XML_PARSER_BUILD_CMDS
> sed "s~/usr/bin/gcc~$(TARGET_CC) -Os~" -i $(@D)/Makefile
> sed "s~/usr/bin/gcc~$(TARGET_CC) -Os~" -i $(@D)/Expat/Makefile
> sed "s~x86_64~$(KERNEL_ARCH)~" -i $(@D)/Expat/Makefile
> sed "s~host/usr/lib~staging/usr/lib~" -i $(@D)/Expat/Makefile
> $(MAKE) $(@D)/Makefile -C $(@D)
> endef
>
> The module loads correctly afterwards. Unfortunately I do not have any
> experience with perl or the MakeMaker module to come up with a less
> insane fix.
Again, could you give a Buildroot configuration, and a test scenario
that allows us to reproduce the issue ?
Thanks,
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] perl XS modules
2016-07-12 8:56 ` Thomas Petazzoni
@ 2016-07-12 9:04 ` Arne Caspari
2016-07-12 9:43 ` François Perrad
0 siblings, 1 reply; 11+ messages in thread
From: Arne Caspari @ 2016-07-12 9:04 UTC (permalink / raw)
To: buildroot
Am Tue, 12 Jul 2016 10:56:24 +0200
schrieb Thomas Petazzoni <thomas.petazzoni@free-electrons.com>:
>
> Again, could you give a Buildroot configuration, and a test scenario
> that allows us to reproduce the issue ?
>
Thomas,
for me the following steps reproduce the issue:
support/scripts/scancpan XML-Parser
[Enable the perl-xml-parser module in the config]
make
Then on the target:
perl -e "require XML::Parser"
The buildroot configuration should not matter as long as the target has
a different architecture (eg: ARM ). If it is the same architecture as
the host, it could produce binary compatible modules by accident.
You could even verify the presence of this issue by just compiling the
perl-xml-parser module (any architecture): If you look at the build
output, you will see that the Makefile uses the configuration and
destination paths of the host perl.
/Arne
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] perl XS modules
2016-07-12 9:04 ` Arne Caspari
@ 2016-07-12 9:43 ` François Perrad
2016-07-12 10:16 ` Thomas Petazzoni
0 siblings, 1 reply; 11+ messages in thread
From: François Perrad @ 2016-07-12 9:43 UTC (permalink / raw)
To: buildroot
Arne,
Could you try to build a package like perl-gd or perl-net-ssleay, in order
to verify your infrastructure ?
These packages are known to build on autobuild.buildroot.net .
Fran?ois
2016-07-12 11:04 GMT+02:00 Arne Caspari <arne.caspari@gmail.com>:
> Am Tue, 12 Jul 2016 10:56:24 +0200
> schrieb Thomas Petazzoni <thomas.petazzoni@free-electrons.com>:
> >
> > Again, could you give a Buildroot configuration, and a test scenario
> > that allows us to reproduce the issue ?
> >
>
> Thomas,
>
> for me the following steps reproduce the issue:
>
> support/scripts/scancpan XML-Parser
> [Enable the perl-xml-parser module in the config]
> make
>
> Then on the target:
>
> perl -e "require XML::Parser"
>
>
> The buildroot configuration should not matter as long as the target has
> a different architecture (eg: ARM ). If it is the same architecture as
> the host, it could produce binary compatible modules by accident.
>
> You could even verify the presence of this issue by just compiling the
> perl-xml-parser module (any architecture): If you look at the build
> output, you will see that the Makefile uses the configuration and
> destination paths of the host perl.
>
> /Arne
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20160712/ed41024a/attachment.html>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] perl XS modules
2016-07-12 9:43 ` François Perrad
@ 2016-07-12 10:16 ` Thomas Petazzoni
2016-07-12 11:05 ` François Perrad
0 siblings, 1 reply; 11+ messages in thread
From: Thomas Petazzoni @ 2016-07-12 10:16 UTC (permalink / raw)
To: buildroot
Hello,
On Tue, 12 Jul 2016 11:43:49 +0200, Fran?ois Perrad wrote:
> Could you try to build a package like perl-gd or perl-net-ssleay, in order
> to verify your infrastructure ?
> These packages are known to build on autobuild.buildroot.net .
Arne is not complaining about build problems, but about runtime
problems. Runtime problems are not detected by autobuild.buildroot.net.
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] perl XS modules
2016-07-12 10:16 ` Thomas Petazzoni
@ 2016-07-12 11:05 ` François Perrad
2016-07-12 11:08 ` Thomas Petazzoni
0 siblings, 1 reply; 11+ messages in thread
From: François Perrad @ 2016-07-12 11:05 UTC (permalink / raw)
To: buildroot
2016-07-12 12:16 GMT+02:00 Thomas Petazzoni <
thomas.petazzoni@free-electrons.com>:
> Hello,
>
> On Tue, 12 Jul 2016 11:43:49 +0200, Fran?ois Perrad wrote:
>
> > Could you try to build a package like perl-gd or perl-net-ssleay, in
> order
> > to verify your infrastructure ?
> > These packages are known to build on autobuild.buildroot.net .
>
> Arne is not complaining about build problems, but about runtime
> problems. Runtime problems are not detected by autobuild.buildroot.net.
>
>
After building, it's easy to test them:
# perl -MGD -e 1
...
Fran?ois
> Thomas
> --
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20160712/dfc21e80/attachment.html>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] perl XS modules
2016-07-12 11:05 ` François Perrad
@ 2016-07-12 11:08 ` Thomas Petazzoni
0 siblings, 0 replies; 11+ messages in thread
From: Thomas Petazzoni @ 2016-07-12 11:08 UTC (permalink / raw)
To: buildroot
Hello,
On Tue, 12 Jul 2016 13:05:52 +0200, Fran?ois Perrad wrote:
> > Arne is not complaining about build problems, but about runtime
> > problems. Runtime problems are not detected by autobuild.buildroot.net.
> >
> After building, it's easy to test them:
> # perl -MGD -e 1
> ...
This involves booting the generated system on a target platform (or
Qemu), which is not currently supported by autobuild.b.o.
I did start an effort to add runtime tests for Buildroot, see
https://github.com/tpetazzoni/buildroot-runtime-test, but there's still
a lot of work that remains to be done.
Best regards,
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2016-07-12 11:08 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-08 7:59 [Buildroot] perl XS modules Arne Caspari
2016-07-08 15:40 ` Thomas Petazzoni
2016-07-12 8:00 ` François Perrad
2016-07-12 8:09 ` Thomas Petazzoni
2016-07-12 8:15 ` Arne Caspari
2016-07-12 8:56 ` Thomas Petazzoni
2016-07-12 9:04 ` Arne Caspari
2016-07-12 9:43 ` François Perrad
2016-07-12 10:16 ` Thomas Petazzoni
2016-07-12 11:05 ` François Perrad
2016-07-12 11:08 ` Thomas Petazzoni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox