develooper Front page | perl.perl5.porters | Postings from February 2014

Re: [perl #114798] Configure: add support of qemu

Thread Previous | Thread Next
From:
=?ISO-8859-1?Q?Fran=E7ois_Perrad?=
Date:
February 1, 2014 13:50
Subject:
Re: [perl #114798] Configure: add support of qemu
Message ID:
CAB0FRsv0BZYPfa4MVCL_5f4t8veUC7JhtQzbU8+tL2wUwg9nXQ@mail.gmail.com
2014-01-31 Brian Fraser <fraserbn@gmail.com>:
> On Sun, Sep 9, 2012 at 3:51 AM, Francois PERRAD <perlbug-followup@perl.org>
> wrote:
>>
>> # New Ticket Created by  Francois PERRAD
>> # Please include the string:  [perl #114798]
>> # in the subject line of all future correspondence about this issue.
>> # <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=114798 >
>>
>>
>
> Jumpstarting this ticket. Francois recently chimed in on another thread &
> updated the patch[0], so I applied it locally and gave it a try.
> With some tweaking I was able to build a perl on my amd64 Linux box that
> runs on a raspberry pi without needing to access the target system in any
> way; additionally, with some manual hacks 'make test' for that perl managed
> to run in its entirely, *locally*, which is huge. So I think that there's
> quite a bit of worth in pursuing this.

The use of Qemu has some limitations :
1) Qemu is not available for all CPU architecture
2) qemu-i386 is buggy, I filled this ticket
https://bugs.launchpad.net/qemu/+bug/1076445
with a minimal test case which doesn't depend on Perl configure/build.

For testing purpose, I copy the whole build tree on the target
(Buildroot linux), and run
     $ cd t
     $ ln -s ../perl perl
     $ ./perl harness

Fran├žois

>
> That being said, I had a couple of problems along the way. First, for me the
> current $run dies with 'FATAL: kernel too old'. Some googling lead me to
> discover that I could pass qemu the kernel version with the -r switch, ala
> qemu-arm -r 3.11, and that solved the problem, so to the very least, a way
> of passing options to qemu is needed. Additionally, $run needs to be able to
> handle -cwd and -env, so locally it looks like this for me:
>
>          cat >$run <<EOF
> #!/bin/sh
> env=''
> case "\$1" in
> -cwd)
>   shift
>   cwd=\$1
>   shift
>   ;;
> esac
> case "\$1" in
> -env)
>   shift
>   env=\$1
>   shift
>   ;;
> esac
> case "\$cwd" in
> '') ;;
> *) cd \$cwd ;;
> esac
> \$env $targetrun $qemuoptions -L $sysroot "\$@"
> EOF
>
> With $qemuoptions being something like "-r 3.11".
>
> Moving on, I too am unsure about the `basename ...` line. The intent seems
> to be that $run end up as run-qemu-arm when Configure is called with either
> -Dtargetrun=/foo/bar/qemu-arm or -Dtargetrun='qemu-arm -r 3.11'. The latter
> seems like the wrong way to go about it; for the former, we currently assume
> that whatever targetrun is, it'll be in PATH; if we're going to start
> accepting fulls paths to binaries in targetrun, the other options should be
> fixed as well.
>
> For 'make test', I had to basically replace ./perl with a script that called
> ./original-perl through $run, but I also had to make it load a compat module
> that removed 'original-' from $^X. Which is just nasty.
>
> Unrelated to this patch but in a similar vein, yesterday I pushed a branch
> that allows cross-compiling from Linux to Win32, either through ssh or
> wine[1]. The wine bits are unsurprisingly pretty similar to this.
>
> [0]
> https://github.com/fperrad/br/blob/perl-castaway/package/perl/perl-configure-qemu.patch
> [1]
> http://perl5.git.perl.org/perl.git/shortlog/refs/heads/hugmeir/cross-compile-win32

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About