Help Compiling armv6 Ports from x64

Sean Bruno sbruno at
Thu Dec 25 01:17:01 UTC 2014

Hash: SHA512

On 12/24/14 16:34, Jeremy Brown wrote:
> I have a VM running FreeBSD 10.1 x64 that I'm trying to use to
> create an image that will run on a Raspberry Pi. I've managed to
> get the base system working, but I can't figure out how to compile
> ports for the image. I know my cross-compilation toolchain is
> working, as I can build the kernel and world without issue.
> For sake of example, say my arm root is at /tmp/rootfs, my
> toolchain is at /usr/armv6-freebsd/usr/bin and some other assorted
> cross-compilation items are at /usr/obj/armv6-freebsd.
> Some of the commands I have tried to build a port are:
> PATH=/path/to/toolchain:${PATH} make TARGET=arm TARGET_ARCH=armv6
> install (this typically fails during compilation)
> PATH=/path/to/toolchain:${PATH} make TARGET=arm TARGET_ARCH=armv6
> configure install (this typically fails during configuration, the
> error I get is something along the lines of "cannot read C-compiled
> file"; in addition the configure script never notices that I am
> trying to cross-compile)
> PATH=/path/to/toolchain:${PATH} make
> CONFIGURE_ARGS="--host=armv6-freebsd" configure install (this
> typically fails during compilation for varying reasons, but at
> least it'll recognize that I'm cross-compiling; including TARGET
> and TARGET_ARCH makes no difference)
> make TARGET=arm TARGET_ARCH=armv6 DESTDIR=/tmp/rootfs install
> (this was what I originally tried, when the chroot kicked in it
> would try to run the ARM version of /bin/sh; as the VM is x64 this
> would always give an exec format error before failing)
> make TARGET=arm TARGET_ARCH=armv6 DESTDIR=/tmp/rootfs CHROOTED=no
> install (this would seem to work, but would install the port to the
> VM instead of the filesystem for the image, and in addition would
> be compiled x64 instead of armv6)
> There are others, but these are the ones I can remember the best
> right now. I understand there won't be any precompiled ports, and I
> don't want to have to build my desired ports on the Pi itself
> (despite the fact that doing so would be agonizingly slow, the
> space required to store the ports tree and compile what I need
> would explode the size of the image from ~400MB to
>> 2GB).
> I've tried many different websites (see here
> <>, here 
> <>
, here
> <>
, here <>, here
> <>),
but none of their methods have resulted in a successful compilation.
> Do you know of a method to compile armv6 ports on an x64 machine,
> or can you direct me to someone who might?
> -Jeremy

At this point, poudriere can build packages by default.

If you want armv6 packages for RPi or BBB, get poudriere 3.1 on your
system with qemu-bsd-user.

Setup this arcane binmiscctl(8) command:
/usr/sbin/binmiscctl add armv6 --interpreter "/usr/local/bin/qemu-arm" \
- --magic
- --mask
- --size 20 --set-enabled

That is the command that will redirect execution of armv6 binaries to

Build an armv6 jail with:

poudriere jail -c -j armv6 -m svn -v head -a arm.armv6 -x

And build your ports with poudriere via:
poudriere bulk -j amrv6 <listofports>

You can fetch packages from the freebsd cluster arm builder if you
wish as well:


Version: GnuPG v2


More information about the freebsd-embedded mailing list