Deleted Added
full compact
lib.mk (253883) lib.mk (268437)
1# $Id: lib.mk,v 1.49 2013/07/18 05:46:24 sjg Exp $
1# $Id: lib.mk,v 1.51 2014/05/23 01:30:36 sjg Exp $
2
3.if !target(__${.PARSEFILE}__)
4__${.PARSEFILE}__:
5
6.include <init.mk>
7
8.if ${OBJECT_FMT} == "ELF"
9NEED_SOLINKS?= yes

--- 40 unchanged lines hidden (view full) ---

50
51# Set PICFLAGS to cc flags for producing position-independent code,
52# if not already set. Includes -DPIC, if required.
53
54# Data-driven table using make variables to control how shared libraries
55# are built for different platforms and object formats.
56# OBJECT_FMT: currently either "ELF" or "a.out", from <bsd.own.mk>
57# SHLIB_SOVERSION: version number to be compiled into a shared library
2
3.if !target(__${.PARSEFILE}__)
4__${.PARSEFILE}__:
5
6.include <init.mk>
7
8.if ${OBJECT_FMT} == "ELF"
9NEED_SOLINKS?= yes

--- 40 unchanged lines hidden (view full) ---

50
51# Set PICFLAGS to cc flags for producing position-independent code,
52# if not already set. Includes -DPIC, if required.
53
54# Data-driven table using make variables to control how shared libraries
55# are built for different platforms and object formats.
56# OBJECT_FMT: currently either "ELF" or "a.out", from <bsd.own.mk>
57# SHLIB_SOVERSION: version number to be compiled into a shared library
58# via -soname. Usualy ${SHLIB_MAJOR} on ELF.
58# via -soname. Usually ${SHLIB_MAJOR} on ELF.
59# NetBSD/pmax used to use ${SHLIB_MAJOR}[.${SHLIB_MINOR}
60# [.${SHLIB_TEENY}]]
61# SHLIB_SHFLAGS: Flags to tell ${LD} to emit shared library.
62# with ELF, also set shared-lib version for ld.so.
63# SHLIB_LDSTARTFILE: support .o file, call C++ file-level constructors
64# SHLIB_LDENDFILE: support .o file, call C++ file-level destructors
65# FPICFLAGS: flags for ${FC} to compile .[fF] files to .so objects.
66# CPPICFLAGS: flags for ${CPP} to preprocess .[sS] files for ${AS}

--- 51 unchanged lines hidden (view full) ---

118# Platform-independent linker flags for ELF shared libraries
119.if ${OBJECT_FMT} == "ELF"
120SHLIB_SOVERSION= ${SHLIB_MAJOR}
121SHLIB_SHFLAGS= -soname lib${LIB}.so.${SHLIB_SOVERSION}
122SHLIB_LDSTARTFILE?= /usr/lib/crtbeginS.o
123SHLIB_LDENDFILE?= /usr/lib/crtendS.o
124.endif
125
59# NetBSD/pmax used to use ${SHLIB_MAJOR}[.${SHLIB_MINOR}
60# [.${SHLIB_TEENY}]]
61# SHLIB_SHFLAGS: Flags to tell ${LD} to emit shared library.
62# with ELF, also set shared-lib version for ld.so.
63# SHLIB_LDSTARTFILE: support .o file, call C++ file-level constructors
64# SHLIB_LDENDFILE: support .o file, call C++ file-level destructors
65# FPICFLAGS: flags for ${FC} to compile .[fF] files to .so objects.
66# CPPICFLAGS: flags for ${CPP} to preprocess .[sS] files for ${AS}

--- 51 unchanged lines hidden (view full) ---

118# Platform-independent linker flags for ELF shared libraries
119.if ${OBJECT_FMT} == "ELF"
120SHLIB_SOVERSION= ${SHLIB_MAJOR}
121SHLIB_SHFLAGS= -soname lib${LIB}.so.${SHLIB_SOVERSION}
122SHLIB_LDSTARTFILE?= /usr/lib/crtbeginS.o
123SHLIB_LDENDFILE?= /usr/lib/crtendS.o
124.endif
125
126# for compatability with the following
126# for compatibility with the following
127CC_PIC?= ${CPICFLAGS}
128LD_shared=${SHLIB_SHFLAGS}
129
130.endif # NetBSD
131
132.if ${TARGET_OSNAME} == "FreeBSD"
133.if ${OBJECT_FMT} == "ELF"
134SHLIB_SOVERSION= ${SHLIB_MAJOR}

--- 35 unchanged lines hidden (view full) ---

170DLLIB=
171# lorder does not grok anything but .o
172LD_sobjs=`${LORDER} ${OBJS} | ${TSORT} | sed 's,\.o,.so,'`
173LD_pobjs=`${LORDER} ${OBJS} | ${TSORT} | sed 's,\.o,.po,'`
174AR_cq= -cqs
175.elif ${TARGET_OSNAME} == "FreeBSD"
176LD_solib= lib${LIB}_pic.a
177.elif ${TARGET_OSNAME} == "Linux"
127CC_PIC?= ${CPICFLAGS}
128LD_shared=${SHLIB_SHFLAGS}
129
130.endif # NetBSD
131
132.if ${TARGET_OSNAME} == "FreeBSD"
133.if ${OBJECT_FMT} == "ELF"
134SHLIB_SOVERSION= ${SHLIB_MAJOR}

--- 35 unchanged lines hidden (view full) ---

