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. |
||
---|---|---|
.. | ||
aarch64-none-elf-binutils | ||
aarch64-none-elf-gcc | ||
arm-none-eabi-binutils | ||
arm-none-eabi-gcc | ||
arm-none-eabi-gdb | ||
asm6809 | ||
atasm | ||
avr-binutils | ||
avr-gcc | ||
avr-gdb | ||
avr-libc | ||
avrdude | ||
bfd-crunchide | ||
bfd-mdsetimage | ||
binutils-mips-current | ||
bossa | ||
cc65 | ||
cross-binutils | ||
cross-libtool-base | ||
dasm | ||
dfu-programmer | ||
freemint-binutils | ||
freemint-cflib | ||
freemint-gcc | ||
freemint-gemlib | ||
freemint-ldg | ||
freemint-mintbin | ||
freemint-mintlib | ||
freemint-pml | ||
gcc-mips-current | ||
GenFw | ||
h8300-elf-binutils | ||
h8300-elf-gcc | ||
icdprog | ||
mingw | ||
mingw-binutils | ||
mingw-gcc | ||
mingw-runtime-bin | ||
mingw-w32api-bin | ||
mingw-w64 | ||
mingw-w64-i686-binutils | ||
mingw-w64-i686-crt | ||
mingw-w64-i686-gcc | ||
mingw-w64-i686-gcc-bootstrap | ||
mingw-w64-i686-gcc-winpthreads | ||
mingw-w64-i686-headers | ||
mingw-w64-i686-winpthreads | ||
mingw-w64-x86_64-binutils | ||
mingw-w64-x86_64-crt | ||
mingw-w64-x86_64-gcc | ||
mingw-w64-x86_64-gcc-bootstrap | ||
mingw-w64-x86_64-gcc-winpthreads | ||
mingw-w64-x86_64-headers | ||
mingw-w64-x86_64-winpthreads | ||
mipsel-none-elf-binutils | ||
mipsel-none-elf-gcc | ||
nios2 | ||
nios2-binutils | ||
nios2-gcc | ||
objconv | ||
or1k-none-elf-binutils | ||
or1k-none-elf-gcc | ||
pdp11-aout-binutils | ||
pdp11-aout-gcc | ||
powerpc-none-elf-binutils | ||
powerpc-none-elf-gcc | ||
ppc-morphos-binutils | ||
ppc-morphos-gcc-9 | ||
ppc-morphos-gcc-10 | ||
ppc-morphos-sdk | ||
stlink | ||
uisp | ||
xtensa-esp32-elf-binutils | ||
xtensa-esp32-elf-gcc | ||
xtensa-lx106-elf-binutils | ||
xtensa-lx106-elf-gcc | ||
Makefile |