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

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

Thread Previous | Thread Next
François Perrad
February 1, 2014 13:50
Re: [perl #114798] Configure: add support of qemu
Message ID:
2014-01-31 Brian Fraser <>:
> On Sun, Sep 9, 2012 at 3:51 AM, Francois PERRAD <>
> 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: >
> 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
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


> 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 "\$@"
> 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]
> [1]

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About