Opened 21 months ago
#66894 assigned enhancement
pkgconfig @0.29.2: consider a better plan for cross-compiling
Reported by: | kencu (Ken) | Owned by: | ryandesign (Ryan Carsten Schmidt) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | |
Keywords: | Cc: | ||
Port: | pkgconfig |
Description
MacPorts supports cross-compiling, but pkgconfig files don't directly support cross-compiling well. At present there is no built-in capacity to branch on a host/target/arch to deliver up different flags for different builds.
At times, especially when cross-compiling across architectures, the muniversal PortGroup builds deliver up conflicting pkg-config *.pc files for each arch that are difficult to unify. Sometimes all that can be done is strip out all the more advanced features like SIMD enhancements that are best enabled.
see #66888 for one of no doubt many similar issues over the years.
One example of what other distributions have done is to generate pkgconfig subdirectories for each supported arch, and put the individual pkgconfig files in those subdirectories. There can be a common subdir as a final search path.
eg:
${prefix}/lib/pkgconfig/arm64/ ${prefix}/lib/pkgconfig/x86_64/ ${prefix}/lib/pkgconfig/
Then, during the build, the arm build looks first in ${prefix}/lib/pkgconfig/arm64/
and after that in ${prefix}/lib/pkgconfig/
. These search paths can be manipulated with environment variables, but they can also be set during the build of pkgconfig.
For example, pkgconfig +universal
could generate three binaries:
arm64-apple-darwin-pkg-config x86_64-apple-darwin-pkg-config pkg-config -> system_default_arch-pkg-config
and the arch-specific binary could be set to search it's own arch subdir first.
To use these, they can be set in the meson cross-files directly, or set up in the muniversal PG.
Another, older way to use pkg-config in this fashion is with a wrapper script, but it seems the arch-specific-named-pkg-config plan has taken over as the recommended way forward.
References:
https://autotools.info/pkgconfig/cross-compiling.html
https://www.freedesktop.org/wiki/Software/pkg-config/CrossCompileProposal/