kmod.mk revision 68027
18705Sjkh# From: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91 28705Sjkh# $FreeBSD: head/sys/conf/kmod.mk 68027 2000-10-31 02:25:20Z takawata $ 38705Sjkh# 48705Sjkh# The include file <bsd.kmod.mk> handles installing Kernel Loadable Device 58705Sjkh# drivers (KLD's). 68705Sjkh# 750479Speter# 88705Sjkh# +++ variables +++ 98705Sjkh# 108705Sjkh# CLEANFILES Additional files to remove for the clean and cleandir targets. 118705Sjkh# 128705Sjkh# DISTRIBUTION Name of distribution. [bin] 138705Sjkh# 148705Sjkh# KMOD The name of the kernel module to build. 158705Sjkh# 168881Srgrimes# KMODDIR Base path for kernel modules (see kld(4)). [/boot/kernel] 178881Srgrimes# 188705Sjkh# KMODOWN KLD owner. [${BINOWN}] 198705Sjkh# 208705Sjkh# KMODGRP KLD group. [${BINGRP}] 218705Sjkh# 228705Sjkh# KMODMODE KLD mode. [${BINMODE}] 238705Sjkh# 248705Sjkh# LINKS The list of KLD links; should be full pathnames, the 258705Sjkh# linked-to file coming first, followed by the linked 268705Sjkh# file. The files are hard-linked. For example, to link 278705Sjkh# /modules/master and /modules/meister, use: 288705Sjkh# 298705Sjkh# LINKS= /modules/master /modules/meister 308705Sjkh# 318705Sjkh# KMODLOAD Command to load a kernel module [/sbin/kldload] 328705Sjkh# 338705Sjkh# KMODUNLOAD Command to unload a kernel module [/sbin/kldunload] 348705Sjkh# 358705Sjkh# NOMAN KLD does not have a manual page if set. 368705Sjkh# 378705Sjkh# PROG The name of the kernel module to build. 388705Sjkh# If not supplied, ${KMOD}.o is used. 398768Sjkh# 4015417Sjkh# SRCS List of source files 4115417Sjkh# 4215417Sjkh# SUBDIR A list of subdirectories that should be built as well. 4315417Sjkh# Each of the targets will execute the same target in the 4415417Sjkh# subdirectories. 4515417Sjkh# 4615417Sjkh# SYMLINKS Same as LINKS, except it creates symlinks and the 478705Sjkh# linked-to pathname may be relative. 488705Sjkh# 498705Sjkh# DESTDIR, DISTDIR are set by other Makefiles (e.g. bsd.own.mk) 5020484Sjkh# 518705Sjkh# MFILES Optionally a list of interfaces used by the module. 528705Sjkh# This file contains a default list of interfaces. 538705Sjkh# 5412661Speter# +++ targets +++ 558705Sjkh# 5612661Speter# distribute: 578705Sjkh# This is a variant of install, which will 5812661Speter# put the stuff into the right "distribution". 5912661Speter# 6012661Speter# install: 6112661Speter# install the program and its manual pages; if the Makefile 6214793Sjoerg# does not itself define the target install, the targets 6312661Speter# beforeinstall and afterinstall may also be used to cause 6414793Sjoerg# actions immediately before and after the install target 6512661Speter# is executed. 6614793Sjoerg# 678705Sjkh# load: 688705Sjkh# Load KLD. 6914793Sjoerg# 708705Sjkh# unload: 718705Sjkh# Unload KLD. 7212661Speter# 7312661Speter# bsd.obj.mk: clean, cleandir and obj 7412661Speter# bsd.dep.mk: cleandepend, depend and tags 7512661Speter# bsd.man.mk: maninstall 7612661Speter# 7712661Speter 7812661SpeterKMODLOAD?= /sbin/kldload 7912661SpeterKMODUNLOAD?= /sbin/kldunload 8012661Speter 8112661Speter.if !target(__initialized__) 8212661Speter__initialized__: 8312661Speter.if exists(${.CURDIR}/../Makefile.inc) 8412661Speter.include "${.CURDIR}/../Makefile.inc" 8512661Speter.endif 8612661Speter.endif 8712661Speter 8812661Speter.SUFFIXES: .out .o .c .cc .cxx .C .y .l .s .S 8920484Sjkh 9020484SjkhCFLAGS+= ${COPTS} -D_KERNEL ${CWARNFLAGS} 9120484SjkhCFLAGS+= -DKLD_MODULE 9220484Sjkh 9320484Sjkh# Don't use any standard or source-relative include directories. 9420484Sjkh# Since -nostdinc will annull any previous -I paths, we repeat all 9520484Sjkh# such paths after -nostdinc. It doesn't seem to be possible to 9620484Sjkh# add to the front of `make' variable. 9720484Sjkh_ICFLAGS:= ${CFLAGS:M-I*} 9820484SjkhCFLAGS+= -nostdinc -I- ${INCLMAGIC} ${_ICFLAGS} 9920484Sjkh 10020484Sjkh# Add -I paths for system headers. Individual KLD makefiles don't 10120484Sjkh# need any -I paths for this. Similar defaults for .PATH can't be 10220484Sjkh# set because there are no standard paths for non-headers. 10320484SjkhCFLAGS+= -I. -I@ 1048705Sjkh 10512661Speter# Add a -I path to standard headers like <stddef.h>. Use a relative 1068751Sjkh# path to src/include if possible. If the @ symlink hasn't been built 10734394Sjkh# yet, then we can't tell if the relative path exists. Add both the 1088751Sjkh# potential relative path and an absolute path in that case. 1098751Sjkh.if exists(@) 1108751Sjkh.if exists(@/../include) 1118705SjkhCFLAGS+= -I@/../include 1128705Sjkh.else 1139202SrgrimesCFLAGS+= -I${DESTDIR}/usr/include 1149202Srgrimes.endif 1159202Srgrimes.else # !@ 11614793SjoergCFLAGS+= -I@/../include -I${DESTDIR}/usr/include 1178705Sjkh.endif # @ 1188705Sjkh 1198705SjkhCFLAGS+= ${DEBUG_FLAGS} 1208705Sjkh 1218705Sjkh.if ${OBJFORMAT} == elf 1228705SjkhCLEANFILES+= setdef0.c setdef1.c setdefs.h 1238756SjkhCLEANFILES+= setdef0.o setdef1.o 1248705Sjkh.endif 1258705Sjkh 1268705SjkhOBJS+= ${SRCS:N*.h:R:S/$/.o/g} 1278705Sjkh 1288705Sjkh.if !defined(PROG) 1298705SjkhPROG= ${KMOD}.ko 1308705Sjkh.endif 1319202Srgrimes 1328705Sjkh${PROG}: ${KMOD}.kld 1338705Sjkh.if ${OBJFORMAT} == elf 1348705Sjkh gensetdefs ${KMOD}.kld 1358705Sjkh ${CC} ${CFLAGS} -c setdef0.c 1368705Sjkh ${CC} ${CFLAGS} -c setdef1.c 1378705Sjkh ${LD} -Bshareable ${LDFLAGS} -o ${.TARGET} setdef0.o ${KMOD}.kld setdef1.o 13820484Sjkh.else 13920484Sjkh ${LD} -Bshareable ${LDFLAGS} -o ${.TARGET} ${KMOD}.kld 14020484Sjkh.endif 14120484Sjkh 14220484Sjkh${KMOD}.kld: ${OBJS} 14320484Sjkh ${LD} ${LDFLAGS} -r -o ${.TARGET} ${OBJS} 1448705Sjkh 1458705Sjkh.if !defined(NOMAN) 1468705Sjkh.include <bsd.man.mk> 14720484Sjkh.if !defined(_MANPAGES) || empty(_MANPAGES) 14820484SjkhMAN1= ${KMOD}.4 14920484Sjkh.endif 15020484Sjkh 15120484Sjkh.elif !target(maninstall) 15220484Sjkhmaninstall: _SUBDIR 1538705Sjkhall-man: 1548705Sjkh.endif 1558705Sjkh 1568705Sjkh_ILINKS=@ machine 1578705Sjkh 1588705Sjkh.MAIN: all 15920484Sjkhall: objwarn ${PROG} all-man _SUBDIR 16020484Sjkh 16120484Sjkhbeforedepend ${OBJS}: ${_ILINKS} 16228391Sjkh 16328391Sjkh# Search for kernel source tree in standard places. 16420484Sjkh.for _dir in ${.CURDIR}/../.. ${.CURDIR}/../../.. /sys /usr/src/sys 16528391Sjkh.if !defined(SYSDIR) && exists(${_dir}/kern/) 16620484SjkhSYSDIR= ${_dir} 1679202Srgrimes.endif 1688705Sjkh.endfor 1698705Sjkh.if !defined(SYSDIR) || !exists(${SYSDIR}/kern/) 17012661Speter.error "can't find kernel source tree" 17141162Sjkh.endif 1728705Sjkh 1738705Sjkh${_ILINKS}: 1748705Sjkh @case ${.TARGET} in \ 1758705Sjkh machine) \ 1768705Sjkh path=${SYSDIR}/${MACHINE_ARCH}/include ;; \ 1778705Sjkh @) \ 1788705Sjkh path=${SYSDIR} ;; \ 1799202Srgrimes esac ; \ 1809202Srgrimes path=`(cd $$path && /bin/pwd)` ; \ 18115242Sjkh ${ECHO} ${.TARGET} "->" $$path ; \ 18212661Speter ln -s $$path ${.TARGET} 18312661Speter 18412661SpeterCLEANFILES+= ${PROG} ${KMOD}.kld ${OBJS} ${_ILINKS} symb.tmp tmp.o 18512661Speter 18612661Speter.if !target(install) 1879202Srgrimes.if !target(beforeinstall) 18812661Speterbeforeinstall: 1898705Sjkh.endif 1908705Sjkh.if !target(afterinstall) 1918705Sjkhafterinstall: 19215242Sjkh.endif 1938705Sjkh 1948705Sjkh_INSTALLFLAGS:= ${INSTALLFLAGS} 1958705Sjkh.for ie in ${INSTALLFLAGS_EDIT} 1969202Srgrimes_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 1978705Sjkh.endfor 1988705Sjkh 1998705Sjkhrealinstall: _SUBDIR 2008705Sjkh ${INSTALL} ${COPY} -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \ 2018705Sjkh ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${KMODDIR} 2028705Sjkh.if defined(LINKS) && !empty(LINKS) 2038751Sjkh @set ${LINKS}; \ 2048751Sjkh while test $$# -ge 2; do \ 2058751Sjkh l=${DESTDIR}$$1; \ 20614793Sjoerg shift; \ 2078705Sjkh t=${DESTDIR}$$1; \ 2088751Sjkh shift; \ 2098751Sjkh ${ECHO} $$t -\> $$l; \ 21014793Sjoerg ln -f $$l $$t; \ 2118751Sjkh done; true 2128751Sjkh.endif 2138705Sjkh.if defined(SYMLINKS) && !empty(SYMLINKS) 21412661Speter @set ${SYMLINKS}; \ 21512661Speter while test $$# -ge 2; do \ 21641162Sjkh l=$$1; \ 2178705Sjkh shift; \ 2188705Sjkh t=${DESTDIR}$$1; \ 21912661Speter shift; \ 22012661Speter ${ECHO} $$t -\> $$l; \ 22115242Sjkh ln -fs $$l $$t; \ 2228705Sjkh done; true 22341162Sjkh.endif 22420484Sjkh 22541162Sjkhinstall: afterinstall _SUBDIR 2268705Sjkh.if !defined(NOMAN) 2278837Sjkhafterinstall: realinstall maninstall 22823751Sjkh.else 2299202Srgrimesafterinstall: realinstall 23022722Sjkh.endif 2319202Srgrimesrealinstall: beforeinstall 23241162Sjkh.endif 2338705Sjkh 2348705SjkhDISTRIBUTION?= bin 2358705Sjkh.if !target(distribute) 23641162Sjkhdistribute: _SUBDIR 23741162Sjkh.for dist in ${DISTRIBUTION} 23841162Sjkh cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies 2398705Sjkh.endfor 24041162Sjkh.endif 24141162Sjkh 24241162Sjkh.if !target(load) 24312661Speterload: ${PROG} 24412661Speter ${KMODLOAD} -v ./${KMOD}.ko 24523751Sjkh.endif 2468705Sjkh 24741162Sjkh.if !target(unload) 24841162Sjkhunload: 24941162Sjkh ${KMODUNLOAD} -v ${KMOD} 25041162Sjkh.endif 25141162Sjkh 2528705Sjkh.for _src in ${SRCS:Mopt_*.h} 2539202SrgrimesCLEANFILES+= ${_src} 2549202Srgrimes.if !target(${_src}) 25515242Sjkh${_src}: 2568705Sjkh touch ${.TARGET} 2578705Sjkh.endif 25822721Sjkh.endfor 25922721Sjkh 26041162SjkhMFILES?= kern/bus_if.m kern/device_if.m dev/iicbus/iicbb_if.m \ 26122721Sjkh dev/iicbus/iicbus_if.m isa/isa_if.m dev/mii/miibus_if.m \ 26222721Sjkh dev/pccard/card_if.m dev/pccard/power_if.m pci/pci_if.m pci/pcib_if.m \ 26322721Sjkh dev/ppbus/ppbus_if.m dev/smbus/smbus_if.m dev/usb/usb_if.m 26422721Sjkh 26522721Sjkh.for _srcsrc in ${MFILES} 26622721Sjkh.for _ext in c h 26722721Sjkh.for _src in ${SRCS:M${_srcsrc:T:R}.${_ext}} 26822721SjkhCLEANFILES+= ${_src} 26922721Sjkh.if !target(${_src}) 27022721Sjkh${_src}: @ 27122721Sjkh.if exists(@) 27222721Sjkh${_src}: @/kern/makeobjops.pl @/${_srcsrc} 27322721Sjkh.endif 27422721Sjkh perl @/kern/makeobjops.pl -${_ext} @/${_srcsrc} 27522721Sjkh.endif 27622721Sjkh.endfor # _src 27722721Sjkh.endfor # _ext 27822721Sjkh.endfor # _srcsrc 27922721Sjkh 28022721Sjkh.for _ext in c h 28122721Sjkh.if ${SRCS:Mvnode_if.${_ext}} != "" 28222721SjkhCLEANFILES+= vnode_if.${_ext} 28322721Sjkhvnode_if.${_ext}: @ 28422721Sjkh.if exists(@) 28522721Sjkhvnode_if.${_ext}: @/kern/vnode_if.pl @/kern/vnode_if.src 28622721Sjkh.endif 28722721Sjkh perl @/kern/vnode_if.pl -${_ext} @/kern/vnode_if.src 28822721Sjkh.endif 28922721Sjkh.endfor 29043255Sjkh 29143685Sjkhregress: 29222721Sjkh 29322722Sjkh.include <bsd.dep.mk> 29426560Sjkh 29522721Sjkh.if !exists(${DEPENDFILE}) 29622721Sjkh${OBJS}: ${SRCS:M*.h} 29722721Sjkh.endif 29822721Sjkh 29922721Sjkh.include <bsd.obj.mk> 30022721Sjkh 30122721Sjkh.include <bsd.kern.mk> 30222721Sjkh