prog.mk revision f7c5421560640d23fc10803b9d59a9ff1d83e467
1f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard# rules to build a program 2f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard# based on FreeBSD's bsd.prog.mk 3f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 4f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard# Copyright 2008 Roy Marples <roy@marples.name> 5f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 6f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardinclude ${MK}/cc.mk 7f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 8f98f2ce29e6e2996fa58f38979143eceaa818335Tom StellardOBJS+= ${SRCS:.c=.o} 9f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 10f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard# If building for /, ensure we use the libc in / if different from 11f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard# the default one in /usr/lib 124f3d8a644043f85063ef7aac1ff87bfd4d83ca4cTom StellardLINK_RPATH?= -Wl,-rpath 134f3d8a644043f85063ef7aac1ff87bfd4d83ca4cTom Stellard_RPATH_SH= if test "${PREFIX}" = "" -o "${PREIX}" = "/"; then \ 14f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard echo "${LINK_RPATH}=${PREFIX}/${LIBNAME}"; \ 15f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard else \ 16f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard echo ""; \ 17f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard fi 18f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard_RPATH!= ${_RPATH_SH} 1958a2cbef4aac9ee7d530dfb690c78d6fc11a2371Chandler CarruthLDFLAGS+= ${_RPATH}$(shell ${_RPATH_SH}) 20f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 21f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard# If building for /, ensure we use the linker in /libexec if different from 22f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard# the default one in /usr/libexec 23f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard_DYNLINK_SH= if test "${PREFIX}" = "" -o "${PREFIX}" = "/" && test -e /libexec/ld.elf_so; then \ 24f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard echo "-Wl,-dynamic-linker=/libexec/ld.elf_so"; \ 25f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard else \ 26f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard echo ""; \ 27f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard fi 28f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard_DYNLINK!= ${_DYNLINK_SH} 29f98f2ce29e6e2996fa58f38979143eceaa818335Tom StellardLDFLAGS+= ${_DYNLINK}$(shell ${_DYNLINK_SH}) 30f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 31f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardall: ${PROG} ${SCRIPTS} _man 32f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 33f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard.c.o: 34a39058aaed4540fc37681cad728b99546595b2e8David Blaikie ${CC} ${CFLAGS} ${CPPFLAGS} -c $< -o $@ 35a39058aaed4540fc37681cad728b99546595b2e8David Blaikie 36f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard${PROG}: ${OBJS} 37f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LDADD} 3834f533a6c351d8b255810c9b4b8713700e66ee88Tom Stellard 39f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard# We could save about 600 bytes by building it like this 40f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard# instead of the more traditional method above 41f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardsmall: ${SRCS} 4234f533a6c351d8b255810c9b4b8713700e66ee88Tom Stellard echo "" > _${PROG}.c 4334f533a6c351d8b255810c9b4b8713700e66ee88Tom Stellard for src in ${SRCS}; do echo "#include \"$$src\"" >> _${PROG}.c; done 4434f533a6c351d8b255810c9b4b8713700e66ee88Tom Stellard ${CC} ${CFLAGS} ${CPPFLAGS} -c _${PROG}.c -o _${PROG}.o 45f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard ${CC} ${LDFLAGS} -o ${PROG} _${PROG}.o ${LDADD} 46f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 47f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard_proginstall: ${PROG} 48f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard ${INSTALL} -d ${DESTDIR}${BINDIR} 49f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard ${INSTALL} -m ${BINMODE} ${PROG} ${DESTDIR}${BINDIR} 50f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard ${INSTALL} -d ${DESTDIR}${DBDIR} 51f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 52f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardinclude ${MK}/depend.mk 53f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardinclude ${MK}/files.mk 54f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardinclude ${MK}/scripts.mk 55f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardinclude ${MK}/man.mk 56f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardinclude ${MK}/dist.mk 57f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 58f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardinstall: _proginstall _scriptsinstall _filesinstall _maninstall 59f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard for x in ${SUBDIRS}; do cd $$x; ${MAKE} $@; cd ..; done 60f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 61f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardclean: 62f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard rm -f ${OBJS} ${PROG} _${PROG}.c _${PROG}.o ${PROG}.core ${CLEANFILES} 63f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 64f98f2ce29e6e2996fa58f38979143eceaa818335Tom StellardLINTFLAGS?= -hx 65f98f2ce29e6e2996fa58f38979143eceaa818335Tom StellardLINTFLAGS+= -X 159,247,352 66f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 67f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardlint: ${SRCS:.c=.c} 68f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} $^ ${.ALLSRC} 69f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard