diff mbox

qemu: allow to build statically

Message ID 20161109100305.6261-1-jezz@sysmic.org
State Accepted
Headers show

Commit Message

Jérôme Pouiller Nov. 9, 2016, 10:03 a.m. UTC
Compiling Qemu statically allows to use it to chroot into target/. It is a
nice feature, so add an option for it.

Signed-off-by: Jérôme Pouiller <jezz@sysmic.org>
---
 package/qemu/Config.in.host | 26 ++++++++++++++++++++++++++
 package/qemu/qemu.mk        |  4 ++++
 2 files changed, 30 insertions(+)

Comments

Thomas Petazzoni April 1, 2017, 2:09 p.m. UTC | #1
Hello,

On Wed,  9 Nov 2016 11:03:05 +0100, Jérôme Pouiller wrote:
> Compiling Qemu statically allows to use it to chroot into target/. It is a
> nice feature, so add an option for it.
> 
> Signed-off-by: Jérôme Pouiller <jezz@sysmic.org>
> ---
>  package/qemu/Config.in.host | 26 ++++++++++++++++++++++++++
>  package/qemu/qemu.mk        |  4 ++++
>  2 files changed, 30 insertions(+)

Applied to master after tweaking a bit the Config.in help text. Thanks!

Thomas
Thomas Petazzoni April 2, 2017, 12:37 p.m. UTC | #2
Hello,

On Wed,  9 Nov 2016 11:03:05 +0100, Jérôme Pouiller wrote:
> Compiling Qemu statically allows to use it to chroot into target/. It is a
> nice feature, so add an option for it.
> 
> Signed-off-by: Jérôme Pouiller <jezz@sysmic.org>
> ---
>  package/qemu/Config.in.host | 26 ++++++++++++++++++++++++++
>  package/qemu/qemu.mk        |  4 ++++
>  2 files changed, 30 insertions(+)

Now that this patch is committed, we are seeing some build failures on
host-qemu when linked statically:

  http://autobuild.buildroot.net/results/6bc/6bcfabc020fede51adcfafc9a570df5884d95696/build-end.log
  http://autobuild.buildroot.net/results/4d0/4d0182da77cf386e57acf0565a18fc4628abbdc8/build-end.log

Could you have a look?

Thanks!

Thomas
Yann E. MORIN April 2, 2017, 9:14 p.m. UTC | #3
Jérôme, All,

On 2017-04-02 14:37 +0200, Thomas Petazzoni spake thusly:
> On Wed,  9 Nov 2016 11:03:05 +0100, Jérôme Pouiller wrote:
> > Compiling Qemu statically allows to use it to chroot into target/. It is a
> > nice feature, so add an option for it.
> > 
> > Signed-off-by: Jérôme Pouiller <jezz@sysmic.org>
> > ---
> >  package/qemu/Config.in.host | 26 ++++++++++++++++++++++++++
> >  package/qemu/qemu.mk        |  4 ++++
> >  2 files changed, 30 insertions(+)
> 
> Now that this patch is committed, we are seeing some build failures on
> host-qemu when linked statically:
> 
>   http://autobuild.buildroot.net/results/6bc/6bcfabc020fede51adcfafc9a570df5884d95696/build-end.log
>   http://autobuild.buildroot.net/results/4d0/4d0182da77cf386e57acf0565a18fc4628abbdc8/build-end.log
> 
> Could you have a look?

Feel free to grab patches from my okd series (which I lost intetrest in
sometime ago):

    https://git.buildroot.org/~ymorin/git/buildroot/log/?h=yem/target-qemu

At the time, I had full and complete static-link support with a lot of
additional dependencies...

Regards,
Yann E. MORIN.
Thomas Petazzoni April 2, 2017, 9:42 p.m. UTC | #4
Hello,

On Sun, 2 Apr 2017 23:14:29 +0200, Yann E. MORIN wrote:

> Feel free to grab patches from my okd series (which I lost intetrest in
> sometime ago):
> 
>     https://git.buildroot.org/~ymorin/git/buildroot/log/?h=yem/target-qemu
> 
> At the time, I had full and complete static-link support with a lot of
> additional dependencies...

Thanks for pointing out those patches. However, to be honest, I myself
have no interest in having host qemu built statically, so if Jérôme
doesn't send patches to fix the breakage, I'll simply revert his patch.

Best regards,

Thomas
Yann E. MORIN April 2, 2017, 9:48 p.m. UTC | #5
Thomas, All,

