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 --- |