Explicitly specify that the beforelinking target depends on the

generated object files, ensuring that the beforelinking recipe won't be
executed until compilation has finished.

Also define SHLIB_NAME_FULL to denote ${SHLIB_NAME}.debug if
DEBUG_FILES is set and ${SHLIB_NAME} otherwise, which helps avoid
obfuscating the compilation and linking rules.

Reviewed by:	emaste
Approved by:	emaste (co-mentor)
This commit is contained in:
markj 2012-12-31 21:54:43 +00:00
parent a381b05232
commit 2286811d7e
2 changed files with 15 additions and 10 deletions

View File

@ -165,19 +165,22 @@ SOBJS+= ${OBJS:.o=.So}
.if defined(SHLIB_NAME)
_LIBS+= ${SHLIB_NAME}
.if defined(DEBUG_FLAGS)
SHLIB_NAME_FULL=${SHLIB_NAME}.debug
.else
SHLIB_NAME_FULL=${SHLIB_NAME}
.endif
SOLINKOPTS= -shared -Wl,-x
.if !defined(ALLOW_SHARED_TEXTREL)
SOLINKOPTS+= -Wl,--fatal-warnings -Wl,--warn-shared-textrel
.endif
.if target(beforelinking)
${SHLIB_NAME}: beforelinking
.endif
.if defined(DEBUG_FLAGS)
${SHLIB_NAME}.debug: ${SOBJS}
.else
${SHLIB_NAME}: ${SOBJS}
beforelinking: ${SOBJS}
${SHLIB_NAME_FULL}: beforelinking
.endif
${SHLIB_NAME_FULL}: ${SOBJS}
@${ECHO} building shared library ${SHLIB_NAME}
@rm -f ${SHLIB_NAME} ${SHLIB_LINK}
.if defined(SHLIB_LINK)
@ -197,12 +200,12 @@ ${SHLIB_NAME}: ${SOBJS}
.endif
.if defined(DEBUG_FLAGS)
${SHLIB_NAME}: ${SHLIB_NAME}.debug ${SHLIB_NAME}.symbols
${SHLIB_NAME}: ${SHLIB_NAME_FULL} ${SHLIB_NAME}.symbols
${OBJCOPY} --strip-debug --add-gnu-debuglink=${SHLIB_NAME}.symbols \
${SHLIB_NAME}.debug ${.TARGET}
${SHLIB_NAME_FULL} ${.TARGET}
${SHLIB_NAME}.symbols: ${SHLIB_NAME}.debug
${OBJCOPY} --only-keep-debug ${SHLIB_NAME}.debug ${.TARGET}
${SHLIB_NAME}.symbols: ${SHLIB_NAME_FULL}
${OBJCOPY} --only-keep-debug ${SHLIB_NAME_FULL} ${.TARGET}
.endif
.endif

View File

@ -46,6 +46,7 @@ PROG= ${PROG_CXX}
OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
.if target(beforelinking)
beforelinking: ${OBJS}
${PROG}: beforelinking
.endif
${PROG}: ${OBJS}
@ -75,6 +76,7 @@ SRCS= ${PROG}.c
OBJS= ${PROG}.o
.if target(beforelinking)
beforelinking: ${OBJS}
${PROG}: beforelinking
.endif
${PROG}: ${OBJS}