1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-18 00:10:04 +00:00

net/wifi-firmware-*: build framework and license hack cleanup

Cleanup the extra layer of "flavour" that came into the build framework
when flavours were introduced at a time when it was not planned.
Make linters some more happy. [1]

Remove the special license hack to install additional files.
If DISABLE_LICENSES is set we still installed files making builds fail [2].
One would hope to always install the lincese files but simply disable
any checking by the framework.
Introduce a new way using LICENSE_COMB=multi to install the default
license file, the extra WHENCE and any possible extra firmware license
files.  Technically this is an abuse of the system too but at least it
should work and not break non default options.

Based on:	D45369 by jrm [1]
Reported by:	pi [2]
Sponsored by:	The FreeBSD Foundation
Reviewed by:	jrm
Differential Revision: https://reviews.freebsd.org/D46124
This commit is contained in:
Bjoern A. Zeeb 2024-08-27 17:41:52 +00:00
parent b772f1f7b0
commit 8f79c11c71
8 changed files with 64 additions and 65 deletions

View File

@ -4,7 +4,7 @@ FWDRV= ath10k
FWSUBDIR= ath10k
FWDRV_VERSION= 20240513
LICENSE= LICENSE.QualcommAtheros_ath10k
LICENSE_FILE= LICENSE.QualcommAtheros_ath10k
LICENSE_NAME= QCA firmware license (${FWDRV})
WHENCE_REGEX= ath10k -.*

View File

@ -5,7 +5,7 @@ FWSUBDIR= ath11k
FWDRV_VERSION= 20240513
# Yes, the license is the ath10k one; see WHENCE.
LICENSE= LICENSE.QualcommAtheros_ath10k
LICENSE_FILE= LICENSE.QualcommAtheros_ath10k
LICENSE_NAME= QCA firmware license (${FWDRV})
WHENCE_REGEX= ath11k -.*

View File

@ -5,7 +5,7 @@ FWSUBDIR= ath12k
FWDRV_VERSION= 20240513
# Yes, the license is the ath10k one; see WHENCE.
LICENSE= LICENSE.QualcommAtheros_ath10k
LICENSE_FILE= LICENSE.QualcommAtheros_ath10k
LICENSE_NAME= QCA firmware license (${FWDRV})
WHENCE_REGEX= ath12k -.*

View File

@ -4,7 +4,7 @@ FWDRV= iwlwifi
FWSUBDIR=
FWDRV_VERSION= 20240513
LICENSE= LICENCE.iwlwifi_firmware
LICENSE_FILE= LICENCE.iwlwifi_firmware
LICENSE_NAME= Intel firmware license (${FWDRV})
WHENCE_REGEX= iwlwifi -.*

View File