On 2017-04-02 23:42 +0200, Thomas Petazzoni spake thusly:
> Hello,
> 
> On Sun, 2 Apr 2017 23:14:29 +0200, Yann E. MORIN wrote:
> 
> > Feel free to grab patches from my okd series (which I lost intetrest in
> > sometime ago):
> > 
> >     https://git.buildroot.org/~ymorin/git/buildroot/log/?h=yem/target-qemu
> > 
> > At the time, I had full and complete static-link support with a lot of
> > additional dependencies...
> 
> Thanks for pointing out those patches. However, to be honest, I myself
> have no interest in having host qemu built statically, so if Jérôme
> doesn't send patches to fix the breakage, I'll simply revert his patch.

Yes, my message was mostly aimed at Jérôme. ;-)

Regards,
Yann E. MORIN.
Thomas Petazzoni April 3, 2017, 8:52 p.m. UTC | #6
Hello,

On Sun, 2 Apr 2017 14:37:17 +0200, Thomas Petazzoni wrote:

> On Wed,  9 Nov 2016 11:03:05 +0100, Jérôme Pouiller wrote:
> > Compiling Qemu statically allows to use it to chroot into target/. It is a
> > nice feature, so add an option for it.
> > 
> > Signed-off-by: Jérôme Pouiller <jezz@sysmic.org>
> > ---
> >  package/qemu/Config.in.host | 26 ++++++++++++++++++++++++++
> >  package/qemu/qemu.mk        |  4 ++++
> >  2 files changed, 30 insertions(+)  
> 
> Now that this patch is committed, we are seeing some build failures on
> host-qemu when linked statically:
> 
>   http://autobuild.buildroot.net/results/6bc/6bcfabc020fede51adcfafc9a570df5884d95696/build-end.log
>   http://autobuild.buildroot.net/results/4d0/4d0182da77cf386e57acf0565a18fc4628abbdc8/build-end.log
> 
> Could you have a look?

FWIW, I've reverted this patch. It's a feature that already wasn't seen
as very essential, and it's causing some build failures.

I don't think it's really easy to provide a functionality that allows
to build a host executable as a static binary, because most host
systems use glibc, and glibc doesn't officially support static linking.

Feel free to investigate those build failures (see the commit log for
the three different build failures) and send an updated version that
makes sure those build failures are fixed.

Thanks!

Thomas
diff mbox

Patch

diff --git a/package/qemu/Config.in.host b/package/qemu/Config.in.host
index b3eb590..c61b787 100644
--- a/package/qemu/Config.in.host
+++ b/package/qemu/Config.in.host
@@ -17,6 +17,32 @@  config BR2_PACKAGE_HOST_QEMU
 
 if BR2_PACKAGE_HOST_QEMU
 
+config BR2_PACKAGE_HOST_QEMU_STATIC
+	bool "Build statically"
+	help
+	  Build static qemu executable(s). Use this option if you want to
+	  'chroot' in your target directory. An example to do this for an ARM
+	  target:
+
+	     1. copy qemu binary on your target directory:
+
+	          cp host/usr/bin/qemu-arm target/usr/bin
+
+	     2. Make sure binfmt_misc is mounted on /proc/sys/fs/binfmt_misc:
+
+	          mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
+
+	     3. Register /usr/bin/qemu-arm is interpreter for arm binaries. See
+	        linux/Documentation/binfmt_misc.txt for more information:
+
+	          MAGIC='\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00'
+	          MASK='\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff'
+	          echo ":qemu-arm:M:0:$MAGIC:$MASK:/usr/bin/qemu-arm:OC" > /proc/sys/fs/binfmt_misc/register
+
+	     4. Chroot to your target:
+
+	          chroot target /bin/sh
+
 comment "Emulators selection"
 
 config BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE
diff --git a/package/qemu/qemu.mk b/package/qemu/qemu.mk
index cf23f16..d33106c 100644
--- a/package/qemu/qemu.mk
+++ b/package/qemu/qemu.mk
@@ -110,6 +110,10 @@  HOST_QEMU_OPTS += --enable-vde
 HOST_QEMU_DEPENDENCIES += host-vde2
 endif
 
+ifeq ($(BR2_PACKAGE_HOST_QEMU_STATIC),y)
+HOST_QEMU_OPTS += --static
+endif
+
 # Override CPP, as it expects to be able to call it like it'd
 # call the compiler.
 define HOST_QEMU_CONFIGURE_CMDS