*-unknown-netbsd

NetBSD multi-platform 4.4BSD-based UNIX-like operating system.

The target names follow this format: $ARCH-unknown-netbsd{-$SUFFIX}, where $ARCH specifies the target processor architecture and -$SUFFIX (optional) might indicate the ABI. The following targets are currently defined running NetBSD:

Target tier Target name NetBSD Platform
2 (with host tools) x86_64-unknown-netbsd amd64 / x86_64 systems
3 armv7-unknown-netbsd-eabihf 32-bit ARMv7 systems with hard-float
3 armv6-unknown-netbsd-eabihf 32-bit ARMv6 systems with hard-float
3 aarch64-unknown-netbsd 64-bit ARM systems, little-endian
3 aarch64_be-unknown-netbsd 64-bit ARM systems, big-endian
3 i586-unknown-netbsd 32-bit i386, restricted to Pentium
3 i686-unknown-netbsd 32-bit i386 with SSE
3 mipsel-unknown-netbsd 32-bit mips, requires mips32 cpu support
3 powerpc-unknown-netbsd Various 32-bit PowerPC systems, e.g. MacPPC
3 riscv64gc-unknown-netbsd 64-bit RISC-V
3 sparc64-unknown-netbsd Sun UltraSPARC systems

All use the "native" stdc++ library which goes along with the natively supplied GNU C++ compiler for the given OS version. Many of the bootstraps are built for NetBSD 9.x, although some exceptions exist (some are built for NetBSD 8.x but also work on newer OS versions).

Target Maintainers

@he32 @0323pin

Further contacts:

Fallback to pkgsrc-users@NetBSD.org, or fault reporting via NetBSD's bug reporting system.

Requirements

The x86_64-unknown-netbsd artifacts is being distributed by the rust project.

The other targets are built by the target maintainers (see above), and the targets are initially cross-compiled, but many if not most of them are also built natively as part of testing.

Building

The default build mode for the packages is a native build.

Cross-compilation

These targets can be cross-compiled, and we do that via the pkgsrc package(s).

Cross-compilation typically requires the "tools" and "dest" trees resulting from a normal cross-build of NetBSD itself, ref. our main build script, build.sh.

See e.g. do-cross.mk Makefile for the Makefile used to cross-build all the above NetBSD targets (except for the amd64 target).

The major option for the rust build is whether to build rust with the LLVM rust carries in its distribution, or use the LLVM package installed from pkgsrc. The PKG_OPTIONS.rust option is rust-internal-llvm, ref. the rust package's options.mk make fragment. It defaults to being set for a few of the above platforms, for various reasons (see comments), but is otherwise unset and therefore indicates use of the pkgsrc LLVM.

Testing

The Rust testsuite could presumably be run natively.

For the systems where the maintainer can build natively, the rust compiler itself is re-built natively. This involves the rust compiler being re-built with the newly self-built rust compiler, so exercises the result quite extensively.

Additionally, for some systems we build librsvg, and for the more capable systems we build and test firefox (amd64, i386, aarch64).

Building Rust programs

Rust ships pre-compiled artifacts for the x86_64-unknown-netbsd target.

For the other systems mentioned above, using the pkgsrc route is probably the easiest, possibly via the rust-bin package to save time, see the RUST_TYPE variable from the rust.mk Makefile fragment.

The pkgsrc rust package has a few files to assist with building pkgsrc packages written in rust, ref. the rust.mk and cargo.mk Makefile fragments in the lang/rust package.