From a51a52d832bb42841c7e7037f538bfc89cfcc914 Mon Sep 17 00:00:00 2001 From: Artemis Tosini Date: Fri, 27 Feb 2026 12:54:04 -0500 Subject: [PATCH] freebsd.iwlwifi-firmware: init --- .../freebsd/pkgs/iwlwifi-firmware/package.nix | 55 +++++++++++++++++++ .../pkgs/iwlwifi-firmware/src/Makefile.inc | 8 +++ .../pkgs/iwlwifi-firmware/src/gen-makefiles | 26 +++++++++ 3 files changed, 89 insertions(+) create mode 100644 pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/package.nix create mode 100644 pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/src/Makefile.inc create mode 100644 pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/src/gen-makefiles diff --git a/pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/package.nix b/pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/package.nix new file mode 100644 index 000000000000..fc357098f95a --- /dev/null +++ b/pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/package.nix @@ -0,0 +1,55 @@ +{ + lib, + mkDerivation, + sys, + buildFreebsd, + linux-firmware, +}: +mkDerivation rec { + # out-of-tree, but we still want to use freebsd.mkDerivation, which wants an in-tree path + path = "..."; + + pname = "iwlwifi-firmware"; + version = linux-firmware.version; + + # Upstream FreeBSD doesn't wrap wifi firmware, only gpu firmware. + # We have to write our own build scripts for this. + src = ./src; + + outputs = [ + "out" + "debug" + ]; + + extraNativeBuildInputs = [ buildFreebsd.xargs-j ]; + + env = sys.passthru.env; + SYSDIR = "${sys.src}/sys"; + KERN_DEBUGDIR = "${builtins.placeholder "debug"}/lib/debug"; + KERN_DEBUGDIR_KODIR = "${KERN_DEBUGDIR}/kernel"; + KERN_DEBUGDIR_KMODDIR = "${KERN_DEBUGDIR}/kernel"; + KMODDIR = "${placeholder "out"}/kernel"; + + LINUX_FIRMWARE = "${linux-firmware}/lib/firmware"; + + # generates relocations the linker can't handle + hardeningDisable = [ + "pic" + ]; + + makeFlags = [ + "DEBUG_FLAGS=-g" + "XARGS_J=xargs-j" + "NO_XREF=1" + ]; + + preConfigure = '' + bash gen-makefiles + ''; + + meta = { + description = "Intel Wifi Firmware for FreeBSD"; + platforms = lib.platforms.freebsd; + license = linux-firmware.meta.license; + }; +} diff --git a/pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/src/Makefile.inc b/pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/src/Makefile.inc new file mode 100644 index 000000000000..810faf24a206 --- /dev/null +++ b/pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/src/Makefile.inc @@ -0,0 +1,8 @@ +KMOD= ${NAME} + +FIRMWS= ${NAME}:${NAME} + +CLEANFILES+= ${NAME} ${NAME}.fwo ${NAME}.ko.debug ${NAME}.ko.full + +${NAME}: ${LINUX_FIRMWARE}/intel/iwlwifi/${NAME} + cp $? ${.TARGET} diff --git a/pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/src/gen-makefiles b/pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/src/gen-makefiles new file mode 100644 index 000000000000..e9250b7e6e3c --- /dev/null +++ b/pkgs/os-specific/bsd/freebsd/pkgs/iwlwifi-firmware/src/gen-makefiles @@ -0,0 +1,26 @@ +set -e + +scriptdir=$(cd $(dirname $0) && pwd) +fwdir=$LINUX_FIRMWARE/intel/iwlwifi + +for dir in $scriptdir/*; do + if [ ! -d "$dir" ]; then + continue + fi + rm -rf "$dir" +done + +for file in $fwdir/*.*; do + base=$(basename $file) + + echo "SUBDIR += $base" >> Makefile + + mkdir -p "$scriptdir/$base" + cat > "$scriptdir/$base/Makefile" < +EOF +done + +echo ".include " >> Makefile