version 1.314, 2011/04/11 23:03:38 |
version 1.322, 2012/07/19 19:42:45 |
|
|
##### Basic targets |
##### Basic targets |
.PHONY: checkver libinstall |
.PHONY: checkver libinstall |
realinstall: checkver libinstall |
realinstall: checkver libinstall |
clean: cleanlib |
|
|
|
##### LIB specific flags. |
##### LIB specific flags. |
# XXX: This is needed for programs that link with .a libraries |
# XXX: This is needed for programs that link with .a libraries |
|
|
SHLIB_SOVERSION= ${SHLIB_MAJOR} |
SHLIB_SOVERSION= ${SHLIB_MAJOR} |
SHLIB_SHFLAGS= -Wl,-soname,${_LIB_PREFIX}${LIB}.so.${SHLIB_SOVERSION} |
SHLIB_SHFLAGS= -Wl,-soname,${_LIB_PREFIX}${LIB}.so.${SHLIB_SOVERSION} |
SHLIB_SHFLAGS+= -Wl,--warn-shared-textrel |
SHLIB_SHFLAGS+= -Wl,--warn-shared-textrel |
SHLIB_LDSTARTFILE?= ${_GCC_CRTDIR}/crti.o ${_GCC_CRTBEGINS} |
SHLIB_LDSTARTFILE?= ${_GCC_CRTI} ${_GCC_CRTBEGINS} |
SHLIB_LDENDFILE?= ${_GCC_CRTENDS} ${_GCC_CRTDIR}/crtn.o |
SHLIB_LDENDFILE?= ${_GCC_CRTENDS} ${_GCC_CRTN} |
|
|
CFLAGS+= ${COPTS} |
CFLAGS+= ${COPTS} |
OBJCFLAGS+= ${OBJCOPTS} |
OBJCFLAGS+= ${OBJCOPTS} |
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
.endif |
.endif |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.c.po: |
.c.po: |
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
.endif |
.endif |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
${OBJCOPY} -X ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.c.go: |
.c.go: |
|
|
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET} |
${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET} |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.cc.o .cpp.o .cxx.o .C.o: |
.cc.o .cpp.o .cxx.o .C.o: |
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
${COMPILE.cc} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} |
${COMPILE.cc} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.cc.po .cpp.po .cxx.po .C.po: |
.cc.po .cpp.po .cxx.po .C.po: |
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
${COMPILE.cc} ${PROFFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} -pg ${.IMPSRC} -o ${.TARGET} |
${COMPILE.cc} ${PROFFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} -pg ${.IMPSRC} -o ${.TARGET} |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
${OBJCOPY} -X ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.cc.go .cpp.go .cxx.go .C.go: |
.cc.go .cpp.go .cxx.go .C.go: |
|
|
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
${COMPILE.cc} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET} |
${COMPILE.cc} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET} |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.f.o: |
.f.o: |
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
.endif |
.endif |
.if !defined(FOPTS) || empty(FOPTS:M*-g*) |
.if !defined(FOPTS) || empty(FOPTS:M*-g*) |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.f.po: |
.f.po: |
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
.endif |
.endif |
.if !defined(FOPTS) || empty(FOPTS:M*-g*) |
.if !defined(FOPTS) || empty(FOPTS:M*-g*) |
${OBJCOPY} -X ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.f.go: |
.f.go: |
|
|
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
${COMPILE.f} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET} |
${COMPILE.f} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET} |
.if !defined(FOPTS) || empty(FOPTS:M*-g*) |
.if !defined(FOPTS) || empty(FOPTS:M*-g*) |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.f.ln: |
.f.ln: |
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
.endif |
.endif |
.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) |
.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.m.po: |
.m.po: |
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
.endif |
.endif |
.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) |
.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) |
${OBJCOPY} -X ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.m.go: |
.m.go: |
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
${COMPILE.m} ${DEBUGFLAGS} -g ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} |
${COMPILE.m} ${DEBUGFLAGS} -g ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} |
.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) |
.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) |
${OBJCOPY} -X ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.m.pico: |
.m.pico: |
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
${COMPILE.m} ${CSHLIBFLAGS} ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} |
${COMPILE.m} ${CSHLIBFLAGS} ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} |
.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) |
.if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
.endif |
.endif |
|
|
.s.o: |
.s.o: |
|
|
.if defined(CTFCONVERT) |
.if defined(CTFCONVERT) |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
.endif |
.endif |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
|
|
.S.o: |
.S.o: |
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
|
|
.if defined(CTFCONVERT) |
.if defined(CTFCONVERT) |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
.endif |
.endif |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
|
|
.s.po: |
.s.po: |
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
|
|
.if defined(CTFCONVERT) |
.if defined(CTFCONVERT) |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
.endif |
.endif |
${OBJCOPY} -X ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
|
|
.S.po: |
.S.po: |
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
|
|
.if defined(CTFCONVERT) |
.if defined(CTFCONVERT) |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
${CTFCONVERT} ${CTFFLAGS} ${.TARGET} |
.endif |
.endif |
${OBJCOPY} -X ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
|
|
.s.go: |
.s.go: |
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
|
|
.s.pico: |
.s.pico: |
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
${COMPILE.s} ${CAPICFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} |
${COMPILE.s} ${CAPICFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
|
|
.S.pico: |
.S.pico: |
${_MKTARGET_COMPILE} |
${_MKTARGET_COMPILE} |
${COMPILE.S} ${CAPICFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} |
${COMPILE.S} ${CAPICFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} |
${OBJCOPY} -x ${.TARGET} |
${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} |
|
|
.if defined(LIB) # { |
.if defined(LIB) # { |
.if (${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ |
.if (${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ |
Line 391 _LIBS=lib${LIB}.a |
|
Line 390 _LIBS=lib${LIB}.a |
|
_LIBS= |
_LIBS= |
.endif |
.endif |
|
|
|
.if ${LIBISPRIVATE} != "no" \ |
|
&& (defined(USE_COMBINE) && ${USE_COMBINE} == "yes" \ |
|
&& !defined(NOCOMBINE)) # { |
|
.for f in ${SRCS:N*.h:N*.sh:C/\.[yl]$/.c/g} |
|
COMBINEFLAGS.${LIB}.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5} |
|
.if empty(COMBINEFLAGS.${LIB}.${f}) && !defined(NOCOMBINE.$f) |
|
COMBINESRCS+= ${f} |
|
NODPSRCS+= ${f} |
|
.else |
|
OBJS+= ${f:R:S/$/.o/} |
|
.endif |
|
.endfor |
|
|
|
.if !empty(COMBINESRCS) |
|
OBJS+= lib${LIB}_combine.o |
|
lib${LIB}_combine.o: ${COMBINESRCS} |
|
${_MKTARGET_COMPILE} |
|
${COMPILE.c} -MD --combine ${.ALLSRC} -o ${.TARGET} |
|
.if !defined(CFLAGS) || empty(CFLAGS:M*-g*) |
|
${OBJCOPY} -x ${.TARGET} |
|
.endif |
|
|
|
CLEANFILES+= lib${LIB}_combine.d |
|
|
|
.if exists("lib${LIB}_combine.d") |
|
.include "lib${LIB}_combine.d" |
|
.endif |
|
.endif # empty(XSRCS.${LIB}) |
|
.else # } { |
OBJS+=${SRCS:N*.h:N*.sh:R:S/$/.o/g} |
OBJS+=${SRCS:N*.h:N*.sh:R:S/$/.o/g} |
|
.endif # } |
|
|
STOBJS+=${OBJS} |
STOBJS+=${OBJS} |
|
|
Line 535 DPLIBC ?= ${DESTDIR}${LIBC_SO} |
|
Line 564 DPLIBC ?= ${DESTDIR}${LIBC_SO} |
|
.else |
.else |
LDLIBC ?= -nodefaultlibs |
LDLIBC ?= -nodefaultlibs |
.if ${LIB} == "c" |
.if ${LIB} == "c" |
LDADD+= -lgcc_pic |
LDADD+= -lgcc |
.endif |
.endif |
.endif |
.endif |
.endif |
.endif |
|
|
${LINT} ${LINTFLAGS} ${LOBJS} |
${LINT} ${LINTFLAGS} ${LOBJS} |
.endif |
.endif |
|
|
cleanlib: .PHONY |
# If the number of entries in CLEANFILES is too large, then the |
rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES} |
# commands in bsd.clean.mk encounter errors like "exec(/bin/sh) |
rm -f lib${LIB}.a ${STOBJS} |
# failed (Argument list too long)". Avoid that by splitting the |
rm -f lib${LIB}_p.a ${POBJS} |
# files to clean into several lists using different variable names. |
rm -f lib${LIB}_g.a ${GOBJS} |
# __cleanuse is an internal target in bsd.clean.mk; the way we |
rm -f lib${LIB}_pic.a lib${LIB}.so.* lib${LIB}.so ${_LIB.debug} ${SOBJS} |
# use it here mimics the way it's used by the clean target in |
rm -f ${STOBJS:=.tmp} ${POBJS:=.tmp} ${SOBJS:=.tmp} ${GOBJS:=.tmp} |
# bsd.clean.mk. |
rm -f llib-l${LIB}.ln ${LOBJS} |
# |
|
clean: libclean1 libclean2 libclean3 libclean4 libclean5 |
|
libclean1: .PHONY .MADE __cleanuse LIBCLEANFILES1 |
|
libclean2: .PHONY .MADE __cleanuse LIBCLEANFILES2 |
|
libclean3: .PHONY .MADE __cleanuse LIBCLEANFILES3 |
|
libclean4: .PHONY .MADE __cleanuse LIBCLEANFILES4 |
|
libclean5: .PHONY .MADE __cleanuse LIBCLEANFILES5 |
|
CLEANFILES+= a.out [Ee]rrs mklog core *.core |
|
LIBCLEANFILES1+= lib${LIB}.a ${STOBJS} ${STOBJS:=.tmp} |
|
LIBCLEANFILES2+= lib${LIB}_p.a ${POBJS} ${POBJS:=.tmp} |
|
LIBCLEANFILES3+= lib${LIB}_g.a ${GOBJS} ${GOBJS:=.tmp} |
|
LIBCLEANFILES4+= lib${LIB}_pic.a lib${LIB}.so.* lib${LIB}.so ${_LIB.debug} |
|
LIBCLEANFILES4+= ${SOBJS} ${SOBJS:=.tmp} |
|
LIBCLEANFILES5+= llib-l${LIB}.ln ${LOBJS} |
|
|
.if !target(libinstall) # { |
.if !target(libinstall) # { |
# Make sure it gets defined, in case MKPIC==no && MKLINKLIB==no |
# Make sure it gets defined, in case MKPIC==no && MKLINKLIB==no |
Line 776 LINKSMODE?= ${LIBMODE} |
|
Line 817 LINKSMODE?= ${LIBMODE} |
|
.include <bsd.inc.mk> |
.include <bsd.inc.mk> |
.include <bsd.links.mk> |
.include <bsd.links.mk> |
.include <bsd.dep.mk> |
.include <bsd.dep.mk> |
|
.include <bsd.clang-analyze.mk> |
|
.include <bsd.clean.mk> |
|
|
${TARGETS}: # ensure existence |
${TARGETS}: # ensure existence |