170DLLIB=
171# lorder does not grok anything but .o
172LD_sobjs=`${LORDER} ${OBJS} | ${TSORT} | sed 's,\.o,.so,'`
173LD_pobjs=`${LORDER} ${OBJS} | ${TSORT} | sed 's,\.o,.po,'`
174AR_cq= -cqs
175.elif ${TARGET_OSNAME} == "FreeBSD"
176LD_solib= lib${LIB}_pic.a
177.elif ${TARGET_OSNAME} == "Linux"
178SHLIB_LD = ${CC}
178# this is ambiguous of course
179# this is ambiguous of course
179LD_shared=-shared -h lib${LIB}.so.${SHLIB_MAJOR}
180LD_solib= --whole-archive lib${LIB}_pic.a
180LD_shared=-shared -Wl,"-h lib${LIB}.so.${SHLIB_MAJOR}"
181LD_solib= -Wl,--whole-archive lib${LIB}_pic.a -Wl,--no-whole-archive
181# Linux uses GNU ld, which is a multi-pass linker
182# so we don't need to use lorder or tsort
183LD_objs = ${OBJS}
184LD_pobjs = ${POBJS}
185LD_sobjs = ${SOBJS}
186.elif ${TARGET_OSNAME} == "Darwin"
187SHLIB_LD = ${CC}
188SHLIB_INSTALL_VERSION ?= ${SHLIB_MAJOR}

--- 65 unchanged lines hidden (view full) ---

254# (typically .So)
255# yes, 42 is a random number.
256.if ${MK_META_MODE} == "yes" && ${SRCS:Uno:[\#]} > 42
257OPTIMIZE_OBJECT_META_FILES ?= yes
258.endif
259
260
261.if ${MK_LIBTOOL} == "yes"
182# Linux uses GNU ld, which is a multi-pass linker
183# so we don't need to use lorder or tsort
184LD_objs = ${OBJS}
185LD_pobjs = ${POBJS}
186LD_sobjs = ${SOBJS}
187.elif ${TARGET_OSNAME} == "Darwin"
188SHLIB_LD = ${CC}
189SHLIB_INSTALL_VERSION ?= ${SHLIB_MAJOR}

--- 65 unchanged lines hidden (view full) ---

255# (typically .So)
256# yes, 42 is a random number.
257.if ${MK_META_MODE} == "yes" && ${SRCS:Uno:[\#]} > 42
258OPTIMIZE_OBJECT_META_FILES ?= yes
259.endif
260
261
262.if ${MK_LIBTOOL} == "yes"
262# because libtool is so facist about naming the object files,
263# because libtool is so fascist about naming the object files,
263# we cannot (yet) build profiled libs
264MK_PROFILE=no
265_LIBS=lib${LIB}.a
266.if exists(${.CURDIR}/shlib_version)
267SHLIB_AGE != . ${.CURDIR}/shlib_version ; echo $$age
268.endif
269.else
270# for the normal .a we do not want to strip symbols

--- 137 unchanged lines hidden (view full) ---

408LT_STATIC=
409.endif
410SHLIB_AGE?=0
411
412# .lo's are created as a side effect
413.s.o .S.o .c.o:
414 ${LIBTOOL} --mode=compile ${CC} ${LT_STATIC} ${CFLAGS} ${CPPFLAGS} ${IMPFLAGS} -c ${.IMPSRC}
415
264# we cannot (yet) build profiled libs
265MK_PROFILE=no
266_LIBS=lib${LIB}.a
267.if exists(${.CURDIR}/shlib_version)
268SHLIB_AGE != . ${.CURDIR}/shlib_version ; echo $$age
269.endif
270.else
271# for the normal .a we do not want to strip symbols

--- 137 unchanged lines hidden (view full) ---

409LT_STATIC=
410.endif
411SHLIB_AGE?=0
412
413# .lo's are created as a side effect
414.s.o .S.o .c.o:
415 ${LIBTOOL} --mode=compile ${CC} ${LT_STATIC} ${CFLAGS} ${CPPFLAGS} ${IMPFLAGS} -c ${.IMPSRC}
416
416# can't really do profiled libs with libtool - its too facist about
417# can't really do profiled libs with libtool - its too fascist about
417# naming the output...
418lib${LIB}.a:: ${OBJS}
419 @rm -f ${.TARGET}
420 ${LIBTOOL} --mode=link ${CC} ${LT_STATIC} -o ${.TARGET:.a=.la} ${OBJS:.o=.lo} -rpath ${SHLIBDIR}:/usr/lib -version-info ${SHLIB_MAJOR}:${SHLIB_MINOR}:${SHLIB_AGE}
421 @ln .libs/${.TARGET} .
422
423lib${LIB}.${LD_so}:: lib${LIB}.a
424 @[ -s ${.TARGET}.${SHLIB_AGE} ] || { ln -s .libs/lib${LIB}.${LD_so}* . 2>/dev/null; : }

--- 178 unchanged lines hidden ---
418# naming the output...
419lib${LIB}.a:: ${OBJS}
420 @rm -f ${.TARGET}
421 ${LIBTOOL} --mode=link ${CC} ${LT_STATIC} -o ${.TARGET:.a=.la} ${OBJS:.o=.lo} -rpath ${SHLIBDIR}:/usr/lib -version-info ${SHLIB_MAJOR}:${SHLIB_MINOR}:${SHLIB_AGE}
422 @ln .libs/${.TARGET} .
423
424lib${LIB}.${LD_so}:: lib${LIB}.a
425 @[ -s ${.TARGET}.${SHLIB_AGE} ] || { ln -s .libs/lib${LIB}.${LD_so}* . 2>/dev/null; : }

--- 178 unchanged lines hidden ---