version 1.310, 2010/12/08 01:57:22 |
version 1.319, 2012/01/28 21:32:14 |
|
|
##### 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 |
Line 63 DPADD+= ${LIBDO.${_lib}}/lib${_lib}.so |
|
Line 62 DPADD+= ${LIBDO.${_lib}}/lib${_lib}.so |
|
##### Build and install rules |
##### Build and install rules |
MKDEP_SUFFIXES?= .o .po .pico .go .ln |
MKDEP_SUFFIXES?= .o .po .pico .go .ln |
|
|
# Use purely kernel private headers in rump builds |
|
.if !defined(RUMPKERNEL) |
|
.if empty(CPPFLAGS:M-nostdinc) |
|
CPPFLAGS+= ${DESTDIR:D-nostdinc ${CPPFLAG_ISYSTEM} ${DESTDIR}/usr/include} |
|
.endif |
|
.if empty(CXXFLAGS:M-nostdinc++) |
|
CXXFLAGS+= ${DESTDIR:D-nostdinc++ ${CPPFLAG_ISYSTEMXX} ${DESTDIR}/usr/include/g++} |
|
.endif |
|
.endif |
|
|
|
.if !defined(SHLIB_MAJOR) && exists(${SHLIB_VERSION_FILE}) # { |
.if !defined(SHLIB_MAJOR) && exists(${SHLIB_VERSION_FILE}) # { |
SHLIB_MAJOR != . ${SHLIB_VERSION_FILE} ; echo $$major |
SHLIB_MAJOR != . ${SHLIB_VERSION_FILE} ; echo $$major |
SHLIB_MINOR != . ${SHLIB_VERSION_FILE} ; echo $$minor |
SHLIB_MINOR != . ${SHLIB_VERSION_FILE} ; echo $$minor |
|
|
${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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.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} ${OBJCOPYFLAGS} ${.TARGET} |
|
|
.if defined(LIB) # { |
.if defined(LIB) # { |
.if (${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ |
.if (${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ |
Line 521 lib${LIB}_g.a:: ${GOBJS} __archivebuild |
|
Line 510 lib${LIB}_g.a:: ${GOBJS} __archivebuild |
|
|
|
_LIBLDOPTS= |
_LIBLDOPTS= |
.if ${SHLIBDIR} != "/usr/lib" |
.if ${SHLIBDIR} != "/usr/lib" |
_LIBLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib \ |
_LIBLDOPTS+= -Wl,-rpath,${SHLIBDIR} \ |
-Wl,-rpath,${SHLIBDIR} \ |
-L=${SHLIBDIR} |
-L${DESTDIR}${SHLIBDIR} |
|
.elif ${SHLIBINSTALLDIR} != "/usr/lib" |
.elif ${SHLIBINSTALLDIR} != "/usr/lib" |
_LIBLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR}:${DESTDIR}/usr/lib \ |
_LIBLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \ |
-L${DESTDIR}${SHLIBINSTALLDIR} |
-L=${SHLIBINSTALLDIR} |
.endif |
.endif |
|
|
# gcc -shared now adds -lc automatically. For libraries other than libc and |
# gcc -shared now adds -lc automatically. For libraries other than libc and |
Line 535 _LIBLDOPTS+= -Wl,-rpath-link,${DESTDIR}$ |
|
Line 523 _LIBLDOPTS+= -Wl,-rpath-link,${DESTDIR}$ |
|
# -Xl,-nostdlib is not enough because we want to tell the compiler-driver not |
# -Xl,-nostdlib is not enough because we want to tell the compiler-driver not |
# to add standard libraries, not the linker. |
# to add standard libraries, not the linker. |
.if !defined(LIB) |
.if !defined(LIB) |
|
.if !empty(LIBC_SO) |
DPLIBC ?= ${DESTDIR}${LIBC_SO} |
DPLIBC ?= ${DESTDIR}${LIBC_SO} |
|
.endif |
.else |
.else |
.if ${LIB} != "c" && ${LIB:Mgcc*} == "" |
.if ${LIB} != "c" && ${LIB:Mgcc*} == "" |
|
.if !empty(LIBC_SO) |
DPLIBC ?= ${DESTDIR}${LIBC_SO} |
DPLIBC ?= ${DESTDIR}${LIBC_SO} |
|
.endif |
.else |
.else |
LDLIBC ?= -nodefaultlibs |
LDLIBC ?= -nodefaultlibs |
.if ${LIB} == "c" |
.if ${LIB} == "c" |
LDADD+= -lgcc_pic |
LDADD+= -lgcc |
.endif |
.endif |
.endif |
.endif |
.endif |
.endif |
Line 560 lib${LIB}.so.${SHLIB_FULLVERSION}: ${SOL |
|
Line 552 lib${LIB}.so.${SHLIB_FULLVERSION}: ${SOL |
|
${SHLIB_LDSTARTFILE} ${SHLIB_LDENDFILE} |
${SHLIB_LDSTARTFILE} ${SHLIB_LDENDFILE} |
${_MKTARGET_BUILD} |
${_MKTARGET_BUILD} |
rm -f lib${LIB}.so.${SHLIB_FULLVERSION} |
rm -f lib${LIB}.so.${SHLIB_FULLVERSION} |
.if defined(DESTDIR) |
|
${LIBCC} ${LDLIBC} -Wl,-nostdlib -B${_GCC_CRTDIR}/ -B${DESTDIR}${SHLIBDIR}/ \ |
|
-Wl,-x -shared ${SHLIB_SHFLAGS} -o ${.TARGET} \ |
|
-Wl,--whole-archive ${SOLIB} \ |
|
-Wl,--no-whole-archive ${_LDADD.lib${LIB}} \ |
|
${_LIBLDOPTS} ${_LDFLAGS.lib${LIB}} \ |
|
-L${_GCC_LIBGCCDIR} |
|
.else |
|
${LIBCC} ${LDLIBC} -Wl,-x -shared ${SHLIB_SHFLAGS} ${_LDFLAGS.lib${LIB}} \ |
${LIBCC} ${LDLIBC} -Wl,-x -shared ${SHLIB_SHFLAGS} ${_LDFLAGS.lib${LIB}} \ |
-o ${.TARGET} ${_LIBLDOPTS} \ |
-o ${.TARGET} ${_LIBLDOPTS} \ |
-Wl,--whole-archive ${SOLIB} -Wl,--no-whole-archive ${_LDADD.lib${LIB}} |
-Wl,--whole-archive ${SOLIB} -Wl,--no-whole-archive ${_LDADD.lib${LIB}} |
.endif |
|
# We don't use INSTALL_SYMLINK here because this is just |
# We don't use INSTALL_SYMLINK here because this is just |
# happening inside the build directory/objdir. XXX Why does |
# happening inside the build directory/objdir. XXX Why does |
# this spend so much effort on libraries that aren't live??? XXX |
# this spend so much effort on libraries that aren't live??? XXX |
|
|
${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 792 LINKSMODE?= ${LIBMODE} |
|
Line 787 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 |