diff options
Diffstat (limited to 'contrib/bmake/mk/prog.mk')
-rw-r--r-- | contrib/bmake/mk/prog.mk | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/contrib/bmake/mk/prog.mk b/contrib/bmake/mk/prog.mk index 902b221f7fe5..aac2a4d3da28 100644 --- a/contrib/bmake/mk/prog.mk +++ b/contrib/bmake/mk/prog.mk @@ -1,7 +1,10 @@ -# $Id: prog.mk,v 1.37 2021/12/08 05:56:50 sjg Exp $ +# $Id: prog.mk,v 1.44 2024/02/19 00:06:19 sjg Exp $ -.if !target(__${.PARSEFILE}__) -__${.PARSEFILE}__: .NOTMAIN +# should be set properly in sys.mk +_this ?= ${.PARSEFILE:S,bsd.,,} + +.if !target(__${_this}__) +__${_this}__: .NOTMAIN .include <init.mk> @@ -11,7 +14,7 @@ _sect:=${MAN:E} MAN${_sect}=${MAN} .endif -.SUFFIXES: .out .o .c .cc .C .y .l .s .8 .7 .6 .5 .4 .3 .2 .1 .0 +.SUFFIXES: .out .o .c ${CXX_SUFFIXES} .y .l ${CCM_SUFFIXES} ${PCM} CFLAGS+= ${COPTS} @@ -62,27 +65,45 @@ LDADD_LAST+= ${LDADD_LIBC_P} .if defined(SHAREDSTRINGS) CLEANFILES+=strings .c.o: - ${CC} -E ${CFLAGS} ${.IMPSRC} | xstr -c - - @${CC} ${CFLAGS} -c x.c -o ${.TARGET} + @${COMPILE.c:N-c} -E ${.IMPSRC} | xstr -c - + @${COMPILE.c} x.c -o ${.TARGET} @rm -f x.c -${CXX_SUFFIXES:%=%.o}: - ${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c - +# precompiled C++ Modules +${CCM_SUFFIXES:%=%${PCM}}: + @${COMIPILE.cc:N-c} -E ${.IMPSRC} | xstr -c - + @mv -f x.c x.cc + @${COMPILE.pcm} x.cc -o ${.TARGET} + @rm -f x.cc + +${CXX_SUFFIXES:N.c*m:%=%.o}: + @${COMIPILE.cc:N-c} -E ${.IMPSRC} | xstr -c - @mv -f x.c x.cc - @${CXX} ${CXXFLAGS} -c x.cc -o ${.TARGET} + @${COMPILE.cc} x.cc -o ${.TARGET} @rm -f x.cc .endif +.if defined(PROG_CXX) +PROG= ${PROG_CXX} +_SUPCXX?= -lstdc++ -lm +.endif .if defined(PROG) BINDIR ?= ${prefix}/bin -SRCS?= ${PROG}.c -.for s in ${SRCS:N*.h:N*.sh:M*/*} +.if empty(SRCS) +# init.mk handling of QUALIFIED_VAR_LIST means +# SRCS will be defined - even if empty. +SRCS = ${PROG}.c +.endif + +SRCS ?= ${PROG}.c +OBJS_SRCS = ${SRCS:${OBJS_SRCS_FILTER}} +.for s in ${OBJS_SRCS:M*/*} ${.o .po .lo:L:@o@${s:T:R}$o@}: $s .endfor -.if !empty(SRCS:N*.h:N*.sh) -OBJS+= ${SRCS:T:N*.h:N*.sh:R:S/$/.o/g} +.if !empty(OBJS_SRCS) +OBJS+= ${OBJS_SRCS:T:R:S/$/.o/g} LOBJS+= ${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln} .endif @@ -90,7 +111,7 @@ LOBJS+= ${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln} .NOPATH: ${OBJS} ${PROG} ${SRCS:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}} # this is known to work for NetBSD 1.6 and FreeBSD 4.2 -.if ${TARGET_OSNAME} == "NetBSD" || ${TARGET_OSNAME} == "FreeBSD" +.if ${TARGET_OSNAME:NFreeBSD:NNetBSD} == "" _PROGLDOPTS= .if ${SHLINKDIR} != "/usr/libexec" # XXX: change or remove if ld.so moves _PROGLDOPTS+= -Wl,-dynamic-linker=${_SHLINKER} @@ -100,20 +121,16 @@ _PROGLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib \ -L${DESTDIR}${SHLIBDIR} .endif _PROGLDOPTS+= -Wl,-rpath,${SHLIBDIR}:/usr/lib - -.if defined(PROG_CXX) -_CCLINK= ${CXX} -_SUPCXX= -lstdc++ -lm -.endif .endif # NetBSD -_CCLINK?= ${CC} - .if ${MK_PROG_LDORDER_MK} != "no" ${PROG}: ldorder .include <ldorder.mk> .endif +# avoid -dL errors +LDADD_LDORDER ?= +LDSTATIC ?= .if defined(DESTDIR) && exists(${LIBCRT0}) && ${LIBCRT0} != "/dev/null" |