kmod.mk revision 301079
1204076Spjd# From: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91 2204076Spjd# $FreeBSD: head/sys/conf/kmod.mk 301079 2016-05-31 21:22:19Z bdrewery $ 3219351Spjd# 4204076Spjd# The include file <bsd.kmod.mk> handles building and installing loadable 5204076Spjd# kernel modules. 6204076Spjd# 7204076Spjd# 8204076Spjd# +++ variables +++ 9204076Spjd# 10204076Spjd# CLEANFILES Additional files to remove for the clean and cleandir targets. 11204076Spjd# 12204076Spjd# EXPORT_SYMS A list of symbols that should be exported from the module, 13204076Spjd# or the name of a file containing a list of symbols, or YES 14204076Spjd# to export all symbols. If not defined, no symbols are 15204076Spjd# exported. 16204076Spjd# 17204076Spjd# KMOD The name of the kernel module to build. 18204076Spjd# 19204076Spjd# KMODDIR Base path for kernel modules (see kld(4)). [/boot/kernel] 20204076Spjd# 21204076Spjd# KMODOWN Module file owner. [${BINOWN}] 22204076Spjd# 23204076Spjd# KMODGRP Module file group. [${BINGRP}] 24204076Spjd# 25204076Spjd# KMODMODE Module file mode. [${BINMODE}] 26204076Spjd# 27204076Spjd# KMODLOAD Command to load a kernel module [/sbin/kldload] 28204076Spjd# 29204076Spjd# KMODUNLOAD Command to unload a kernel module [/sbin/kldunload] 30204076Spjd# 31204076Spjd# KMODISLOADED Command to check whether a kernel module is 32204076Spjd# loaded [/sbin/kldstat -q -n] 33204076Spjd# 34204076Spjd# PROG The name of the kernel module to build. 35204076Spjd# If not supplied, ${KMOD}.ko is used. 36204076Spjd# 37204076Spjd# SRCS List of source files. 38204076Spjd# 39204076Spjd# FIRMWS List of firmware images in format filename:shortname:version 40204076Spjd# 41204076Spjd# FIRMWARE_LICENSE 42204076Spjd# Set to the name of the license the user has to agree on in 43204076Spjd# order to use this firmware. See /usr/share/doc/legal 44204076Spjd# 45204076Spjd# DESTDIR The tree where the module gets installed. [not set] 46204076Spjd# 47204076Spjd# +++ targets +++ 48211982Spjd# 49204076Spjd# install: 50204076Spjd# install the kernel module; if the Makefile 51204076Spjd# does not itself define the target install, the targets 52204076Spjd# beforeinstall and afterinstall may also be used to cause 53204076Spjd# actions immediately before and after the install target 54204076Spjd# is executed. 55204076Spjd# 56204076Spjd# load: 57204076Spjd# Load a module. 58204076Spjd# 59204076Spjd# unload: 60212038Spjd# Unload a module. 61204076Spjd# 62204076Spjd# reload: 63204076Spjd# Unload if loaded, then load. 64211886Spjd# 65204076Spjd 66204076SpjdAWK?= awk 67204076SpjdKMODLOAD?= /sbin/kldload 68204076SpjdKMODUNLOAD?= /sbin/kldunload 69204076SpjdKMODISLOADED?= /sbin/kldstat -q -n 70204076SpjdOBJCOPY?= objcopy 71210886Spjd 72210886Spjd.include <bsd.init.mk> 73210886Spjd# Grab all the options for a kernel build. For backwards compat, we need to 74204076Spjd# do this after bsd.own.mk. 75204076Spjd.include "kern.opts.mk" 76204076Spjd.include <bsd.compiler.mk> 77204076Spjd.include "config.mk" 78204076Spjd 79204076Spjd.SUFFIXES: .out .o .c .cc .cxx .C .y .l .s .S .m 80204076Spjd 81204076Spjd# amd64 and mips use direct linking for kmod, all others use shared binaries 82204076Spjd.if ${MACHINE_CPUARCH} != amd64 && ${MACHINE_CPUARCH} != mips 83204076Spjd__KLD_SHARED=yes 84204076Spjd.else 85204076Spjd__KLD_SHARED=no 86204076Spjd.endif 87204076Spjd 88204076Spjd.if !empty(CFLAGS:M-O[23s]) && empty(CFLAGS:M-fno-strict-aliasing) 89204076SpjdCFLAGS+= -fno-strict-aliasing 90204076Spjd.endif 91204076SpjdWERROR?= -Werror 92204076SpjdCFLAGS+= ${WERROR} 93204076SpjdCFLAGS+= -D_KERNEL 94204076SpjdCFLAGS+= -DKLD_MODULE 95204076Spjd 96204076Spjd# Don't use any standard or source-relative include directories. 97204076SpjdNOSTDINC= -nostdinc 98204076SpjdCFLAGS:= ${CFLAGS:N-I*} ${NOSTDINC} ${INCLMAGIC} ${CFLAGS:M-I*} 99204076Spjd.if defined(KERNBUILDDIR) 100204076SpjdCFLAGS+= -DHAVE_KERNEL_OPTION_HEADERS -include ${KERNBUILDDIR}/opt_global.h 101204076Spjd.endif 102204076Spjd 103204076Spjd# Add -I paths for system headers. Individual module makefiles don't 104204076Spjd# need any -I paths for this. Similar defaults for .PATH can't be 105204076Spjd# set because there are no standard paths for non-headers. 106204076SpjdCFLAGS+= -I. -I${SYSDIR} 107204076Spjd 108204076SpjdCFLAGS.gcc+= -finline-limit=${INLINE_LIMIT} 109204076SpjdCFLAGS.gcc+= -fms-extensions 110204076SpjdCFLAGS.gcc+= --param inline-unit-growth=100 111204076SpjdCFLAGS.gcc+= --param large-function-growth=1000 112204076Spjd 113204076Spjd# Disallow common variables, and if we end up with commons from 114204076Spjd# somewhere unexpected, allocate storage for them in the module itself. 115204076SpjdCFLAGS+= -fno-common 116204076SpjdLDFLAGS+= -d -warn-common 117204076Spjd 118204076SpjdCFLAGS+= ${DEBUG_FLAGS} 119204076Spjd.if ${MACHINE_CPUARCH} == amd64 120204076SpjdCFLAGS+= -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer 121204076Spjd.endif 122204076Spjd 123204076Spjd.if ${MACHINE_CPUARCH} == "aarch64" 124204076SpjdCFLAGS+= -fPIC 125204076Spjd.endif 126204076Spjd 127204076Spjd# Temporary workaround for PR 196407, which contains the fascinating details. 128204076Spjd# Don't allow clang to use fpu instructions or registers in kernel modules. 129204076Spjd.if ${MACHINE_CPUARCH} == arm 130204076Spjd.if ${COMPILER_VERSION} < 30800 131204076SpjdCFLAGS.clang+= -mllvm -arm-use-movt=0 132204076Spjd.else 133204076SpjdCFLAGS.clang+= -mno-movt 134204076Spjd.endif 135204076SpjdCFLAGS.clang+= -mfpu=none 136204076SpjdCFLAGS+= -funwind-tables 137204076Spjd.endif 138204076Spjd 139204076Spjd.if ${MACHINE_CPUARCH} == powerpc 140204076SpjdCFLAGS+= -mlongcall -fno-omit-frame-pointer 141204076Spjd.endif 142204076Spjd 143204076Spjd.if ${MACHINE_CPUARCH} == mips 144204076SpjdCFLAGS+= -G0 -fno-pic -mno-abicalls -mlong-calls 145204076Spjd.endif 146204076Spjd 147204076Spjd.if defined(DEBUG) || defined(DEBUG_FLAGS) 148204076SpjdCTFFLAGS+= -g 149204076Spjd.endif 150204076Spjd 151204076Spjd.if defined(FIRMWS) 152204076Spjd${KMOD:S/$/.c/}: ${SYSDIR}/tools/fw_stub.awk ${OP_META} 153204076Spjd ${AWK} -f ${SYSDIR}/tools/fw_stub.awk ${FIRMWS} -m${KMOD} -c${KMOD:S/$/.c/g} \ 154211982Spjd ${FIRMWARE_LICENSE:C/.+/-l/}${FIRMWARE_LICENSE} 155204076Spjd 156211982SpjdSRCS+= ${KMOD:S/$/.c/} 157204076SpjdCLEANFILES+= ${KMOD:S/$/.c/} 158204076Spjd 159204076Spjd.for _firmw in ${FIRMWS} 160204076Spjd${_firmw:C/\:.*$/.fwo/:T}: ${_firmw:C/\:.*$//} ${OP_META} 161204076Spjd @${ECHO} ${_firmw:C/\:.*$//} ${.ALLSRC:M*${_firmw:C/\:.*$//}} 162204076Spjd @if [ -e ${_firmw:C/\:.*$//} ]; then \ 163204076Spjd ${LD} -b binary --no-warn-mismatch ${_LDFLAGS} \ 164204076Spjd -r -d -o ${.TARGET} ${_firmw:C/\:.*$//}; \ 165204076Spjd else \ 166204076Spjd ln -s ${.ALLSRC:M*${_firmw:C/\:.*$//}} ${_firmw:C/\:.*$//}; \ 167204076Spjd ${LD} -b binary --no-warn-mismatch ${_LDFLAGS} \ 168204076Spjd -r -d -o ${.TARGET} ${_firmw:C/\:.*$//}; \ 169204076Spjd rm ${_firmw:C/\:.*$//}; \ 170204076Spjd fi 171204076Spjd 172204076SpjdOBJS+= ${_firmw:C/\:.*$/.fwo/:T} 173204076Spjd.endfor 174204076Spjd.endif 175204076Spjd 176204076Spjd# Conditionally include SRCS based on kernel config options. 177204076Spjd.for _o in ${KERN_OPTS} 178204076SpjdSRCS+=${SRCS.${_o}} 179204076Spjd.endfor 180204076Spjd 181204076SpjdOBJS+= ${SRCS:N*.h:R:S/$/.o/g} 182214692Spjd 183214692Spjd.if !defined(PROG) 184214692SpjdPROG= ${KMOD}.ko 185204076Spjd.endif 186214692Spjd 187214692Spjd.if !defined(DEBUG_FLAGS) 188214692SpjdFULLPROG= ${PROG} 189214692Spjd.else 190214692SpjdFULLPROG= ${PROG}.full 191214692Spjd${PROG}: ${FULLPROG} ${PROG}.debug ${OP_META} 192204076Spjd ${OBJCOPY} --strip-debug --add-gnu-debuglink=${PROG}.debug \ 193214692Spjd ${FULLPROG} ${.TARGET} 194214692Spjd${PROG}.debug: ${FULLPROG} ${OP_META} 195214692Spjd ${OBJCOPY} --only-keep-debug ${FULLPROG} ${.TARGET} 196214692Spjd.endif 197204076Spjd 198204076Spjd.if ${__KLD_SHARED} == yes 199204076Spjd${FULLPROG}: ${KMOD}.kld ${OP_META} 200204076Spjd.if ${MACHINE_CPUARCH} != "aarch64" 201204076Spjd ${LD} -Bshareable ${_LDFLAGS} -o ${.TARGET} ${KMOD}.kld 202204076Spjd.else 203204076Spjd#XXXKIB Relocatable linking in aarch64 ld from binutils 2.25.1 does 204204076Spjd# not work. The linker corrupts the references to the external 205204076Spjd# symbols which are defined by other object in the linking set 206204076Spjd# and should therefore loose the GOT entry. The problem seems 207204076Spjd# to be fixed in the binutils-gdb git HEAD as of 2015-10-04. Hack 208204076Spjd# below allows to get partially functioning modules for now. 209209183Spjd ${LD} -Bshareable ${_LDFLAGS} -o ${.TARGET} ${OBJS} 210209183Spjd.endif 211209183Spjd.if !defined(DEBUG_FLAGS) 212209183Spjd ${OBJCOPY} --strip-debug ${.TARGET} 213204076Spjd.endif 214204076Spjd.endif 215204076Spjd 216204076SpjdEXPORT_SYMS?= NO 217204076Spjd.if ${EXPORT_SYMS} != YES 218204076SpjdCLEANFILES+= export_syms 219204076Spjd.endif 220204076Spjd 221204076Spjd.if ${__KLD_SHARED} == yes 222204076Spjd${KMOD}.kld: ${OBJS} ${OP_META} 223204076Spjd.else 224204076Spjd${FULLPROG}: ${OBJS} ${OP_META} 225204076Spjd.endif 226204076Spjd ${LD} ${_LDFLAGS} -r -d -o ${.TARGET} ${OBJS} 227204076Spjd.if ${MK_CTF} != "no" 228204076Spjd ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS} 229204076Spjd.endif 230204076Spjd.if defined(EXPORT_SYMS) 231204076Spjd.if ${EXPORT_SYMS} != YES 232204076Spjd.if ${EXPORT_SYMS} == NO 233204076Spjd :> export_syms 234204076Spjd.elif !exists(${.CURDIR}/${EXPORT_SYMS}) 235211982Spjd echo ${EXPORT_SYMS} > export_syms 236204076Spjd.else 237204076Spjd grep -v '^#' < ${EXPORT_SYMS} > export_syms 238204076Spjd.endif 239204076Spjd ${AWK} -f ${SYSDIR}/conf/kmod_syms.awk ${.TARGET} \ 240204076Spjd export_syms | xargs -J% ${OBJCOPY} % ${.TARGET} 241204076Spjd.endif 242204076Spjd.endif 243204076Spjd.if !defined(DEBUG_FLAGS) && ${__KLD_SHARED} == no 244204076Spjd ${OBJCOPY} --strip-debug ${.TARGET} 245204076Spjd.endif 246204076Spjd 247213533Spjd_ILINKS=machine 248204076Spjd.if ${MACHINE} != ${MACHINE_CPUARCH} && ${MACHINE} != "arm64" 249204076Spjd_ILINKS+=${MACHINE_CPUARCH} 250204076Spjd.endif 251204076Spjd.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" 252213531Spjd_ILINKS+=x86 253213531Spjd.endif 254204076SpjdCLEANFILES+=${_ILINKS} 255204076Spjd 256204076Spjdall: ${PROG} 257204076Spjd 258204076Spjdbeforedepend: ${_ILINKS} 259204076Spjdbeforebuild: ${_ILINKS} 260204076Spjd 261204076Spjd# Ensure that the links exist without depending on it when it exists which 262204076Spjd# causes all the modules to be rebuilt when the directory pointed to changes. 263212899Spjd.for _link in ${_ILINKS} 264204076Spjd.if !exists(${.OBJDIR}/${_link}) 265204076Spjd${OBJS}: ${_link} 266204076Spjd.endif 267204076Spjd.endfor 268218138Spjd 269204076Spjd# Search for kernel source tree in standard places. 270204076Spjd.for _dir in ${.CURDIR}/../.. ${.CURDIR}/../../.. /sys /usr/src/sys 271204076Spjd.if !defined(SYSDIR) && exists(${_dir}/kern/) 272204076SpjdSYSDIR= ${_dir} 273204076Spjd.endif 274204076Spjd.endfor 275204076Spjd.if !defined(SYSDIR) || !exists(${SYSDIR}/kern/) 276212899Spjd.error "can't find kernel source tree" 277204076Spjd.endif 278204076Spjd 279204076Spjd.NOPATH: ${_ILINKS} 280204076Spjd 281204076Spjd${_ILINKS}: 282204076Spjd @case ${.TARGET} in \ 283204076Spjd machine) \ 284204076Spjd path=${SYSDIR}/${MACHINE}/include ;; \ 285204076Spjd *) \ 286204076Spjd path=${SYSDIR}/${.TARGET:T}/include ;; \ 287204076Spjd esac ; \ 288204076Spjd path=`(cd $$path && /bin/pwd)` ; \ 289204076Spjd ${ECHO} ${.TARGET:T} "->" $$path ; \ 290204076Spjd ln -sf $$path ${.TARGET:T} 291204076Spjd 292204076SpjdCLEANFILES+= ${PROG} ${KMOD}.kld ${OBJS} 293204076Spjd 294204076Spjd.if defined(DEBUG_FLAGS) 295218138SpjdCLEANFILES+= ${FULLPROG} ${PROG}.debug 296218138Spjd.endif 297204076Spjd 298204076Spjd.if !target(install) 299204076Spjd 300204076Spjd_INSTALLFLAGS:= ${INSTALLFLAGS} 301204076Spjd.for ie in ${INSTALLFLAGS_EDIT} 302204076Spjd_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 303204076Spjd.endfor 304204076Spjd 305204076Spjd.if !target(realinstall) 306210881SpjdKERN_DEBUGDIR?= ${DEBUGDIR} 307210881Spjdrealinstall: _kmodinstall 308210881Spjd.ORDER: beforeinstall _kmodinstall 309210881Spjd_kmodinstall: .PHONY 310210881Spjd ${INSTALL} -T release -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \ 311210881Spjd ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${KMODDIR}/ 312210881Spjd.if defined(DEBUG_FLAGS) && !defined(INSTALL_NODEBUG) && ${MK_KERNEL_SYMBOLS} != "no" 313204076Spjd ${INSTALL} -T debug -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \ 314204076Spjd ${_INSTALLFLAGS} ${PROG}.debug ${DESTDIR}${KERN_DEBUGDIR}${KMODDIR}/ 315204076Spjd.endif 316204076Spjd 317204076Spjd.include <bsd.links.mk> 318204076Spjd 319204076Spjd.if !defined(NO_XREF) 320204076Spjdafterinstall: _kldxref 321204076Spjd.ORDER: realinstall _kldxref 322204076Spjd.ORDER: _installlinks _kldxref 323204076Spjd_kldxref: .PHONY 324204076Spjd @if type kldxref >/dev/null 2>&1; then \ 325204076Spjd ${ECHO} kldxref ${DESTDIR}${KMODDIR}; \ 326204076Spjd kldxref ${DESTDIR}${KMODDIR}; \ 327204076Spjd fi 328204076Spjd.endif 329204076Spjd.endif # !target(realinstall) 330204076Spjd 331204076Spjd.endif # !target(install) 332204076Spjd 333204076Spjd.if !target(load) 334204076Spjdload: ${PROG} .PHONY 335204076Spjd ${KMODLOAD} -v ${.OBJDIR}/${PROG} 336204076Spjd.endif 337204076Spjd 338204076Spjd.if !target(unload) 339204076Spjdunload: .PHONY 340204076Spjd if ${KMODISLOADED} ${PROG} ; then ${KMODUNLOAD} -v ${PROG} ; fi 341204076Spjd.endif 342204076Spjd 343204076Spjd.if !target(reload) 344204076Spjdreload: unload load .PHONY 345204076Spjd.endif 346204076Spjd 347204076Spjd.if defined(KERNBUILDDIR) 348204076Spjd.PATH: ${KERNBUILDDIR} 349204076SpjdCFLAGS+= -I${KERNBUILDDIR} 350204076Spjd.for _src in ${SRCS:Mopt_*.h} 351204076SpjdCLEANFILES+= ${_src} 352204076Spjd.if !target(${_src}) 353204076Spjd${_src}: 354204076Spjd ln -sf ${KERNBUILDDIR}/${_src} ${.TARGET} 355204076Spjd.endif 356204076Spjd.endfor 357204076Spjd.else 358204076Spjd.for _src in ${SRCS:Mopt_*.h} 359204076SpjdCLEANFILES+= ${_src} 360204076Spjd.if !target(${_src}) 361204076Spjd${_src}: 362204076Spjd :> ${.TARGET} 363204076Spjd.endif 364204076Spjd.endfor 365204076Spjd.endif 366204076Spjd 367204076Spjd# Respect configuration-specific C flags. 368204076SpjdCFLAGS+= ${CONF_CFLAGS} 369204076Spjd 370204076Spjd.if !empty(SRCS:Mvnode_if.c) 371204076SpjdCLEANFILES+= vnode_if.c 372204076Spjdvnode_if.c: ${SYSDIR}/tools/vnode_if.awk ${SYSDIR}/kern/vnode_if.src 373204076Spjd ${AWK} -f ${SYSDIR}/tools/vnode_if.awk ${SYSDIR}/kern/vnode_if.src -c 374204076Spjd.endif 375204076Spjd 376204076Spjd.if !empty(SRCS:Mvnode_if.h) 377204076SpjdCLEANFILES+= vnode_if.h vnode_if_newproto.h vnode_if_typedef.h 378204076Spjdvnode_if.h vnode_if_newproto.h vnode_if_typedef.h: ${SYSDIR}/tools/vnode_if.awk \ 379204076Spjd ${SYSDIR}/kern/vnode_if.src 380204076Spjdvnode_if.h: vnode_if_newproto.h vnode_if_typedef.h 381204076Spjd ${AWK} -f ${SYSDIR}/tools/vnode_if.awk ${SYSDIR}/kern/vnode_if.src -h 382204076Spjdvnode_if_newproto.h: 383204076Spjd ${AWK} -f ${SYSDIR}/tools/vnode_if.awk ${SYSDIR}/kern/vnode_if.src -p 384204076Spjdvnode_if_typedef.h: 385204076Spjd ${AWK} -f ${SYSDIR}/tools/vnode_if.awk ${SYSDIR}/kern/vnode_if.src -q 386204076Spjd.endif 387204076Spjd 388204076Spjd# Build _if.[ch] from _if.m, and clean them when we're done. 389204076Spjd# __MPATH defined in config.mk 390204076Spjd_MFILES=${__MPATH:T:O} 391204076Spjd_MPATH=${__MPATH:H:O:u} 392204076Spjd.PATH.m: ${_MPATH} 393204076Spjd.for _i in ${SRCS:M*_if.[ch]} 394204076Spjd_MATCH=M${_i:R:S/$/.m/} 395204076Spjd_MATCHES=${_MFILES:${_MATCH}} 396204076Spjd.if !empty(_MATCHES) 397204076SpjdCLEANFILES+= ${_i} 398204076Spjd.endif 399204076Spjd.endfor # _i 400204076Spjd.m.c: ${SYSDIR}/tools/makeobjops.awk ${OP_META} 401204076Spjd ${AWK} -f ${SYSDIR}/tools/makeobjops.awk ${.IMPSRC} -c 402204076Spjd 403204076Spjd.m.h: ${SYSDIR}/tools/makeobjops.awk ${OP_META} 404204076Spjd ${AWK} -f ${SYSDIR}/tools/makeobjops.awk ${.IMPSRC} -h 405204076Spjd 406204076Spjd.for _i in mii pccard 407204076Spjd.if !empty(SRCS:M${_i}devs.h) 408204076SpjdCLEANFILES+= ${_i}devs.h 409204076Spjd${_i}devs.h: ${SYSDIR}/tools/${_i}devs2h.awk ${SYSDIR}/dev/${_i}/${_i}devs ${OP_META} 410204076Spjd ${AWK} -f ${SYSDIR}/tools/${_i}devs2h.awk ${SYSDIR}/dev/${_i}/${_i}devs 411204076Spjd.endif 412204076Spjd.endfor # _i 413204076Spjd 414204076Spjd.if !empty(SRCS:Mbhnd_nvram_map.h) 415204076SpjdCLEANFILES+= bhnd_nvram_map.h 416204076Spjdbhnd_nvram_map.h: ${SYSDIR}/dev/bhnd/tools/nvram_map_gen.awk \ 417204076Spjd ${SYSDIR}/dev/bhnd/tools/nvram_map_gen.sh \ 418204076Spjd ${SYSDIR}/dev/bhnd/nvram/nvram_map \ 419204076Spjd ${OP_META} 420204076Spjdbhnd_nvram_map.h: ${OP_META} 421204076Spjd sh ${SYSDIR}/dev/bhnd/tools/nvram_map_gen.sh \ 422204076Spjd ${SYSDIR}/dev/bhnd/nvram/nvram_map -h 423204076Spjd.endif 424204076Spjd 425204076Spjd.if !empty(SRCS:Mbhnd_nvram_map_data.h) 426214284SpjdCLEANFILES+= bhnd_nvram_map_data.h 427214284Spjdbhnd_nvram_map_data.h: ${SYSDIR}/dev/bhnd/tools/nvram_map_gen.awk \ 428214284Spjd ${SYSDIR}/dev/bhnd/tools/nvram_map_gen.sh \ 429214284Spjd ${SYSDIR}/dev/bhnd/nvram/nvram_map \ 430214284Spjd ${OP_META} 431214284Spjdbhnd_nvram_map_data.h: ${OP_META} 432214284Spjd sh ${SYSDIR}/dev/bhnd/tools/nvram_map_gen.sh \ 433214284Spjd ${SYSDIR}/dev/bhnd/nvram/nvram_map -d 434214284Spjd.endif 435214284Spjd 436214284Spjd.if !empty(SRCS:Musbdevs.h) 437214284SpjdCLEANFILES+= usbdevs.h 438214284Spjdusbdevs.h: ${SYSDIR}/tools/usbdevs2h.awk ${SYSDIR}/dev/usb/usbdevs ${OP_META} 439214284Spjd ${AWK} -f ${SYSDIR}/tools/usbdevs2h.awk ${SYSDIR}/dev/usb/usbdevs -h 440214284Spjd.endif 441214284Spjd 442214284Spjd.if !empty(SRCS:Musbdevs_data.h) 443214284SpjdCLEANFILES+= usbdevs_data.h 444204076Spjdusbdevs_data.h: ${SYSDIR}/tools/usbdevs2h.awk ${SYSDIR}/dev/usb/usbdevs ${OP_META} 445204076Spjd ${AWK} -f ${SYSDIR}/tools/usbdevs2h.awk ${SYSDIR}/dev/usb/usbdevs -d 446204076Spjd.endif 447204076Spjd 448204076Spjd.if !empty(SRCS:Macpi_quirks.h) 449204076SpjdCLEANFILES+= acpi_quirks.h 450204076Spjdacpi_quirks.h: ${SYSDIR}/tools/acpi_quirks2h.awk ${SYSDIR}/dev/acpica/acpi_quirks ${OP_META} 451204076Spjd ${AWK} -f ${SYSDIR}/tools/acpi_quirks2h.awk ${SYSDIR}/dev/acpica/acpi_quirks 452204076Spjd.endif 453204076Spjd 454204076Spjd.if !empty(SRCS:Massym.s) 455204076SpjdCLEANFILES+= assym.s genassym.o 456204076Spjdassym.s: genassym.o 457204076Spjd.if defined(KERNBUILDDIR) 458204076Spjdgenassym.o: opt_global.h 459204076Spjd.endif 460204076Spjdassym.s: ${SYSDIR}/kern/genassym.sh ${OP_META} 461204076Spjd sh ${SYSDIR}/kern/genassym.sh genassym.o > ${.TARGET} 462204076Spjdgenassym.o: ${SYSDIR}/${MACHINE}/${MACHINE}/genassym.c 463204076Spjdgenassym.o: ${SRCS:Mopt_*.h} ${OP_META} 464204076Spjd ${CC} -c ${CFLAGS:N-fno-common} \ 465204076Spjd ${SYSDIR}/${MACHINE}/${MACHINE}/genassym.c 466204076Spjd.endif 467204076Spjd 468204076Spjdlint: ${SRCS} 469204076Spjd ${LINT} ${LINTKERNFLAGS} ${CFLAGS:M-[DILU]*} ${.ALLSRC:M*.c} 470204076Spjd 471204076Spjd.if defined(KERNBUILDDIR) 472204076Spjd${OBJS}: opt_global.h 473204076Spjd.endif 474204076Spjd 475209181SpjdCLEANDEPENDFILES+= ${_ILINKS} 476204076Spjd# .depend needs include links so we remove them only together. 477204076Spjdcleanilinks: 478204076Spjd rm -f ${_ILINKS} 479214284Spjd 480214284SpjdOBJS_DEPEND_GUESS+= ${SRCS:M*.h} 481214284Spjd 482214284Spjd.include <bsd.dep.mk> 483214284Spjd.include <bsd.clang-analyze.mk> 484204076Spjd.include <bsd.obj.mk> 485204076Spjd.include "kern.mk" 486204076Spjd