1# Makefile for ramdisk image 2.include <bsd.own.mk> 3 4USE_BITCODE:=no 5 6install: 7 8all: 9 10# Add a few defines we are going to use during the image 11# creation to determine what features and binaries to include 12# in the final image 13# ACPI do we have/include the acpi binary 14# RAMDISK_SMALL is the script called with MKSMALL=yes 15# DYNAMIC does the ramdisk contain dynamic binaries? 16RAMDISK_INC_ACPI= 0 17RAMDISK_SMALL= 0 18RAMDISK_DYNAMIC= 0 19 20RAMDISK_DEFINES= \ 21 -DRAMDISK_INC_ACPI=${RAMDISK_INC_ACPI} \ 22 -DRAMDISK_SMALL=${RAMDISK_SMALL} \ 23 -DRAMDISK_DYNAMIC=${RAMDISK_DYNAMIC} 24 25# The name of the proto file to use 26PROTO= proto 27 28# Common to all architectures 29ETC= system.conf group 30EXTRA= rc 31PROTO_FILES= proto.common.etc 32PROTO_FILES+= proto.common.dynamic 33PROGRAMS= # defined 34PROGRAMS+= fsck_mfs 35dir.fsck_mfs:= minix/commands/fsck.mfs 36PROGRAMS+= grep 37dir.grep:= minix/usr.bin/grep 38PROGRAMS+= input 39dir.input:= minix/servers/input 40PROGRAMS+= loadramdisk 41dir.loadramdisk:= minix/commands/loadramdisk 42PROGRAMS+= mfs 43dir.mfs:= minix/fs/mfs 44PROGRAMS+= mount 45dir.mount:= minix/commands/mount 46PROGRAMS+= procfs 47dir.procfs:= minix/fs/procfs 48PROGRAMS+= minix-service 49dir.minix-service:= minix/commands/minix-service 50PROGRAMS+= sh 51dir.sh:= bin/sh 52PROGRAMS+= sysenv 53dir.sysenv:= minix/commands/sysenv 54PROGRAMS+= umount 55dir.umount:= minix/commands/umount 56 57.if ${MKSMALL} != "yes" 58RAMDISK_SMALL= 1 59.endif 60 61.if ${MACHINE_ARCH} == "i386" 62ETC+= rs.single 63PROGRAMS+= at_wini 64dir.at_wini:= minix/drivers/storage/at_wini 65PROGRAMS+= floppy 66dir.floppy:= minix/drivers/storage/floppy 67PROGRAMS+= pci 68dir.pci:= minix/drivers/bus/pci 69PROGRAMS+= pckbd 70dir.pckbd:= minix/drivers/hid/pckbd 71PROGRAMS+= cdprobe 72dir.cdprobe:= minix/commands/cdprobe 73PROGRAMS+= pwd_mkdb 74dir.pwd_mkdb:= usr.sbin/pwd_mkdb 75PROGRAMS+= isofs 76dir.isofs:= minix/fs/isofs 77 78.if ${MKSMALL} != "yes" 79PROGRAMS+= ahci 80dir.ahci:= minix/drivers/storage/ahci 81PROGRAMS+= virtio_blk 82dir.virtio_blk:= minix/drivers/storage/virtio_blk 83PROGRAMS+= ext2 84dir.ext2:= minix/fs/ext2 85.endif 86 87.if ${MKACPI} != "no" 88RAMDISK_INC_ACPI= 1 89PROGRAMS+= acpi 90dir.acpi:= minix/drivers/power/acpi 91.endif 92.endif # ${MACHINE_ARCH} == "i386" 93 94.if ${MACHINE_ARCH} == "earm" 95PROGRAMS+= mmc 96dir.mmc:= minix/drivers/storage/mmc 97.endif # ${MACHINE_ARCH} == "earm" 98 99.if ${LDSTATIC} == "-dynamic" 100RAMDISK_DYNAMIC= 1 101PROGRAMS+= ld.elf_so 102PROG_LIBS+= libc 103PROG_MINIXLIBS+= libterminfo 104.endif 105 106CPPFLAGS+= -I${NETBSDSRCDIR}/servers 107 108# LSC We have to take care of not erasing the source file, so never add EXTRA 109# to CLEANFILES 110CLEANFILES += ${PROGRAMS} ${SCRIPTS} ${ETC} image image.c 111CLEANFILES += proto.gen proto.dev proto.dev.mtree 112CLEANFILES += ${PROG_LIBEXEC} 113CLEANFILES += ${.OBJDIR}/etc/* 114 115############################################################# 116# LSC Below this point the rules should not be modified 117############################################################# 118 119# Tool to bootstrap the password db 120TOOL_PWD_MKDB?= ${NETBSDSRCDIR}/usr.sbin/pwd_mkdb/pwd_mkdb 121 122# Remove "drivers/storage/ramdisk" component from path 123PROGROOT:= ${.OBJDIR:S,/minix/drivers/storage/ramdisk,,} 124 125# Generate dependencies rules for config files 126.for etc in ${ETC} 127etc/${etc}: ${NETBSDSRCDIR}/etc/${etc} 128 mkdir -p ${.OBJDIR}/etc 129 ${INSTALL} $> $@ 130.endfor 131 132# LSC Force the regeneration of the proto file as it seems sometimes 133# they are not copied over as needed. 134# LSC ramdisk rc file != /etc/rc 135# BJG if ${.CURDIR} == ${.OBJDIR}, we are building in-tree and install 136# shouldn't try to install the originals over the originals. Otherwise 137# we are building out-of-tree and the contents should be copied 138# unconditionally in case the contents have changed after the first copy. 139.if ${.CURDIR} != ${.OBJDIR} 140.for file in ${EXTRA} ${PROTO} ${PROTO_FILES} 141CLEANFILES += ${.OBJDIR}/${file} 142${file}: ${NETBSDSRCDIR}/minix/drivers/storage/ramdisk/${file} .PHONY 143 ${INSTALL} $> $@ 144.endfor 145.endif 146 147# Generate dependencies rules for dynamic libraries, if needed 148.for lib in ${PROG_LIBS} 149PROGRAMS+= ${lib}.so.0 150CLEANFILES += ${lib}.so.0 151${lib}.so.0:${PROGROOT}/lib/${lib}/${lib}.so.0 152 ${INSTALL} $> $@ 153 154# BJG - Don't invoke parallel Makes 155#${PROGROOT}/lib/${lib}/${lib}.so.0: 156# ${MAKE} -C ${NETBSDSRCDIR}/lib/${lib} all 157.endfor 158 159.for lib in ${PROG_MINIXLIBS} 160PROGRAMS+= ${lib}.so.0 161CLEANFILES += ${lib}.so.0 162${lib}.so.0:${PROGROOT}/minix/lib/${lib}/${lib}.so.0 163 ${INSTALL} $> $@ 164 165# BJG - Don't invoke parallel Makes 166#${PROGROOT}/minix/lib/${lib}/${lib}.so.0: 167# ${MAKE} -C ${NETBSDSRCDIR}/minix/lib/${lib} all 168.endfor 169 170# Generate dependencies rules for binaries 171.for prog in ${PROGRAMS} 172${prog}: ${PROGROOT}/${dir.${prog}}/${prog} 173 ${INSTALL} $> $@ 174 175# BJG - don't invoke parallel Makes 176#${PROGROOT}/${dir.${prog}}/${prog}: 177# ${MAKE} -C ${NETBSDSRCDIR}/${dir.${prog}} all 178.endfor # prog 179 180realall image: proto.gen ${ETC:C/^/etc\//} ${EXTRA} \ 181 etc/master.passwd etc/pwd.db etc/spwd.db etc/passwd etc/group 182 ${_MKMSG_CREATE} "Generating ramdisk image" 183 ${TOOL_MKFSMFS} image proto.gen || { rm -f image; false; } 184 185etc/pwd.db etc/spwd.db etc/passwd: etc/master.passwd 186 187etc/master.passwd: ${NETBSDSRCDIR}/etc/master.passwd 188 mkdir -p ${.OBJDIR}/etc 189 ${INSTALL} $> $@ 190 ${TOOL_PWD_MKDB} -V 0 -p -d . etc/master.passwd 191 192proto.dev.mtree: 193 @echo ". type=dir uname=root gname=wheel mode=0755" \ 194 >${.TARGET}.tmp && \ 195 echo "./dev type=dir uname=root gname=wheel mode=0755" \ 196 >>${.TARGET}.tmp && \ 197 ${NETBSDSRCDIR}/minix/commands/MAKEDEV/MAKEDEV.sh -m -r \ 198 >> ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET} 199 200# We have to remove the two first entries of the generated proto file, as 201# well as the two last ones (closing $). 202# Do not forget to double $ so that make doesn't try to expand it. 203proto.dev: proto.dev.mtree etc/pwd.db etc/spwd.db etc/passwd etc/group 204 ${TOOL_MTREE} -f ${.TARGET}.mtree -N ${.OBJDIR}/etc -C -K device | \ 205 ${TOOL_TOPROTO} | ${TOOL_SED} -e '1,4d' | \ 206 ${TOOL_SED} -e '$$d' |${TOOL_SED} -e '$$d' > ${.TARGET}.tmp 207 grep console ${.TARGET}.tmp # sanity check; is there a console entry? 208 mv ${.TARGET}.tmp ${.TARGET} 209 210proto.gen: ${PROTO} ${PROTO_FILES} proto.dev ${PROGRAMS} 211 ${STRIP} ${PROGRAMS} 212 # We are using the c preprocessor to generate proto.gen 213 # used in the mkfs tool. 214 ${TOOL_CAT} ${PROTO} | ${CC} \ 215 ${RAMDISK_DEFINES} \ 216 -E - | grep -v "^$$" | grep -v "#" >${.TARGET} 217 218.include <minix.service.mk> 219