a1abd9761c
For a long time, when cross-building, say from native=amd64 to target=powerpc, it was necessary to: 1. cross-build a _powerpc_ package called cross-libtool-base-powerpc, and then 2. install the powerpc package _natively_ with `pkg_add -m x86_64' to override the architecture check that normally forbids this kind of shenanigans, in order to cross-build anything that uses libtool as a tool. This is partly because libtool doesn't follow the normal GNU convention of `./configure --build=<native platform> --host=<platform package will run on> --target=<platform package is configured to operate on>' -- in this example, build=amd64, host=amd64, target=powerpc. Instead, libtool expects to be cross-built itself, even if it's going to run as a tool. It's not as bonkers as it sounds at first: libtool is just a shell script, and it caches various information about the (cross-building!) toolchain it is built with so it can use that information later when it is run as a tool itself to cross-compile other software. To make this work, we need to create the toolchain wrappers for libtool _as if_ we were cross-building even if we are building a native package. So mk/tools uses a new flag TOOLS_USE_CROSS_COMPILE instead of USE_CROSS_COMPILE, and libtool internally sets MACHINE_ARCH=${TARGET_ARCH} (in the example above, powerpc) to make it look like we're cross-building. The new TOOLS_CROSS_DESTDIR is an alias for the (defaulted) CROSS_DESTDIR, which must now be set unconditionally in mk.conf in order for libtool to know where the cross-destdir will be; _CROSS_DESTDIR remains empty when building any native packages (including the native cross-libtool package). Finally, we need to make the resulting package be a native package, with MACHINE_ARCH set to the one that it will be installed on (in the example above, amd64), so I added an indirection _BUILD_DEFS.${var} to replace var on its own in the build definitions that get baked into the package, shown by `pkg_info -B'. Setting _BUILD_DEFS.MACHINE_ARCH=${NATIVE_MACHINE_ARCH} ensures that this mutant hybrid cross-built libtool still produces a native package. All of this logic is gated on setting USE_CROSS_COMPILE in mk.conf or LIBTOOL_CROSS_COMPILE in the package makefile, so it should be safe for non-cross-builds -- when USE_CROSS_COMPILE=no and you're not building cross-libtool, everything is as before. |
||
---|---|---|
.. | ||
build | ||
buildlink3 | ||
check | ||
checksum | ||
cmake-Modules/Platform | ||
compiler | ||
configure | ||
defaults | ||
depends | ||
emulator | ||
extract | ||
features | ||
fetch | ||
gnu-config | ||
haskell | ||
help | ||
init | ||
install | ||
misc | ||
package | ||
patch | ||
pbulk | ||
pkgformat | ||
pkginstall | ||
pkgtasks | ||
platform | ||
plist | ||
repro | ||
scripts | ||
tools | ||
wrapper | ||
alternatives.mk | ||
apache.mk | ||
apache.module.mk | ||
atomic64.mk | ||
bdb.buildlink3.mk | ||
blas.buildlink3.mk | ||
bsd.fast.prefs.mk | ||
bsd.hacks.mk | ||
bsd.makevars.mk | ||
bsd.options.mk | ||
bsd.pkg.barrier.mk | ||
bsd.pkg.clean.mk | ||
bsd.pkg.debug.mk | ||
bsd.pkg.error.mk | ||
bsd.pkg.mk | ||
bsd.pkg.readme.mk | ||
bsd.pkg.subdir.mk | ||
bsd.pkg.update.mk | ||
bsd.pkg.use.mk | ||
bsd.prefs.mk | ||
bsd.utils.mk | ||
compiler.mk | ||
curses.buildlink3.mk | ||
curses.builtin.mk | ||
cwrappers.mk | ||
db1.builtin.mk | ||
djbware.mk | ||
dlopen.buildlink3.mk | ||
dlopen.builtin.mk | ||
endian.mk | ||
fam.buildlink3.mk | ||
fonts.mk | ||
fuse.buildlink3.mk | ||
haskell.mk | ||
java-env.mk | ||
java-vm.mk | ||
jpeg.buildlink3.mk | ||
krb5.buildlink3.mk | ||
Kyuafile | ||
libusb.buildlink3.mk | ||
license.mk | ||
linux-pam.builtin.mk | ||
love.mk | ||
motif.buildlink3.mk | ||
mpi.buildlink3.mk | ||
mysql.buildlink3.mk | ||
ocaml.mk | ||
omf-scrollkeeper.mk | ||
oss.buildlink3.mk | ||
oss.builtin.mk | ||
pam.buildlink3.mk | ||
pax.mk | ||
pf.buildlink3.mk | ||
pgsql.buildlink3.mk | ||
pkg-build-options.mk | ||
pthread.buildlink3.mk | ||
pthread.builtin.mk | ||
readline.buildlink3.mk | ||
readline.builtin.mk | ||
resolv.buildlink3.mk | ||
smf.mk | ||
solaris-pam.builtin.mk | ||
subst.mk | ||
termcap.buildlink3.mk | ||
termcap.builtin.mk | ||
terminfo.buildlink3.mk | ||
terminfo.builtin.mk | ||
unprivileged.mk | ||
x11.buildlink3.mk | ||
x11.builtin.mk | ||
x11.version.mk | ||
xaw.buildlink3.mk |