Index: sys/conf/dtb.build.mk =================================================================== --- /dev/null +++ sys/conf/dtb.build.mk @@ -0,0 +1,95 @@ +# $FreeBSD$ + +.include +# Grab all the options for a kernel build. For backwards compat, we need to +# do this after bsd.own.mk. +.include "kern.opts.mk" + +DTC?= dtc + +.if !defined(SYSDIR) +.if defined(S) +SYSDIR= ${S} +.else +# Search for kernel source tree in standard places. +.for _dir in ${.CURDIR}/../.. ${.CURDIR}/../../.. /sys /usr/src/sys +.if exists(${_dir}/kern/) +SYSDIR= ${_dir:tA} +.endif +.endfor +.endif # defined(S) +.endif # defined(SYSDIR) + +.if !defined(SYSDIR) || !exists(${SYSDIR}/kern/) +.error "can't find kernel source tree" +.endif + +.PATH: ${SYSDIR}/gnu/dts/${MACHINE} ${SYSDIR}/dts/${MACHINE} ${SYSDIR}/dts/${MACHINE}/overlays + +.if defined(DTS) +.for _dts in ${DTS} +_dtb=${_dts:T:R:S/$/.dtb/} +.if !empty(DTS_${_dtb}) +.warning "Duplicated DTS ${_dts}" +.endif + +DTB:=${DTB} ${_dtb} +DTS_${_dtb}:=${_dts} +.endfor +.endif + +.if defined(DTSO) +.for _dtso in ${DTSO} +_dtso_path=${_dtso:C/^([^\/])/overlays\/\\1/} +_dtbo=${_dtso:T:R:S/$/.dtbo/} +.if !empty(DTSO_${_dtbo}) +.warning "Duplicated DTSO ${_dtso}" +.endif + +DTBO:=${DTBO} ${_dtbo} +DTSO_${_dtbo}:=${_dtso_path} +.endfor +.endif + +.if defined(DTB) +.export DTC ECHO +.for _dtb in ${DTB} +${_dtb}: ${DTS_${_dtb}} ${OP_META} + @${ECHO} Generating ${.TARGET} from ${DTS_${.TARGET}} + @${SYSDIR}/tools/fdt/make_dtb.sh ${SYSDIR} ${DTS_${.TARGET}} ${.OBJDIR} +.endfor +.endif + +.if defined(DTBO) +.export DTC ECHO +.for _dtbo in ${DTBO} +${_dtbo}: ${DTSO_${_dtbo}} ${OP_META} + @${ECHO} Generating ${.TARGET} from ${DTSO_${.TARGET}} + @${SYSDIR}/tools/fdt/make_dtbo.sh ${SYSDIR} ${DTSO_${.TARGET}} ${.OBJDIR} +.endfor +.endif + +_dtbinstall: +# Need to create this because installkernel doesn't invoke mtree with BSD.root.mtree +# to make sure the tree is setup properly. We don't recreate it to avoid duplicate +# entries in the NO_ROOT case. + test -d ${DESTDIR}${DTBDIR} || ${INSTALL} -d -o ${DTBOWN} -g ${DTBGRP} ${DESTDIR}${DTBDIR} +.for _dtb in ${DTB} +.if ${MACHINE_CPUARCH} == "aarch64" + # :H:T here to grab the vendor component of the DTB path in a way that + # allows out-of-tree DTS builds, too. We make the assumption that + # out-of-tree DTS will have a similar directory structure to in-tree, + # with .dts files appearing in a vendor/ directory. + test -d ${DESTDIR}${DTBDIR}/${_dtb:H:T} || ${INSTALL} -d -o ${DTBOWN} -g ${DTBGRP} ${DESTDIR}${DTBDIR}/${_dtb:H:T} + ${INSTALL} -o ${DTBOWN} -g ${DTBGRP} -m ${DTBMODE} \ + ${_INSTALLFLAGS} ${_dtb:T} ${DESTDIR}${DTBDIR}/${_dtb:H:T} +.else + ${INSTALL} -o ${DTBOWN} -g ${DTBGRP} -m ${DTBMODE} \ + ${_INSTALLFLAGS} ${_dtb} ${DESTDIR}${DTBDIR}/ +.endif +.endfor + test -d ${DESTDIR}${DTBODIR} || ${INSTALL} -d -o ${DTBOWN} -g ${DTBGRP} ${DESTDIR}${DTBODIR} +.for _dtbo in ${DTBO} + ${INSTALL} -o ${DTBOWN} -g ${DTBGRP} -m ${DTBMODE} \ + ${_INSTALLFLAGS} ${_dtbo} ${DESTDIR}${DTBODIR}/ +.endfor Index: sys/conf/dtb.mk =================================================================== --- sys/conf/dtb.mk +++ sys/conf/dtb.mk @@ -8,6 +8,8 @@ # # DTS List of the dts files to build and install. # +# DTSO List of the dts overlay files to build and install. +# # DTBDIR Base path for dtb modules [/boot/dtb] # # DTBOWN .dtb file owner. [${BINOWN}] @@ -20,7 +22,7 @@ # # +++ targets +++ # -# install: +# install: # install the kernel module; if the Makefile # does not itself define the target install, the targets # beforeinstall and afterinstall may also be used to cause @@ -28,78 +30,15 @@ # is executed. # -.include -# Grab all the options for a kernel build. For backwards compat, we need to -# do this after bsd.own.mk. -.include "kern.opts.mk" - -DTC?= dtc - -# Search for kernel source tree in standard places. -.for _dir in ${.CURDIR}/../.. ${.CURDIR}/../../.. /sys /usr/src/sys -.if !defined(SYSDIR) && exists(${_dir}/kern/) -SYSDIR= ${_dir:tA} -.endif -.endfor -.if !defined(SYSDIR) || !exists(${SYSDIR}/kern/) -.error "can't find kernel source tree" -.endif - -.SUFFIXES: .dtb .dts .dtbo .dtso - -.PATH: ${SYSDIR}/gnu/dts/${MACHINE} ${SYSDIR}/dts/${MACHINE} ${SYSDIR}/dts/${MACHINE}/overlays - -DTB=${DTS:R:S/$/.dtb/} -DTBO=${DTSO:R:S/$/.dtbo/} +.include "dtb.build.mk" +.if !target(install) && !target(realinstall) all: ${DTB} ${DTBO} - -.if defined(DTS) -.export DTC ECHO -.for _dts in ${DTS} -${_dts:R:S/$/.dtb/}: ${_dts} ${OP_META} - @${ECHO} Generating ${.TARGET} from ${_dts} - @${SYSDIR}/tools/fdt/make_dtb.sh ${SYSDIR} ${_dts} ${.OBJDIR} -CLEANFILES+=${_dts:R:S/$/.dtb/} -.endfor -.endif - -.if defined(DTSO) -.export DTC ECHO -.for _dtso in ${DTSO} -${_dtso:R:S/$/.dtbo/}: ${_dtso} ${OP_META} - @${ECHO} Generating ${.TARGET} from ${_dtso} - @${SYSDIR}/tools/fdt/make_dtbo.sh ${SYSDIR} overlays/${_dtso} ${.OBJDIR} -CLEANFILES+=${_dtso:R:S/$/.dtbo/} -.endfor -.endif - -.if !target(install) -.if !target(realinstall) realinstall: _dtbinstall -.ORDER: beforeinstall _kmodinstall -_dtbinstall: -# Need to create this because installkernel doesn't invoke mtree with BSD.root.mtree -# to make sure the tree is setup properly. We don't recreate it to avoid duplicate -# entries in the NO_ROOT case. - test -d ${DESTDIR}${DTBDIR} || ${INSTALL} -d -o ${DTBOWN} -g ${DTBGRP} ${DESTDIR}${DTBDIR} -.for _dtb in ${DTB} -.if ${MACHINE_CPUARCH} == "aarch64" - test -d ${DESTDIR}${DTBDIR}/${_dtb:H} || ${INSTALL} -d -o ${DTBOWN} -g ${DTBGRP} ${DESTDIR}${DTBDIR}/${_dtb:H} - ${INSTALL} -o ${DTBOWN} -g ${DTBGRP} -m ${DTBMODE} \ - ${_INSTALLFLAGS} ${_dtb:T} ${DESTDIR}${DTBDIR}/${_dtb:H} -.else - ${INSTALL} -o ${DTBOWN} -g ${DTBGRP} -m ${DTBMODE} \ - ${_INSTALLFLAGS} ${_dtb} ${DESTDIR}${DTBDIR}/ -.endif -.endfor - test -d ${DESTDIR}${DTBODIR} || ${INSTALL} -d -o ${DTBOWN} -g ${DTBGRP} ${DESTDIR}${DTBODIR} -.for _dtbo in ${DTBO} - ${INSTALL} -o ${DTBOWN} -g ${DTBGRP} -m ${DTBMODE} \ - ${_INSTALLFLAGS} ${_dtbo} ${DESTDIR}${DTBODIR}/ -.endfor -.endif # !target(realinstall) -.endif # !target(install) +.ORDER: beforeinstall _dtbinstall + +CLEANFILES+=${DTB} ${DTBO} +.endif # !target(install) && !target(realinstall) .include .include Index: sys/conf/kern.post.mk =================================================================== --- sys/conf/kern.post.mk +++ sys/conf/kern.post.mk @@ -8,6 +8,16 @@ # should be defined in the kern.pre.mk so that port makefiles can # override or augment them. +.if defined(DTS) || defined(DTSO) +.include "dtb.build.mk" + +KERNEL_EXTRA+= ${DTB} ${DTBO} +CLEAN+= ${DTB} ${DTBO} + +kernel-install: _dtbinstall +.ORDER: beforeinstall _dtbinstall +.endif + # In case the config had a makeoptions DESTDIR... .if defined(DESTDIR) MKMODULESENV+= DESTDIR="${DESTDIR}"