xref: /minix/minix/drivers/storage/ramdisk/Makefile (revision fb9c64b2)
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