1 # $NetBSD: bsd.kmodule.mk,v 1.3.4.2 2008/05/18 12:31:18 yamt Exp $ 2 3 .include <bsd.init.mk> 4 .include <bsd.klinks.mk> 5 6 ##### Basic targets 7 clean: cleankmod 8 realinstall: kmodinstall 9 10 KERN= $S/kern 11 12 CFLAGS+= -ffreestanding -fno-zero-initialized-in-bss ${COPTS} 13 CPPFLAGS+= -nostdinc -I. -I${.CURDIR} -isystem $S -isystem $S/arch 14 CPPFLAGS+= -isystem ${S}/../common/include 15 CPPFLAGS+= -D_KERNEL -D_LKM -D_MODULE 16 17 # XXX until the kernel is fixed again... 18 .if ${HAVE_GCC} == 4 19 CFLAGS+= -fno-strict-aliasing -Wno-pointer-sign 20 .endif 21 22 _YKMSRCS= ${SRCS:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}} 23 DPSRCS+= ${_YKMSRCS} 24 CLEANFILES+= ${_YKMSRCS} 25 CLEANFILES+= tmp.o 26 27 .if \ 28 ${MACHINE_CPU} == "arm" || \ 29 ${MACHINE_CPU} == "hppa" || \ 30 ${MACHINE_CPU} == "powerpc" 31 CLEANFILES+= ${KMOD}_tramp.o ${KMOD}_tramp.S tmp.S ${KMOD}_tmp.o 32 .endif 33 34 OBJS+= ${SRCS:N*.h:N*.sh:R:S/$/.o/g} 35 PROG?= ${KMOD}.kmod 36 37 ##### Build rules 38 realall: ${PROG} 39 40 ${OBJS} ${LOBJS}: ${DPSRCS} 41 42 .if \ 43 ${MACHINE_CPU} == "arm" || \ 44 ${MACHINE_CPU} == "hppa" || \ 45 ${MACHINE_CPU} == "powerpc" 46 ${KMOD}_tmp.o: ${OBJS} ${DPADD} 47 ${_MKTARGET_COMPILE} 48 ${LD} -r -d -o tmp.o ${OBJS} 49 mv tmp.o ${.TARGET} 50 51 ${KMOD}_tramp.S: ${KMOD}_tmp.o $S/lkm/arch/${MACHINE_CPU}/lkmtramp.awk 52 ${_MKTARGET_CREATE} 53 ${OBJDUMP} --syms --reloc ${KMOD}_tmp.o | \ 54 awk -f $S/lkm/arch/${MACHINE_CPU}/lkmtramp.awk > tmp.S 55 mv tmp.S ${.TARGET} 56 57 ${PROG}: ${KMOD}_tmp.o ${KMOD}_tramp.o 58 ${_MKTARGET_LINK} 59 ${LD} -r -d \ 60 `${OBJDUMP} --syms --reloc ${KMOD}_tmp.o | \ 61 awk -f $S/lkm/arch/${MACHINE_CPU}/lkmwrap.awk` \ 62 -o tmp.o ${KMOD}_tmp.o ${KMOD}_tramp.o 63 .if exists($S/lkm/arch/${MACHINE_CPU}/lkmhide.awk) 64 ${OBJCOPY} \ 65 `${NM} tmp.o | awk -f $S/lkm/arch/${MACHINE_CPU}/lkmhide.awk` \ 66 tmp.o tmp1.o 67 mv tmp1.o tmp.o 68 .endif 69 mv tmp.o ${.TARGET} 70 .else 71 ${PROG}: ${OBJS} ${DPADD} 72 ${_MKTARGET_LINK} 73 ${LD} -r -d -o tmp.o ${OBJS} 74 mv tmp.o ${.TARGET} 75 .endif 76 77 ##### Install rules 78 .if !target(kmodinstall) 79 KMODINSTDIR= ${DESTDIR}${KMODULEDIR}/${KMOD} 80 _PROG:= ${KMODINSTDIR}/${PROG} # installed path 81 82 .if ${MKUPDATE} == "no" 83 ${_PROG}! ${PROG} # install rule 84 .if !defined(BUILD) && !make(all) && !make(${PROG}) 85 ${_PROG}! .MADE # no build at install 86 .endif 87 .else 88 ${_PROG}: ${PROG} # install rule 89 .if !defined(BUILD) && !make(all) && !make(${PROG}) 90 ${_PROG}: .MADE # no build at install 91 .endif 92 .endif 93 ${_MKTARGET_INSTALL} 94 ${INSTALL_DIR} ${KMODINSTDIR} 95 ${INSTALL_FILE} -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \ 96 ${.ALLSRC} ${.TARGET} 97 98 kmodinstall:: ${_PROG} 99 .PHONY: kmodinstall 100 .PRECIOUS: ${_PROG} # keep if install fails 101 102 .undef _PROG 103 .endif # !target(kmodinstall) 104 105 ##### Clean rules 106 cleankmod: .PHONY 107 rm -f a.out [Ee]rrs mklog core *.core \ 108 ${PROG} ${OBJS} ${LOBJS} ${CLEANFILES} 109 110 ##### Custom rules 111 lint: ${LOBJS} 112 .if defined(LOBJS) && !empty(LOBJS) 113 ${LINT} ${LINTFLAGS} ${LDFLAGS:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS} ${LDADD} 114 .endif 115 116 .if !target(load) 117 load: ${PROG} 118 /sbin/modload ${KMOD_LOADFLAGS} -o ${KMOD} ${PROG} 119 .endif 120 .PHONY: load 121 122 .if !target(unload) 123 unload: 124 /sbin/modunload -n ${KMOD} 125 .endif 126 .PHONY: unload 127 128 ##### Pull in related .mk logic 129 .include <bsd.man.mk> 130 .include <bsd.links.mk> 131 .include <bsd.sys.mk> 132 .include <bsd.dep.mk> 133 134 .-include "$S/arch/${MACHINE_CPU}/include/Makefile.inc" 135 .-include "$S/arch/${MACHINE}/include/Makefile.inc" 136