mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-22 11:17:19 +00:00
770ac3b21f
system makefiles. Note that the CTF conversion defaults to off. We may choose to change this default later if DTrace proves popular and people are prepared to wear the compilation performance impact of compiling with debug symbols all the time. Setting NO_CTF in the make args or user environment turns off CTF conversion. Even if we choose to default CTF generation to on later, we still need NO_CTF so that the buildworld process can bootstrap the tools without needlessly generating CTF data for temporary tools. Setting WITH_CTF in the make args or user environment (and _NOT_ in /etc/make.conf) is the only way to enable CTF data conversion. Nore that this can't be implemented the same way that the WITH_ and WITHOUT_ stuff is implemented throughout the buildworld because the CTF conversion needs to work when building a simple object without a Makefile, using the default rules in sys.mk. Typing 'make test.o' with no makefile and just a source file test.c should work. Also, typing 'make WITH_CTF=1 test.o without a makefile and just a source file test.c should work and produce an object with a CTF elf section. Typing 'make WITH_CTF=1 CFLAGS=-g test.o' without a makefile and just a source file test.c should produce an object with both a CTF elf section and the debug elf sections. In the FreeBSD build where more .mk files are used than just sys.mk which is included my make by default, the use of DEBUG_FLAGS is the correct way to enable a debug build. The important thing to note here is that it is the DEBUG_FLAGS setting that prevents libraries and programs from being stripped on installation. So, for the addition of CTF data conversion, setting DEBUG_FLAGS to contain -g, without NO_CTF, will cause the ctfconvert and ctfmerge build programs to be executed also with the -g arg so that debug symbols are retained rather than being removed after the CTF data elf section has been added. Add DTrace libraries to the list of libnames.
394 lines
9.3 KiB
Makefile
394 lines
9.3 KiB
Makefile
# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91
|
|
# $FreeBSD$
|
|
#
|
|
|
|
.include <bsd.init.mk>
|
|
|
|
# Set up the variables controlling shared libraries. After this section,
|
|
# SHLIB_NAME will be defined only if we are to create a shared library.
|
|
# SHLIB_LINK will be defined only if we are to create a link to it.
|
|
# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
|
|
.if defined(NO_PIC)
|
|
.undef SHLIB_NAME
|
|
.undef INSTALL_PIC_ARCHIVE
|
|
.else
|
|
.if !defined(SHLIB) && defined(LIB)
|
|
SHLIB= ${LIB}
|
|
.endif
|
|
.if !defined(SHLIB_NAME) && defined(SHLIB) && defined(SHLIB_MAJOR)
|
|
SHLIB_NAME= lib${SHLIB}.so.${SHLIB_MAJOR}
|
|
.endif
|
|
.if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*)
|
|
SHLIB_LINK?= ${SHLIB_NAME:R}
|
|
.endif
|
|
SONAME?= ${SHLIB_NAME}
|
|
.endif
|
|
|
|
.if defined(CRUNCH_CFLAGS)
|
|
CFLAGS+= ${CRUNCH_CFLAGS}
|
|
.endif
|
|
|
|
.if ${MK_ASSERT_DEBUG} == "no"
|
|
CFLAGS+= -DNDEBUG
|
|
NO_WERROR=
|
|
.endif
|
|
|
|
.if defined(DEBUG_FLAGS)
|
|
CFLAGS+= ${DEBUG_FLAGS}
|
|
|
|
.if !defined(NO_CTF) && (${DEBUG_FLAGS:M-g} != "")
|
|
CTFFLAGS+= -g
|
|
.endif
|
|
.endif
|
|
|
|
.if !defined(DEBUG_FLAGS)
|
|
STRIP?= -s
|
|
.endif
|
|
|
|
.include <bsd.libnames.mk>
|
|
|
|
# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
|
|
# .So used for PIC object files
|
|
.SUFFIXES:
|
|
.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln
|
|
|
|
.if !defined(PICFLAG)
|
|
.if ${MACHINE_ARCH} == "sparc64"
|
|
PICFLAG=-fPIC
|
|
.else
|
|
PICFLAG=-fpic
|
|
.endif
|
|
.endif
|
|
|
|
.if ${CC} == "icc"
|
|
PO_FLAG=-p
|
|
.else
|
|
PO_FLAG=-pg
|
|
.endif
|
|
|
|
.c.po:
|
|
${CC} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
.c.So:
|
|
${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
.cc.po .C.po .cpp.po .cxx.po:
|
|
${CXX} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
|
|
|
|
.cc.So .C.So .cpp.So .cxx.So:
|
|
${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
|
|
|
|
.f.po:
|
|
${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
.f.So:
|
|
${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
.m.po:
|
|
${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
.m.So:
|
|
${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
.s.po .s.So:
|
|
${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
.asm.po:
|
|
${CC} -x assembler-with-cpp -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
.asm.So:
|
|
${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
|
|
-c ${.IMPSRC} -o ${.TARGET}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
.S.po:
|
|
${CC} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
.S.So:
|
|
${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
|
|
all: objwarn
|
|
|
|
.include <bsd.symver.mk>
|
|
|
|
# Allow libraries to specify their own version map or have it
|
|
# automatically generated (see bsd.symver.mk above).
|
|
.if ${MK_SYMVER} == "yes" && !empty(VERSION_MAP)
|
|
${SHLIB_NAME}: ${VERSION_MAP}
|
|
LDFLAGS+= -Wl,--version-script=${VERSION_MAP}
|
|
.endif
|
|
|
|
.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME)
|
|
OBJS+= ${SRCS:N*.h:R:S/$/.o/}
|
|
.endif
|
|
|
|
.if defined(LIB) && !empty(LIB)
|
|
_LIBS= lib${LIB}.a
|
|
|
|
lib${LIB}.a: ${OBJS} ${STATICOBJS}
|
|
@${ECHO} building static ${LIB} library
|
|
@rm -f ${.TARGET}
|
|
.if !defined(NM)
|
|
@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
|
|
.else
|
|
@${AR} cq ${.TARGET} `NM='${NM}' lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
|
|
.endif
|
|
${RANLIB} ${.TARGET}
|
|
.endif
|
|
|
|
.if !defined(INTERNALLIB)
|
|
|
|
.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
|
|
_LIBS+= lib${LIB}_p.a
|
|
POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po}
|
|
|
|
lib${LIB}_p.a: ${POBJS}
|
|
@${ECHO} building profiled ${LIB} library
|
|
@rm -f ${.TARGET}
|
|
.if !defined(NM)
|
|
@${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
|
|
.else
|
|
@${AR} cq ${.TARGET} `NM='${NM}' lorder ${POBJS} | tsort -q` ${ARADD}
|
|
.endif
|
|
${RANLIB} ${.TARGET}
|
|
.endif
|
|
|
|
.if defined(SHLIB_NAME) || \
|
|
defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
|
|
SOBJS+= ${OBJS:.o=.So}
|
|
.endif
|
|
|
|
.if defined(SHLIB_NAME)
|
|
_LIBS+= ${SHLIB_NAME}
|
|
|
|
${SHLIB_NAME}: ${SOBJS}
|
|
@${ECHO} building shared library ${SHLIB_NAME}
|
|
@rm -f ${.TARGET} ${SHLIB_LINK}
|
|
.if defined(SHLIB_LINK)
|
|
@ln -fs ${.TARGET} ${SHLIB_LINK}
|
|
.endif
|
|
.if !defined(NM)
|
|
@${CC} ${LDFLAGS} -shared -Wl,-x \
|
|
-o ${.TARGET} -Wl,-soname,${SONAME} \
|
|
`lorder ${SOBJS} | tsort -q` ${LDADD}
|
|
.else
|
|
@${CC} ${LDFLAGS} -shared -Wl,-x \
|
|
-o ${.TARGET} -Wl,-soname,${SONAME} \
|
|
`NM='${NM}' lorder ${SOBJS} | tsort -q` ${LDADD}
|
|
.endif
|
|
.if defined(CTFMERGE)
|
|
${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SOBJS}
|
|
.endif
|
|
.endif
|
|
|
|
.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
|
|
_LIBS+= lib${LIB}_pic.a
|
|
|
|
lib${LIB}_pic.a: ${SOBJS}
|
|
@${ECHO} building special pic ${LIB} library
|
|
@rm -f ${.TARGET}
|
|
@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
|
|
${RANLIB} ${.TARGET}
|
|
.endif
|
|
|
|
.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
|
|
LINTLIB= llib-l${LIB}.ln
|
|
_LIBS+= ${LINTLIB}
|
|
LINTOBJS+= ${SRCS:M*.c:.c=.ln}
|
|
|
|
${LINTLIB}: ${LINTOBJS}
|
|
@${ECHO} building lint library ${.TARGET}
|
|
@rm -f ${.TARGET}
|
|
${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
|
|
.endif
|
|
|
|
.endif # !defined(INTERNALLIB)
|
|
|
|
all: ${_LIBS}
|
|
|
|
.if ${MK_MAN} != "no"
|
|
all: _manpages
|
|
.endif
|
|
|
|
_EXTRADEPEND:
|
|
@TMP=_depend$$$$; \
|
|
sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
|
|
> $$TMP; \
|
|
mv $$TMP ${DEPENDFILE}
|
|
.if !defined(NO_EXTRADEPEND) && defined(SHLIB_NAME)
|
|
.if defined(DPADD) && !empty(DPADD)
|
|
echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
|
|
.endif
|
|
.endif
|
|
|
|
.if !target(install)
|
|
|
|
.if defined(PRECIOUSLIB)
|
|
.if !defined(NO_FSCHG)
|
|
SHLINSTALLFLAGS+= -fschg
|
|
.endif
|
|
SHLINSTALLFLAGS+= -S
|
|
.endif
|
|
|
|
_INSTALLFLAGS:= ${INSTALLFLAGS}
|
|
.for ie in ${INSTALLFLAGS_EDIT}
|
|
_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}}
|
|
.endfor
|
|
_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS}
|
|
.for ie in ${INSTALLFLAGS_EDIT}
|
|
_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}}
|
|
.endfor
|
|
|
|
.if !defined(INTERNALLIB)
|
|
realinstall: _libinstall
|
|
.ORDER: beforeinstall _libinstall
|
|
_libinstall:
|
|
.if defined(LIB) && !empty(LIB) && ${MK_INSTALLLIB} != "no"
|
|
${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
|
|
${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
|
|
.endif
|
|
.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
|
|
${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
|
|
${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
|
|
.endif
|
|
.if defined(SHLIB_NAME)
|
|
${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
|
|
${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
|
|
${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
|
|
.if defined(SHLIB_LINK)
|
|
.if ${SHLIBDIR} == ${LIBDIR}
|
|
ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
|
|
.else
|
|
ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
|
|
${DESTDIR}${LIBDIR}/${SHLIB_LINK}
|
|
.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME})
|
|
-chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
|
|
rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
|
|
.endif
|
|
.endif
|
|
.endif
|
|
.endif
|
|
.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) && ${MK_TOOLCHAIN} != "no"
|
|
${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
|
|
${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
|
|
.endif
|
|
.if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
|
|
${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
|
|
${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
|
|
.endif
|
|
.endif # !defined(INTERNALLIB)
|
|
|
|
.include <bsd.nls.mk>
|
|
.include <bsd.files.mk>
|
|
.include <bsd.incs.mk>
|
|
.include <bsd.links.mk>
|
|
|
|
.if ${MK_MAN} != "no"
|
|
realinstall: _maninstall
|
|
.ORDER: beforeinstall _maninstall
|
|
.endif
|
|
|
|
.endif
|
|
|
|
.if !target(lint)
|
|
lint: ${SRCS:M*.c}
|
|
${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
|
|
.endif
|
|
|
|
.if ${MK_MAN} != "no"
|
|
.include <bsd.man.mk>
|
|
.endif
|
|
|
|
.include <bsd.dep.mk>
|
|
|
|
.if !exists(${.OBJDIR}/${DEPENDFILE})
|
|
.if defined(LIB) && !empty(LIB)
|
|
${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
|
|
.for _S in ${SRCS:N*.[hly]}
|
|
${_S:R}.po: ${_S}
|
|
.endfor
|
|
.endif
|
|
.if defined(SHLIB_NAME) || \
|
|
defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
|
|
${SOBJS}: ${SRCS:M*.h}
|
|
.for _S in ${SRCS:N*.[hly]}
|
|
${_S:R}.So: ${_S}
|
|
.endfor
|
|
.endif
|
|
.endif
|
|
|
|
.if !target(clean)
|
|
clean:
|
|
.if defined(CLEANFILES) && !empty(CLEANFILES)
|
|
rm -f ${CLEANFILES}
|
|
.endif
|
|
.if defined(LIB) && !empty(LIB)
|
|
rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
|
|
.endif
|
|
.if !defined(INTERNALLIB)
|
|
.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
|
|
rm -f ${POBJS} ${POBJS:S/$/.tmp/}
|
|
.endif
|
|
.if defined(SHLIB_NAME) || \
|
|
defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
|
|
rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
|
|
.endif
|
|
.if defined(SHLIB_NAME)
|
|
.if defined(SHLIB_LINK)
|
|
rm -f ${SHLIB_LINK}
|
|
.endif
|
|
.if defined(LIB) && !empty(LIB)
|
|
rm -f lib${LIB}.so.* lib${LIB}.so
|
|
.endif
|
|
.endif
|
|
.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
|
|
rm -f ${LINTOBJS}
|
|
.endif
|
|
.endif # !defined(INTERNALLIB)
|
|
.if defined(_LIBS) && !empty(_LIBS)
|
|
rm -f ${_LIBS}
|
|
.endif
|
|
.if defined(CLEANDIRS) && !empty(CLEANDIRS)
|
|
rm -rf ${CLEANDIRS}
|
|
.endif
|
|
.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS)
|
|
rm -f ${VERSION_MAP}
|
|
.endif
|
|
.endif
|
|
|
|
.include <bsd.obj.mk>
|
|
|
|
.include <bsd.sys.mk>
|