1f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project# rules to build a program 
2f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project# based on FreeBSD's bsd.prog.mk
3f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
4f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project# Copyright 2008 Roy Marples <roy@marples.name>
5f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
6f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectinclude ${MK}/cc.mk
7f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
8f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source ProjectOBJS+=		${SRCS:.c=.o}
9f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
10f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project# If building for /, ensure we use the libc in / if different from
11f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project# the default one in /usr/lib
12f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source ProjectLINK_RPATH?=		-Wl,-rpath
13f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project_RPATH_SH=		if test "${PREFIX}" = "" -o "${PREIX}" = "/"; then \
14f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project				echo "${LINK_RPATH}=${PREFIX}/${LIBNAME}"; \
15f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project			else \
16f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project				echo ""; \
17f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project			fi
18f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project_RPATH!=		${_RPATH_SH}
19f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source ProjectLDFLAGS+=		${_RPATH}$(shell ${_RPATH_SH})
20f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
21f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project# If building for /, ensure we use the linker in /libexec if different from
22f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project# the default one in /usr/libexec
23f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project_DYNLINK_SH=		if test "${PREFIX}" = "" -o "${PREFIX}" = "/" && test -e /libexec/ld.elf_so; then \
24f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project				echo "-Wl,-dynamic-linker=/libexec/ld.elf_so"; \
25f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project			else \
26f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project				echo ""; \
27f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project			fi
28f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project_DYNLINK!=		${_DYNLINK_SH}
29f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source ProjectLDFLAGS+=		${_DYNLINK}$(shell ${_DYNLINK_SH})
30f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
31f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectall: ${PROG} ${SCRIPTS} _man
32f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
33f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project.c.o:
34f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	${CC} ${CFLAGS} ${CPPFLAGS} -c $< -o $@
35f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
36f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project${PROG}: ${OBJS}
37f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	${CC} ${LDFLAGS} -o $@ ${OBJS} ${LDADD}
38f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
39f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project# We could save about 600 bytes by building it like this
40f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project# instead of the more traditional method above
41f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectsmall: ${SRCS}
42f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	echo "" > _${PROG}.c
43f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	for src in ${SRCS}; do echo "#include \"$$src\"" >> _${PROG}.c; done
44f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	${CC} ${CFLAGS} ${CPPFLAGS} -c _${PROG}.c -o _${PROG}.o
45f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	${CC} ${LDFLAGS} -o ${PROG} _${PROG}.o ${LDADD}
46f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
47f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project_proginstall: ${PROG}
48f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	${INSTALL} -d ${DESTDIR}${BINDIR}
49f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	${INSTALL} -m ${BINMODE} ${PROG} ${DESTDIR}${BINDIR}
50f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	${INSTALL} -d ${DESTDIR}${DBDIR}
51f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
52f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectinclude ${MK}/depend.mk
53f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectinclude ${MK}/files.mk
54f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectinclude ${MK}/scripts.mk
55f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectinclude ${MK}/man.mk
56f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectinclude ${MK}/dist.mk
57f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
58f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectinstall: _proginstall _scriptsinstall _filesinstall _maninstall
59f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	for x in ${SUBDIRS}; do cd $$x; ${MAKE} $@; cd ..; done
60f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
61f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectclean:
62f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	rm -f ${OBJS} ${PROG} _${PROG}.c _${PROG}.o ${PROG}.core ${CLEANFILES}
63f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
64f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source ProjectLINTFLAGS?=	-hx
65f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source ProjectLINTFLAGS+=	-X 159,247,352
66f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project
67f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectlint: ${SRCS:.c=.c}
68f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} $^ ${.ALLSRC}
69