1 # $NetBSD: bsd.kmodule.mk,v 1.1 2008/05/02 14:20:50 ad 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 -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 \ 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 -o tmp.o ${OBJS} 74 mv tmp.o ${.TARGET} 75 .endif 76 77 ##### Install rules 78 .if !target(kmodinstall) 79 _PROG:= ${DESTDIR}${KMODDIR}/${PROG} # installed path 80 81 .if ${MKUPDATE} == "no" 82 ${_PROG}! ${PROG} # install rule 83 .if !defined(BUILD) && !make(all) && !make(${PROG}) 84 ${_PROG}! .MADE # no build at install 85 .endif 86 .else 87 ${_PROG}: ${PROG} # install rule 88 .if !defined(BUILD) && !make(all) && !make(${PROG}) 89 ${_PROG}: .MADE # no build at install 90 .endif 91 .endif 92 ${_MKTARGET_INSTALL} 93 ${INSTALL_FILE} -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \ 94 ${.ALLSRC} ${.TARGET} 95 96 kmodinstall:: ${_PROG} 97 .PHONY: kmodinstall 98 .PRECIOUS: ${_PROG} # keep if install fails 99 100 .undef _PROG 101 .endif # !target(kmodinstall) 102 103 ##### Clean rules 104 cleankmod: .PHONY 105 rm -f a.out [Ee]rrs mklog core *.core \ 106 ${PROG} ${OBJS} ${LOBJS} ${CLEANFILES} 107 108 ##### Custom rules 109 lint: ${LOBJS} 110 .if defined(LOBJS) && !empty(LOBJS) 111 ${LINT} ${LINTFLAGS} ${LDFLAGS:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS} ${LDADD} 112 .endif 113 114 .if !target(load) 115 load: ${PROG} 116 /sbin/modload ${KMOD_LOADFLAGS} -o ${KMOD} ${PROG} 117 .endif 118 .PHONY: load 119 120 .if !target(unload) 121 unload: 122 /sbin/modunload -n ${KMOD} 123 .endif 124 .PHONY: unload 125 126 ##### Pull in related .mk logic 127 .include <bsd.man.mk> 128 .include <bsd.links.mk> 129 .include <bsd.sys.mk> 130 .include <bsd.dep.mk> 131 132 .-include "$S/arch/${MACHINE_CPU}/include/Makefile.inc" 133 .-include "$S/arch/${MACHINE}/include/Makefile.inc" 134