kmod.mk revision 163332
1139823Simp# From: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91 21541Srgrimes# $FreeBSD: head/sys/conf/kmod.mk 163332 2006-10-13 22:28:14Z ru $ 31541Srgrimes# 41541Srgrimes# The include file <bsd.kmod.mk> handles building and installing loadable 51541Srgrimes# kernel modules. 61541Srgrimes# 71541Srgrimes# 81541Srgrimes# +++ variables +++ 91541Srgrimes# 101541Srgrimes# CLEANFILES Additional files to remove for the clean and cleandir targets. 111541Srgrimes# 121541Srgrimes# EXPORT_SYMS A list of symbols that should be exported from the module, 131541Srgrimes# or the name of a file containing a list of symbols, or YES 141541Srgrimes# to export all symbols. If not defined, no symbols are 151541Srgrimes# exported. 161541Srgrimes# 171541Srgrimes# KMOD The name of the kernel module to build. 181541Srgrimes# 191541Srgrimes# KMODDIR Base path for kernel modules (see kld(4)). [/boot/kernel] 201541Srgrimes# 211541Srgrimes# KMODOWN Module file owner. [${BINOWN}] 221541Srgrimes# 231541Srgrimes# KMODGRP Module file group. [${BINGRP}] 241541Srgrimes# 251541Srgrimes# KMODMODE Module file mode. [${BINMODE}] 261541Srgrimes# 271541Srgrimes# KMODLOAD Command to load a kernel module [/sbin/kldload] 281541Srgrimes# 291541Srgrimes# KMODUNLOAD Command to unload a kernel module [/sbin/kldunload] 3050477Speter# 311541Srgrimes# MFILES Optionally a list of interfaces used by the module. 321541Srgrimes# This file contains a default list of interfaces. 332168Spaul# 344507Sbde# PROG The name of the kernel module to build. 352168Spaul# If not supplied, ${KMOD}.ko is used. 36104355Smike# 37104355Smike# SRCS List of source files. 3897024Siedowse# 3979103Sbrooks# FIRMWS List of firmware images in format filename:shortname:version 4097024Siedowse# 4179103Sbrooks# DESTDIR The tree where the module gets installed. [not set] 42104355Smike# 431541Srgrimes# +++ targets +++ 4434750Speter# 4572093Sasmodai# install: 4634750Speter# install the kernel module; if the Makefile 4755205Speter# does not itself define the target install, the targets 4834750Speter# beforeinstall and afterinstall may also be used to cause 4934750Speter# actions immediately before and after the install target 5034750Speter# is executed. 5179103Sbrooks# 52104355Smike# load: 5379103Sbrooks# Load a module. 5434750Speter# 5579103Sbrooks# unload: 5679103Sbrooks# Unload a module. 5779103Sbrooks# 58104355Smike 59104355SmikeAWK?= awk 60104355SmikeKMODLOAD?= /sbin/kldload 61121816SbrooksKMODUNLOAD?= /sbin/kldunload 62104355SmikeOBJCOPY?= objcopy 63104355Smike 64104355Smike.if defined(KMODDEPS) 6579103Sbrooks.error "Do not use KMODDEPS on 5.0+; use MODULE_VERSION/MODULE_DEPEND" 6679103Sbrooks.endif 6779103Sbrooks 6879103Sbrooks.include <bsd.init.mk> 6979103Sbrooks 7079103Sbrooks.SUFFIXES: .out .o .c .cc .cxx .C .y .l .s .S 7179103Sbrooks 7279103Sbrooks.if ${CC} == "icc" 7379103SbrooksCFLAGS:= ${CFLAGS:C/(-x[^M^K^W]+)[MKW]+|-x[MKW]+/\1/} 7479103Sbrooks.else 7579103Sbrooks. if !empty(CFLAGS:M-O[23s]) && empty(CFLAGS:M-fno-strict-aliasing) 7619079SfennerCFLAGS+= -fno-strict-aliasing 7719079Sfenner. endif 7819079SfennerWERROR?= -Werror 799457Sjoerg.endif 809457SjoergCFLAGS+= ${WERROR} 819457SjoergCFLAGS+= -D_KERNEL 829457SjoergCFLAGS+= -DKLD_MODULE 839457Sjoerg 849457Sjoerg# Don't use any standard or source-relative include directories. 85128871Sandre.if ${CC} == "icc" 8617352SwollmanNOSTDINC= -X 8717352Swollman.else 88134609SbrooksC_DIALECT= -std=c99 899457SjoergNOSTDINC= -nostdinc 909457Sjoerg.endif 919457SjoergCFLAGS+= ${C_DIALECT} 929457SjoergCFLAGS:= ${CFLAGS:N-I*} ${NOSTDINC} -I- ${INCLMAGIC} ${CFLAGS:M-I*} 939457Sjoerg.if defined(KERNBUILDDIR) 949457SjoergCFLAGS+= -DHAVE_KERNEL_OPTION_HEADERS -include ${KERNBUILDDIR}/opt_global.h 959457Sjoerg.endif 969457Sjoerg 979457Sjoerg# Add -I paths for system headers. Individual module makefiles don't 989457Sjoerg# need any -I paths for this. Similar defaults for .PATH can't be 999457Sjoerg# set because there are no standard paths for non-headers. 1009457SjoergCFLAGS+= -I. -I@ 1019457Sjoerg 1029457Sjoerg# Add -I path for altq headers as they are included via net/if_var.h 1039457Sjoerg# for example. 104162070SandreCFLAGS+= -I@/contrib/altq 105142501Sbrooks 10616287Sgpalmer.if ${CC} != "icc" 1079457SjoergCFLAGS+= -finline-limit=${INLINE_LIMIT} 1089457SjoergCFLAGS+= --param inline-unit-growth=100 109148894SrwatsonCFLAGS+= --param large-function-growth=1000 110148886Srwatson.endif 111148886Srwatson 112148886Srwatson# Disallow common variables, and if we end up with commons from 113148886Srwatson# somewhere unexpected, allocate storage for them in the module itself. 114148886Srwatson.if ${CC} != "icc" 115148886SrwatsonCFLAGS+= -fno-common 116148886Srwatson.endif 117148886SrwatsonLDFLAGS+= -d -warn-common 118148886Srwatson 119148886SrwatsonCFLAGS+= ${DEBUG_FLAGS} 120148886Srwatson.if ${MACHINE_ARCH} == amd64 121148886SrwatsonCFLAGS+= -fno-omit-frame-pointer 122148894Srwatson.endif 123148894Srwatson 124148894Srwatson.if ${MACHINE_ARCH} == "powerpc" 125148894SrwatsonCFLAGS+= -mlongcall -fno-omit-frame-pointer 126148894Srwatson.endif 127148894Srwatson 128148894Srwatson.if defined(FIRMWS) 129148894Srwatson.if !exists(@) 130148886Srwatson${KMOD:S/$/.c/}: @ 131148894Srwatson.else 132148894Srwatson${KMOD:S/$/.c/}: @/tools/fw_stub.awk 133148894Srwatson.endif 134148894Srwatson ${AWK} -f @/tools/fw_stub.awk ${FIRMWS} -m${KMOD} -c${KMOD:S/$/.c/g} 135148894Srwatson 136148894SrwatsonSRCS+= ${KMOD:S/$/.c/} 137148894SrwatsonCLEANFILES+= ${KMOD:S/$/.c/} 138148894Srwatson 139148894Srwatson.for _firmw in ${FIRMWS} 140148894Srwatson${_firmw:C/\:.*$/.fwo/}: ${_firmw:C/\:.*$//} 141148894Srwatson @${ECHO} ${_firmw:C/\:.*$//} ${.ALLSRC:M*${_firmw:C/\:.*$//}} 142148894Srwatson @if [ -e ${_firmw:C/\:.*$//} ]; then \ 1431541Srgrimes ${LD} -b binary ${LDFLAGS} -r -d -o ${.TARGET} \ 1441541Srgrimes ${_firmw:C/\:.*$//}; \ 1451541Srgrimes else \ 1463274Swollman ln -s ${.ALLSRC:M*${_firmw:C/\:.*$//}} ${_firmw:C/\:.*$//}; \ 147148894Srwatson ${LD} -b binary ${LDFLAGS} -r -d -o ${.TARGET} \ 148150789Sglebius ${_firmw:C/\:.*$//}; \ 149148894Srwatson rm ${_firmw:C/\:.*$//}; \ 150148894Srwatson fi 151148894Srwatson 152148894SrwatsonOBJS+= ${_firmw:C/\:.*$/.fwo/} 15387902Sluigi.endfor 154148886Srwatson.endif 155148886Srwatson 156148894SrwatsonOBJS+= ${SRCS:N*.h:R:S/$/.o/g} 157148886Srwatson 158148886Srwatson.if !defined(PROG) 159148886SrwatsonPROG= ${KMOD}.ko 160148886Srwatson.endif 161148886Srwatson 162148886Srwatson.if !defined(DEBUG_FLAGS) 1631541SrgrimesFULLPROG= ${PROG} 1641541Srgrimes.else 165148886SrwatsonFULLPROG= ${PROG}.debug 166150789Sglebius${PROG}: ${FULLPROG} ${PROG}.symbols 1671541Srgrimes ${OBJCOPY} --strip-debug --add-gnu-debuglink=${PROG}.symbols\ 168106925Ssam ${FULLPROG} ${.TARGET} 169128871Sandre${PROG}.symbols: ${FULLPROG} 170128871Sandre ${OBJCOPY} --only-keep-debug ${FULLPROG} ${.TARGET} 171128871Sandre.endif 172128871Sandre 173128871Sandre.if ${MACHINE_ARCH} != amd64 174128871Sandre${FULLPROG}: ${KMOD}.kld 175128871Sandre ${LD} -Bshareable ${LDFLAGS} -o ${.TARGET} ${KMOD}.kld 176106925Ssam.if !defined(DEBUG_FLAGS) 177106925Ssam ${OBJCOPY} --strip-debug ${.TARGET} 178106925Ssam.endif 179106925Ssam.endif 180106925Ssam 181106925SsamEXPORT_SYMS?= NO 182106925Ssam.if ${EXPORT_SYMS} != YES 183162070SandreCLEANFILES+= export_syms 184162070Sandre.endif 185162070Sandre 186162070Sandre.if ${MACHINE_ARCH} != amd64 187162070Sandre${KMOD}.kld: ${OBJS} 188162070Sandre.else 189162070Sandre${FULLPROG}: ${OBJS} 190169207Syar.endif 191162070Sandre ${LD} ${LDFLAGS} -r -d -o ${.TARGET} ${OBJS} 192162070Sandre.if defined(EXPORT_SYMS) 193162070Sandre.if ${EXPORT_SYMS} != YES 194162070Sandre.if ${EXPORT_SYMS} == NO 195162070Sandre :> export_syms 196162070Sandre.elif !exists(${.CURDIR}/${EXPORT_SYMS}) 197162070Sandre echo ${EXPORT_SYMS} > export_syms 198169207Syar.else 199162070Sandre grep -v '^#' < ${EXPORT_SYMS} > export_syms 200162070Sandre.endif 20183636Sjlemon awk -f ${SYSDIR}/conf/kmod_syms.awk ${.TARGET} \ 20283636Sjlemon export_syms | xargs -J% ${OBJCOPY} % ${.TARGET} 20383636Sjlemon.endif 204106925Ssam.endif 205106925Ssam.if !defined(DEBUG_FLAGS) && ${MACHINE_ARCH} == amd64 206106925Ssam ${OBJCOPY} --strip-debug ${.TARGET} 207128113Sru.endif 208155051Sglebius 209162084Sandre_ILINKS=@ machine 210162084Sandre.if ${MACHINE} != ${MACHINE_ARCH} 21183624Sjlemon_ILINKS+=${MACHINE_ARCH} 21283636Sjlemon.endif 213162084Sandre 21483636Sjlemonall: objwarn ${PROG} 2151541Srgrimes 2161541Srgrimesbeforedepend: ${_ILINKS} 2171541Srgrimes 2181541Srgrimes# Ensure that the links exist without depending on it when it exists which 2191541Srgrimes# causes all the modules to be rebuilt when the directory pointed to changes. 2201541Srgrimes.for _link in ${_ILINKS} 2211541Srgrimes.if !exists(${.OBJDIR}/${_link}) 2221541Srgrimes${OBJS}: ${_link} 2231541Srgrimes.endif 22472093Sasmodai.endfor 2251541Srgrimes 2261541Srgrimes# Search for kernel source tree in standard places. 2271541Srgrimes.for _dir in ${.CURDIR}/../.. ${.CURDIR}/../../.. /sys /usr/src/sys 2281541Srgrimes.if !defined(SYSDIR) && exists(${_dir}/kern/) 2291541SrgrimesSYSDIR= ${_dir} 2301541Srgrimes.endif 2311541Srgrimes.endfor 2321541Srgrimes.if !defined(SYSDIR) || !exists(${SYSDIR}/kern/) 2331541Srgrimes.error "can't find kernel source tree" 2341541Srgrimes.endif 2351541Srgrimes 2361541Srgrimes${_ILINKS}: 2371541Srgrimes @case ${.TARGET} in \ 23872093Sasmodai ${MACHINE_ARCH}) \ 2391541Srgrimes path=${SYSDIR}/${MACHINE_ARCH}/include ;; \ 2401541Srgrimes machine) \ 2411541Srgrimes path=${SYSDIR}/${MACHINE}/include ;; \ 2421541Srgrimes @) \ 2431541Srgrimes path=${SYSDIR} ;; \ 2441541Srgrimes esac ; \ 2451541Srgrimes path=`(cd $$path && /bin/pwd)` ; \ 2461541Srgrimes ${ECHO} ${.TARGET} "->" $$path ; \ 24721666Swollman ln -sf $$path ${.TARGET} 24821666Swollman 24921666SwollmanCLEANFILES+= ${PROG} ${KMOD}.kld ${OBJS} 25021666Swollman 25121666Swollman.if defined(DEBUG_FLAGS) 25272093SasmodaiCLEANFILES+= ${FULLPROG} ${PROG}.symbols 25321666Swollman.endif 25421666Swollman 25521666Swollman.if !target(install) 25621666Swollman 25721666Swollman_INSTALLFLAGS:= ${INSTALLFLAGS} 25821666Swollman.for ie in ${INSTALLFLAGS_EDIT} 25921666Swollman_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 26089498Sru.endfor 26189498Sru 26289498Sru.if !target(realinstall) 26389498Srurealinstall: _kmodinstall 26489498Sru.ORDER: beforeinstall _kmodinstall 26589498Sru_kmodinstall: 26689498Sru ${INSTALL} -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \ 26789498Sru ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${KMODDIR} 26889498Sru.if defined(DEBUG_FLAGS) && !defined(INSTALL_NODEBUG) 26989498Sru ${INSTALL} -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \ 27089498Sru ${_INSTALLFLAGS} ${PROG}.symbols ${DESTDIR}${KMODDIR} 27189498Sru.endif 27289498Sru 27389498Sru.include <bsd.links.mk> 27489498Sru 2751541Srgrimes.if !defined(NO_XREF) 2761541Srgrimesafterinstall: _kldxref 2771541Srgrimes.ORDER: realinstall _kldxref 2781541Srgrimes.ORDER: _installlinks _kldxref 2791541Srgrimes_kldxref: 2801541Srgrimes @if type kldxref >/dev/null 2>&1; then \ 2811541Srgrimes ${ECHO} kldxref ${DESTDIR}${KMODDIR}; \ 2821541Srgrimes kldxref ${DESTDIR}${KMODDIR}; \ 2831541Srgrimes fi 2841541Srgrimes.endif 2851541Srgrimes.endif # !target(realinstall) 28644144Sphk 28785079Sjlemon.endif # !target(install) 2881541Srgrimes 2891941Sdg.if !target(load) 2905184Swollmanload: ${PROG} 29125434Speter ${KMODLOAD} -v ${.OBJDIR}/${PROG} 2921541Srgrimes.endif 29383624Sjlemon 2941541Srgrimes.if !target(unload) 2951541Srgrimesunload: 2961541Srgrimes ${KMODUNLOAD} -v ${PROG} 2971541Srgrimes.endif 298102052Ssobomax 299102052Ssobomax.if defined(KERNBUILDDIR) 3001541Srgrimes.PATH: ${KERNBUILDDIR} 3011941SdgCFLAGS+= -I${KERNBUILDDIR} 3025187Sdg.for _src in ${SRCS:Mopt_*.h} 30325434SpeterCLEANFILES+= ${_src} 3041541Srgrimes.if !target(${_src}) 30583624Sjlemon${_src}: 30683624Sjlemon ln -sf ${KERNBUILDDIR}/${_src} ${.TARGET} 30785079Sjlemon.endif 3081541Srgrimes.endfor 3091541Srgrimes.else 31032491Swollman.for _src in ${SRCS:Mopt_*.h} 31132491SwollmanCLEANFILES+= ${_src} 31232491Swollman.if !target(${_src}) 31332491Swollman${_src}: 31432491Swollman :> ${.TARGET} 3151541Srgrimes.endif 3161541Srgrimes.endfor 3171541Srgrimes.endif 3181541Srgrimes 3191541SrgrimesMFILES?= dev/acpica/acpi_if.m dev/ata/ata_if.m dev/eisa/eisa_if.m \ 3201541Srgrimes dev/iicbus/iicbb_if.m dev/iicbus/iicbus_if.m \ 3211541Srgrimes dev/mii/miibus_if.m dev/ofw/ofw_bus_if.m \ 32225434Speter dev/pccard/card_if.m dev/pccard/power_if.m dev/pci/pci_if.m \ 32325434Speter dev/pci/pcib_if.m dev/ppbus/ppbus_if.m dev/smbus/smbus_if.m \ 32425434Speter dev/sound/pcm/ac97_if.m dev/sound/pcm/channel_if.m \ 32525434Speter dev/sound/pcm/feeder_if.m dev/sound/pcm/mixer_if.m \ 32625434Speter dev/sound/midi/mpu_if.m dev/sound/midi/mpufoi_if.m \ 32725434Speter dev/sound/midi/synth_if.m dev/usb/usb_if.m isa/isa_if.m \ 32825434Speter kern/bus_if.m kern/cpufreq_if.m kern/device_if.m kern/serdev_if.m \ 32925434Speter libkern/iconv_converter_if.m opencrypto/crypto_if.m \ 33025434Speter pc98/pc98/canbus_if.m pci/agp_if.m 33148021Sphk 332146986Sthompsa.for _srcsrc in ${MFILES} 333146986Sthompsa.for _ext in c h 334146986Sthompsa.for _src in ${SRCS:M${_srcsrc:T:R}.${_ext}} 335146986SthompsaCLEANFILES+= ${_src} 336146986Sthompsa.if !target(${_src}) 337146986Sthompsa.if !exists(@) 338146986Sthompsa${_src}: @ 33948021Sphk.else 34048021Sphk${_src}: @/tools/makeobjops.awk @/${_srcsrc} 34148589Sbde.endif 34248021Sphk ${AWK} -f @/tools/makeobjops.awk @/${_srcsrc} -${_ext} 34348589Sbde.endif 34448021Sphk.endfor # _src 34548021Sphk.endfor # _ext 34648589Sbde.endfor # _srcsrc 34748021Sphk 34848589Sbde.if !empty(SRCS:Mvnode_if.c) 34948589SbdeCLEANFILES+= vnode_if.c 35048021Sphk.if !exists(@) 35148021Sphkvnode_if.c: @ 3521541Srgrimes.else 3531541Srgrimesvnode_if.c: @/tools/vnode_if.awk @/kern/vnode_if.src 3541541Srgrimes.endif 3551541Srgrimes ${AWK} -f @/tools/vnode_if.awk @/kern/vnode_if.src -c 3561541Srgrimes.endif 3571541Srgrimes 3581541Srgrimes.if !empty(SRCS:Mvnode_if.h) 3591541SrgrimesCLEANFILES+= vnode_if.h vnode_if_newproto.h vnode_if_typedef.h 3601541Srgrimes.if !exists(@) 3611541Srgrimesvnode_if.h vnode_if_newproto.h vnode_if_typedef.h: @ 3621541Srgrimes.else 3631541Srgrimesvnode_if.h vnode_if_newproto.h vnode_if_typedef.h: @/tools/vnode_if.awk \ 3641541Srgrimes @/kern/vnode_if.src 3651541Srgrimes.endif 3661541Srgrimesvnode_if.h: vnode_if_newproto.h vnode_if_typedef.h 3671541Srgrimes ${AWK} -f @/tools/vnode_if.awk @/kern/vnode_if.src -h 368155224Spsvnode_if_newproto.h: 369155224Sps ${AWK} -f @/tools/vnode_if.awk @/kern/vnode_if.src -p 370155224Spsvnode_if_typedef.h: 371155224Sps ${AWK} -f @/tools/vnode_if.awk @/kern/vnode_if.src -q 372155224Sps.endif 373155224Sps 374155224Sps.for _i in mii pccard 375155224Sps.if !empty(SRCS:M${_i}devs.h) 376155224SpsCLEANFILES+= ${_i}devs.h 37752904Sshin.if !exists(@) 37852904Sshin${_i}devs.h: @ 379159781Smlaier.else 380159781Smlaier${_i}devs.h: @/tools/${_i}devs2h.awk @/dev/${_i}/${_i}devs 381159781Smlaier.endif 382159781Smlaier ${AWK} -f @/tools/${_i}devs2h.awk @/dev/${_i}/${_i}devs 383159781Smlaier.endif 384159781Smlaier.endfor # _i 385159781Smlaier 386159781Smlaier.if !empty(SRCS:Musbdevs.h) 387159781SmlaierCLEANFILES+= usbdevs.h 388159781Smlaier.if !exists(@) 389159781Smlaierusbdevs.h: @ 390159781Smlaier.else 391159781Smlaierusbdevs.h: @/tools/usbdevs2h.awk @/dev/usb/usbdevs 392159781Smlaier.endif 393159781Smlaier ${AWK} -f @/tools/usbdevs2h.awk @/dev/usb/usbdevs -h 394159781Smlaier.endif 395159781Smlaier 396159781Smlaier.if !empty(SRCS:Musbdevs_data.h) 397159781SmlaierCLEANFILES+= usbdevs_data.h 398159781Smlaier.if !exists(@) 399159781Smlaierusbdevs_data.h: @ 400159781Smlaier.else 401159781Smlaierusbdevs_data.h: @/tools/usbdevs2h.awk @/dev/usb/usbdevs 402159781Smlaier.endif 403159781Smlaier ${AWK} -f @/tools/usbdevs2h.awk @/dev/usb/usbdevs -d 404159781Smlaier.endif 405159781Smlaier 406159781Smlaier.if !empty(SRCS:Macpi_quirks.h) 407159781SmlaierCLEANFILES+= acpi_quirks.h 408159781Smlaier.if !exists(@) 409159781Smlaieracpi_quirks.h: @ 41052904Sshin.else 41152904Sshinacpi_quirks.h: @/tools/acpi_quirks2h.awk @/dev/acpica/acpi_quirks 41252904Sshin.endif 41352904Sshin ${AWK} -f @/tools/acpi_quirks2h.awk @/dev/acpica/acpi_quirks 41452904Sshin.endif 41552904Sshin 41652904Sshin.if !empty(SRCS:Massym.s) 41752904SshinCLEANFILES+= assym.s genassym.o 41852904Sshinassym.s: genassym.o 41952904Sshin.if !exists(@) 42052904Sshinassym.s: @ 421104355Smike.else 422104355Smikeassym.s: @/kern/genassym.sh 42355205Speter.endif 42430354Sphk sh @/kern/genassym.sh genassym.o > ${.TARGET} 42530354Sphk.if exists(@) 42630354Sphkgenassym.o: @/${MACHINE_ARCH}/${MACHINE_ARCH}/genassym.c 42730354Sphk.endif 42830354Sphkgenassym.o: @ machine ${SRCS:Mopt_*.h} 42930354Sphk ${CC} -c ${CFLAGS:N-fno-common} \ 43055205Speter @/${MACHINE_ARCH}/${MACHINE_ARCH}/genassym.c 43152904Sshin.endif 432104355Smike 433104360Smikelint: ${SRCS} 43452904Sshin ${LINT} ${LINTKERNFLAGS} ${CFLAGS:M-[DILU]*} ${.ALLSRC:M*.c} 43552904Sshin 43652904Sshin.include <bsd.dep.mk> 437104360Smike 438104360Smikecleandepend: cleanilinks 439104360Smike# .depend needs include links so we remove them only together. 440104360Smikecleanilinks: 44152904Sshin rm -f ${_ILINKS} 44252904Sshin 44352904Sshin.if !exists(${.OBJDIR}/${DEPENDFILE}) 44455205Speter${OBJS}: ${SRCS:M*.h} 44583366Sjulian.endif 44648589Sbde 44748589Sbde.include <bsd.obj.mk> 44821259Swollman.include "kern.mk" 4491541Srgrimes