Skip to contentSkip to conversation

qemu: allow to build statically

PATCH New Jérôme Pouiller 3 participants 7 messages Nov 9, 2016 – Apr 3, 2017

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 qemu: allow to build statically

Compiling Qemu statically allows to use it to chroot into target/. It is a nice feature, so add an option for it.

---
 package/qemu/Config.in.host | 26 ++++++++++++++++++++++++++
 package/qemu/qemu.mk        |  4 ++++
 2 files changed, 30 insertions(+)
package/qemu/Config.in.host +26 -0
index b3eb590..c61b787 100644
@@ -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
package/qemu/qemu.mk +4 -0
index cf23f16..d33106c 100644
@@ -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
Signature · 1 line
2.9.3
#1 lore raw

PATCH 1/1 qemu: allow to build statically

Hello,

Quoted 8 lines · J?r?me Pouiller

Compiling Qemu statically allows to use it to chroot into target/. It is a nice feature, so add an option for it.

---
 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

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH 1/1 qemu: allow to build statically

In reply to Jérôme Pouiller

Hello,

Quoted 8 lines · J?r?me Pouiller

Compiling Qemu statically allows to use it to chroot into target/. It is a nice feature, so add an option for it.

---
 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

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#3 lore raw

PATCH 1/1 qemu: allow to build statically

J?r?me, All,

On 2017-04-02 14:37 +0200, Thomas Petazzoni spake thusly:

Quoted 10 lines · J?r?me Pouiller
Quoted 8 lines

Compiling Qemu statically allows to use it to chroot into target/. It is a nice feature, so add an option for it.

---
 package/qemu/Config.in.host | 26 ++++++++++++++++++++++++++
 package/qemu/qemu.mk        |  4 ++++
 2 files changed, 30 insertions(+)
Quoted 7 lines

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.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#4 lore raw

PATCH 1/1 qemu: allow to build statically

Hello,

Quoted 7 lines · Yann E. MORIN

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

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
#5 lore raw

PATCH 1/1 qemu: allow to build statically

Thomas, All,

On 2017-04-02 23:42 +0200, Thomas Petazzoni spake thusly:

Quoted 7 lines

Hello,

Quoted 3 lines · Yann E. MORIN

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

Quoted 8 lines
Quoted 4 lines

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.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#6 lore raw

PATCH 1/1 qemu: allow to build statically

In reply to Thomas Petazzoni

Hello,

Quoted 10 lines · Thomas Petazzoni
Quoted 8 lines · J?r?me Pouiller

Compiling Qemu statically allows to use it to chroot into target/. It is a nice feature, so add an option for it.

---
 package/qemu/Config.in.host | 26 ++++++++++++++++++++++++++
 package/qemu/qemu.mk        |  4 ++++
 2 files changed, 30 insertions(+)  
Quoted 7 lines

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

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com