BSD.PORT.ARCH.MK(5)

πŸ“¦ in nixpkgs unstable

🌟 NAME 🌟

okay so bestie, meet bsd.port.arch.mk(5) from the File Formats Manual β€” the ports tree Makefile fragment that’s literally concerned with arch issues. ngl, the way that this tiny file handles arch-dependent build logic is lowkey iconic πŸ’… No cap, this is the arch-aware little glue for the ports tree, and yes it ate.

✨ SYNOPSIS ✨

Set it up such as:

# Set up such as
MULTI_PACKAGES = -main -special
ONLY_FOR_ARCHS-special = i386

.include <bsd.port.arch.mk>

#some more lines such as
.if ${BUILD_PACKAGES:M-special}
CONFIGURE_ARGS += --enable-special
.endif

.include <bsd.port.mk>

πŸ’– DESCRIPTION πŸ’–

bsd.port.arch.mk holds the logic used for arch-dependent builds in the ports tree. It is normally included as part of the larger bsd.port.mk(5), but it is also available separately for ports that require it. It’s giving β€œsmall file, big arch energy” ✨

Vibe check: it’s here for:

  • multi-packages ports that need to remove some subpackages based on pseudo-flavors or architecture constraints.
  • ports that need to make explicit tests on arch-dependent constants.

🌸 variables it assumes are already defined 🌸

bsd.port.arch.mk assumes the following variables are already defined:

  • MULTI_PACKAGES
  • FLAVOR
  • FLAVORS
  • PSEUDO_FLAVORS
  • NOT_FOR_ARCHS[-<sub>]
  • ONLY_FOR_ARCHS[-<sub>]

and optionally, if the default won’t be appropriate:

  • IGNORE[-<sub>]

πŸŽ€ variables it sets up for the rest of the Makefile πŸŽ€

It will set up the following variables for use in the rest of the Makefile:

  • ARCH
  • ALL_ARCHS
  • APM_ARCHS
  • BE_ARCHS
  • CLANG_ARCHS
  • COMPILER_VERSION
  • CX11_ARCHS
  • DEBUGINFO_ARCHS
  • GCC4_ARCHS
  • GCC49_ARCHS
  • GO_ARCHS
  • LE_ARCHS
  • LIBCXX
  • LLD_ARCHS
  • LLD_EMUL
  • LLVM_ARCHS
  • LP64_ARCHS
  • LUAJIT_ARCHS
  • MONO_ARCHS
  • OCAML_NATIVE_ARCHS
  • OCAML_NATIVE_DYNLINK_ARCHS
  • PROPERTIES
  • RUST_ARCHS
  • IGNORE-<sub>
  • BUILD_PACKAGES

Most importantly, BUILD_PACKAGES will be correctly set up, taking ONLY_FOR_ARCHS[-<sub>] and NOT_FOR_ARCHS[-<sub>] limitations into account, as well as pseudo-flavors. That’s the main character right there πŸ‘‘.

πŸ¦‹ the make(1) variable evaluation note πŸ¦‹

Note that thanks to the way make(1) variables are evaluated, a setup such as

ONLY_FOR_ARCHS-foo = ${LP64_ARCHS}
.include <bsd.port.arch.mk>

is perfectly admissible, since ONLY_FOR_ARCHS-foo will be used only after LP64_ARCHS is defined. iykyk πŸ’«

Also, you do not need to explicitly include bsd.port.arch.mk just to define

ONLY_FOR_ARCHS = ${LP64_ARCHS}

since bsd.port.mk does define arch constants before evaluating ONLY_FOR_ARCHS. A more detailed description of each variable is available in bsd.port.mk(5). fr fr.

🌈 where those constants also live 🌈

All the constant values ARCH, ALL_ARCHS, COMPILER_VERSION, GCC4_ARCHS, LP64_ARCHS and PROPERTIES are also available from MODULES and from ${.CURDIR}/../Makefile.inc. Literally convenient, bestie 🫢

πŸ‘€ SEE ALSO πŸ‘€

πŸ“œ HISTORY πŸ“œ

bsd.port.arch.mk was split from bsd.port.mk(5) in OpenBSD 5.1. Periodt.


πŸ’– cute sign-off: this page’s footer is giving Debian, dated October 24, 2025 β€” bye bestie, go build something iconic! πŸ’–

πŸ“¦ where this page comes from