[Interest] Qt5 cross-compilation and installation, INSTALL_ROOT behavior

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Tue Jan 29 10:00:10 CET 2013


Hello,

No reaction at all?

Thanks,

Thomas

On Mon, 14 Jan 2013 22:14:51 +0100, Thomas Petazzoni wrote:
> Hello,
> 
> I am one of the core developers of the Buildroot embedded Linux build
> system, currently packaging Qt5. I have one issue, that I already had
> with Qt4, so I'd like to see if there a way to solve it.
> 
> Usually, to cross-compile autotools-based packages, one do:
> 
> 	./configure --prefix=/usr --host=arm-linux-gnueabi
> 	make
> 	make DESTDIR=/embedded/target install
> 	make DESTDIR=/embedded/staging install
> 
> You typically install things twice because in /embedded/target you want
> to have only the files useful for execution, completely stripped, while
> in /embedded/staging you want to keep all debugging symbols to help in
> debugging. /embedded/target goes in your target embedded system,
> while /embedded/staging is kept on your development machine, and is
> used to build more applications and to do remote debugging.
> 
> Within Qt5, this could be translated as:
> 
> 	./configure -prefix /usr -device <something>
> 	make
> 	make INSTALL_ROOT=/embedded/target install
> 	make INSTALL_ROOT=/embedded/staging install
> 
> But Qt5 has host utilities, not only tools for the target. And instead
> of having to build Qt twice, it nicely allows to do the build of host
> tools and target libraries in just one build, which is really nice. So,
> one typically does:
> 
> 	./configure -prefix /usr -hostprefix /embedded/host -device <something>
> 	make
> 	make INSTALL_ROOT=/embedded/target install
> 	make INSTALL_ROOT=/embedded/staging install
> 
> Unfortunately, the INSTALL_ROOT does not only impact target libraries,
> but also the host utilities. So they end up
> in /embedded/target/embedded/host which obviously isn't correct.
> 
> For the moment, I am solving this by doing:
> 
> 	./configure -prefix /usr -hostprefix /embedded/host -sysroot /embedded/staging -device <something>
> 	make
> 	make install
> 
> So, it properly installs target libraries in /embedded/staging and host
> utilities in /embedded/host. However, to install the libraries
> in /embedded/target I need to manually copy them, since I can't use the
> INSTALL_ROOT variable, or it would install things
> in /embedded/target/embedded/staging if I did
> INSTALL_ROOT=/embedded/target for example. Unfortunately, manually
> copying the libraries is annoying because you don't know exactly what
> each Qt5 module is installing in terms of libraries and plugins.
> 
> And once qmake is configured with the hardcoded sysroot, it also
> affects the installation of qt5svg, qt5script and all other Qt5
> modules, so we can't use INSTALL_ROOT for them as well.
> 
> Ideally, the host tools install should not be affected by INSTALL_ROOT.
> INSTALL_ROOT should only modify the installation location of target
> libraries, but host tools should be kept in the path given as the
> -hostprefix argument during configuration.
> 
> What do you think?
> 
> Thanks,
> 
> Thomas



-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com



More information about the Interest mailing list