@ -11,7 +11,6 @@ FWDRV_VERSION?= 0
FWDRV?= base
LICENSE_NAME?= firmware license (${FWDRV})
LICENSE_FILE?= ${WRKSRC}/${FLAVOR}/${LICENSE}
LICENSE_PERMS?= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept
EXTRACT_SUFX=
@ -19,7 +18,8 @@ DISTURL_SUFFIX?= ?h=${PORTVERSION}
# Sanity checks
.if !defined(FWDRV) || !defined(FWSUBDIR) || !defined(FWSUBS) || \
!defined(FWDRV_VERSION) || !defined(LICENSE) || \
!defined(FWDRV_VERSION) || \
!defined(LICENSE_NAME) || !defined(LICENSE_FILE) || \
!defined(DISTFILES_${FWDRV}) || !defined(DISTFILES_${FWDRV}_lic) || \
!defined(BASEDIR) || !defined(WHENCE_REGEX)
IGNORE= is a metaport or misconfigured child port; there is nothing to build
@ -27,13 +27,39 @@ IGNORE= is a metaport or misconfigured child port; there is nothing to build
FILESDIR= ${BASEDIR}/files
LICENSE_COMB= multi
LICENSE= primary whence
# Port primary license.
LICENSE_FILE_primary= ${WRKSRC}/${LICENSE_FILE}
LICENSE_NAME_primary= ${LICENSE_NAME}
LICENSE_PERMS_primary= ${LICENSE_PERMS}
# Add WHENCE file next to license where it makes sense despite not being a license.
LICENSE_NAME_whence= Origin and licensing information for linux-firmware files
LICENSE_FILE_whence= ${WRKSRC}/WHENCE
LICENSE_PERMS_whence= ${LICENSE_PERMS}
#PLIST_FILES+= ${_LICENSE_DIR}/WHENCE
# Add extra license files.
.if "${DISTFILES_${FLAVOR}_lic}"
.for _n in ${DISTFILES_${FLAVOR}_lic:range}
LICENSE+= extra${_n}
LICENSE_FILE_extra${_n}= ${WRKSRC}/fw/${DISTFILES_${FLAVOR}_lic:[${_n}]:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g}
LICENSE_NAME_extra${_n}= ${LICENSE_NAME} (extra fw license)
LICENSE_PERMS_extra${_n}= ${LICENSE_PERMS}
.endfor
.endif
# Add firmware files to plist.
.for _f in ${DISTFILES_${FLAVOR}}
PLIST_FILES+= ${KMODDIR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}.ko
.endfor
# Split things into the full package (driver name) and more specific flavors.
FLAVORS= ${FWDRV} \
${FWSUBS}
# What a kludge.... thanks https://docs.freebsd.org/en/books/porters-handbook/flavors/ !
FLAVOR?= ${FLAVORS:[1]}
# Generate the conflicts list.
.for f in ${FWSUBS}
${FWDRV}_CONFLICTS_INSTALL+= ${PORTNAME}-${f}
@ -41,14 +67,10 @@ ${f}_PKGNAMESUFFIX= -${f}
${f}_CONFLICTS_INSTALL= ${PORTNAME}
.endfor
DISTFILES_FLAVOR:= ${DISTFILES_${FLAVOR}}
DISTFILES_FLAVOR_lic:= ${DISTFILES_${FLAVOR}_lic}
DISTFILES= \
${DISTFILES_FLAVOR} \
${DISTFILES_FLAVOR_lic} \
${LICENSE}${DISTURL_SUFFIX} \
WHENCE${DISTURL_SUFFIX}
DISTFILES= ${DISTFILES_${FLAVOR}} \
${DISTFILES_${FLAVOR}_lic} \
${LICENSE_FILE}${DISTURL_SUFFIX} \
WHENCE${DISTURL_SUFFIX}
DIST_SUBDIR= linux-firmware/${FWDRV}fw
EXTRACT_ONLY=
@ -58,64 +80,41 @@ ONLY_FOR_ARCHS_REASON= LinuxKPI driver only available for these architectures
USES= kmod uidfix
MAKE_ENV+= FWSRCDIR=${WRKSRC}/fw
post-extract:
@${MKDIR} ${WRKSRC}/${FLAVOR}/fw
@${MKDIR} ${WRKSRC}/fw
# Deal with supplementary licenses files.
@${CP} ${DISTDIR}/${DIST_SUBDIR}/${LICENSE}${DISTURL_SUFFIX} ${WRKSRC}/${FLAVOR}/${LICENSE}
@${CP} ${DISTDIR}/${DIST_SUBDIR}/WHENCE${DISTURL_SUFFIX} ${WRKSRC}/${FLAVOR}/WHENCE.in
@${SED} -e "s@%%XXX%%@${WHENCE_REGEX:Q}@g" ${FILESDIR}/WHENCE.awk.in > ${WRKSRC}/${FLAVOR}/WHENCE.awk
@${AWK} -f ${WRKSRC}/${FLAVOR}/WHENCE.awk ${WRKSRC}/${FLAVOR}/WHENCE.in > ${WRKSRC}/${FLAVOR}/WHENCE
@${CP} ${DISTDIR}/${DIST_SUBDIR}/${LICENSE_FILE}${DISTURL_SUFFIX} ${WRKSRC}/${LICENSE_FILE}
@${CP} ${DISTDIR}/${DIST_SUBDIR}/WHENCE${DISTURL_SUFFIX} ${WRKSRC}/WHENCE.in
@${SED} -e "s@%%XXX%%@${WHENCE_REGEX:Q}@g" ${FILESDIR}/WHENCE.awk.in > ${WRKSRC}/WHENCE.awk
@${AWK} -f ${WRKSRC}/WHENCE.awk ${WRKSRC}/WHENCE.in > ${WRKSRC}/WHENCE
# Prepare toplevel Makefile and Makefile.inc.
@${ECHO_CMD} "SUBDIR=" > ${WRKSRC}/${FLAVOR}/Makefile
@${ECHO_CMD} "SUBDIR=" > ${WRKSRC}/Makefile
@${SED} -e "s@%%FWDRV%%@${FWDRV}@g" \
-e "s@%%FWSUBDIR%%@${FWSUBDIR}@g" \
${FILESDIR}/Makefile.inc.in > ${WRKSRC}/${FLAVOR}/Makefile.inc
.for _f in ${DISTFILES_FLAVOR}
${FILESDIR}/Makefile.inc.in > ${WRKSRC}/Makefile.inc
.for _f in ${DISTFILES_${FLAVOR}}
# We remove '.' and '-' as well as '/' as they don't work well in loader.conf.
@${MKDIR} ${WRKSRC}/${FLAVOR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}
@${MKDIR} ${WRKSRC}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}
# Create subdir (firmware file) Makefile.
@${ECHO_CMD} "FWNAME=${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:T}" > ${WRKSRC}/${FLAVOR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
@${ECHO_CMD} "FWNAME=${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:T}" > ${WRKSRC}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
.if (${_f:H:C,^[^/]*,,1:C,^/,,} != "")
@${ECHO_CMD} "FWSUBSUBDIR=${_f:H:C,^[^/]*,,1:C,^/,,}" >> ${WRKSRC}/${FLAVOR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
@${ECHO_CMD} "FWSUBSUBDIR=${_f:H:C,^[^/]*,,1:C,^/,,}" >> ${WRKSRC}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
.endif
# XXX-BZ recover firmware versions later again from somewhere? Pain to keep track though, else use 0 or ${FWDRV_VERSION}?
@${ECHO_CMD} "VERSION=0" >> ${WRKSRC}/${FLAVOR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
@${ECHO_CMD} '.include <bsd.kmod.mk>' >> ${WRKSRC}/${FLAVOR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
@${ECHO_CMD} "VERSION=0" >> ${WRKSRC}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
@${ECHO_CMD} '.include <bsd.kmod.mk>' >> ${WRKSRC}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}/Makefile
# Add subdir to top-level Makefile.
@${ECHO_CMD} "SUBDIR+=${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}" >> ${WRKSRC}/${FLAVOR}/Makefile
@${ECHO_CMD} "SUBDIR+=${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}" >> ${WRKSRC}/Makefile
# Create firmware source directory and copy in distfile.
@${MKDIR} ${WRKSRC}/${FLAVOR}/fw/${_f:H}
${CP} ${DISTDIR}/${DIST_SUBDIR}/${_f} ${WRKSRC}/${FLAVOR}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@}
@${MKDIR} ${WRKSRC}/fw/${_f:H}
${CP} ${DISTDIR}/${DIST_SUBDIR}/${_f} ${WRKSRC}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@}
.endfor
@${ECHO_CMD} '.include <bsd.subdir.mk>' >> ${WRKSRC}/${FLAVOR}/Makefile
@${ECHO_CMD} '.include <bsd.subdir.mk>' >> ${WRKSRC}/Makefile
# Copy in additional licenses files.
.for _f in ${DISTFILES_FLAVOR_lic}
${CP} ${DISTDIR}/${DIST_SUBDIR}/${_f} ${WRKSRC}/${FLAVOR}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g}
.for _f in ${DISTFILES_${FLAVOR}_lic}
${CP} ${DISTDIR}/${DIST_SUBDIR}/${_f} ${WRKSRC}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g}
.endfor
# Internal hack we should probably upstream.
# Add WHENCE file next to license where it makes sense despite not being a license.
_USES_stage+= 881:post-install-license
post-install-license:
${INSTALL_DATA} ${WRKSRC}/${FLAVOR}/WHENCE ${STAGEDIR}${_LICENSE_DIR}/
.for _f in ${DISTFILES_FLAVOR_lic}
${INSTALL_DATA} ${WRKSRC}/${FLAVOR}/fw/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g} \
${STAGEDIR}${_LICENSE_DIR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g}
.endfor
.include <bsd.port.pre.mk>
MAKE_ENV+= FWSRCDIR=${WRKSRC}/${FLAVOR}/fw
MAKE_FLAGS+= -C ${WRKSRC}/${FLAVOR}
# Add firmware files to plist.
.for _f in ${DISTFILES_FLAVOR}
PLIST_FILES+= ${KMODDIR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,.,_,g:S,-,_,g:S,/,_,g}.ko
.endfor
# Record extra licenses files in plist.
PLIST_FILES+= ${_LICENSE_DIR}/WHENCE
.for _f in ${DISTFILES_FLAVOR_lic}
PLIST_FILES+= ${_LICENSE_DIR}/${_f:C@(^[^?]*)${DISTURL_SUFFIX:Q}@\1@:S,/,_,g}
.endfor
.include <bsd.port.post.mk>
.include <bsd.port.mk>

View File

@ -4,7 +4,7 @@ FWDRV= mt76
FWSUBDIR= mediatek
FWDRV_VERSION= 20240513
LICENSE= LICENCE.mediatek
LICENSE_FILE= LICENCE.mediatek
LICENSE_NAME= Mediatek firmware license (${FWDRV})
WHENCE_REGEX= (mt7915e|mt7921|mt7922|mt7925|mt7996e) -.*ireless

View File

@ -7,7 +7,7 @@ FWSUBDIR= rtw88
#FWDRV_VERSION= 20220209 # Used for a long time
FWDRV_VERSION= 20240513
LICENSE= LICENCE.rtlwifi_firmware.txt
LICENSE_FILE= LICENCE.rtlwifi_firmware.txt
LICENSE_NAME= Realtek firmware license (${FWDRV})
WHENCE_REGEX= rtw88 -.*

View File

@ -4,7 +4,7 @@ FWDRV= rtw89
FWSUBDIR= rtw89
FWDRV_VERSION= 20240513
LICENSE= LICENCE.rtlwifi_firmware.txt
LICENSE_FILE= LICENCE.rtlwifi_firmware.txt
LICENSE_NAME= Realtek firmware license (${FWDRV})
WHENCE_REGEX= rtw89 -.*