pkg-config vs. Cross Compile and Multi-arch
One of the areas where
can cause some problems is when trying to cross compile some code, or
when working with multi-arch systems (such as bi-arch AMD64 Linux
distros). While it is possible to use
pkg-config in such systems by
can't just follow the instructions given for the single-arch case.
After some discussion with Wolfgang Wieser, we came up with a proposal for better supporting cross-compile and multi-arch uses. The main changes would be:
- Add a new
pkg-config. This would allow
pkg-configto use different default search paths based on the host type, and search for
.pcfiles in host type specific subdirs on the search path.
- If an unknown host type is given, then no default search path is disabled altogether.
- The autoconf macro would pass this argument whenever it detected
For the common case, this should allow most packages to be built for the
non default architecture on a bi-arch system, or cross compiled, by just
configure and (you might still need to set
$CFLAGS, depending on the compiler setup).
For packages that install
.pc files, they should continue to work.
However it will be worth updating them to install their
.pc file into
a host type specific sub directory (the autoconf macros will make this
easy to do).
If this code is likely to affect you, send comments to the
mailing list (or leave comments here).
Ian Campbell -
I like the look of what you are doing, but thought you might be interested in how we have solved this problem for cross compiling.
We have a cross tool chain (e.g. arm-linux-gcc) which is installed into prefix /opt/arcom/. We then build pkg-config with --libdir=/opt/arcom/arm-linux/lib --program-prefix=arm-linux-
Now when we cross compile libraries we put their .pc into the arm-linux pkgconfig directory and when we build something using pkg-config we pass in $PKGCONFIG (or whatever it is called) as arm-linux-pkgconfig -- which has nice symmetry with overriding $CC etc. If --host=arm-linux would cause configure to search for arm-linux-pkgconfig automatically like it does with gcc then that would be even cooler.
This scheme probably doesn't help at all with bi-arch though.
James Henstridge -
Ian: with these changes, you should be able to use the system's default pkg-config binary. It will just skip the system configured search paths, and only look in the directories you set in $PKG_CONFIG_PATH (which is the instructions most packages give you if installed packages can't be found).
Having multiple pkg-config binaries would be another option, but the only difference between them would be about 3 strings inside the binaries, which seems a bit wasteful. It also removes the need to recompile pkg-config when you want to target a new host type.