mirror of
https://github.com/opnsense/src.git
synced 2026-06-18 13:10:00 -04:00
Ensure that worlds/releases built from different source paths are
reproducible. Currently they are not since src and obj paths are
embedded in DWARF info. There are some uses of __FILE__ in the src tree
as well, and they are similarly handled by this change.
Use /usr/src and /usr/obj as the canonical src and obj paths when
WITH_REPRODUCIBLE_BUILD is defined. Define a DEBUG_PREFIX variable
which is used to ask the compiler to substitute paths in output files
using -ffile-prefix-map.
Compat builds (i.e., lib32) complicate things since they override
OBJROOT to point to obj-${compat} but still refer to headers from the
native objroot (e.g., llvm headers).
MFC after: 1 month
Sponsored by: The FreeBSD Foundation
Sponsored by: Klara, Inc.
Differential Revision: https://reviews.freebsd.org/D50951
68 lines
1.9 KiB
Makefile
68 lines
1.9 KiB
Makefile
#
|
|
# This file configures debug options for compiled targets. It is meant
|
|
# to consolidate common logic in bsd.prog.mk and bsd.lib.mk. It should
|
|
# not be included directly by Makefiles.
|
|
#
|
|
|
|
.include <bsd.opts.mk>
|
|
|
|
.if ${MK_ASSERT_DEBUG} == "no"
|
|
CFLAGS+= -DNDEBUG
|
|
# XXX: shouldn't we ensure that !asserts marks potentially unused variables as
|
|
# __unused instead of disabling -Werror globally?
|
|
MK_WERROR= no
|
|
.endif
|
|
|
|
# If reproducible build mode is enabled, map the root of the source
|
|
# directory to /usr/src and the root of the object directory to
|
|
# /usr/obj.
|
|
.if ${MK_REPRODUCIBLE_BUILD} != "no" && !defined(DEBUG_PREFIX)
|
|
.if defined(SRCTOP)
|
|
DEBUG_PREFIX+= ${SRCTOP:S,/$,,}=/usr/src
|
|
.endif
|
|
.if defined(OBJROOT)
|
|
# Strip off compat subdirectories, e.g., /usr/obj/usr/src/amd64.amd64/obj-lib32
|
|
# becomes /usr/obj/usr/src/amd64.amd64, since object files compiled there might
|
|
# refer to something outside the root.
|
|
DEBUG_PREFIX+= ${OBJROOT:S,/$,,:C,/obj-[^/]*$,,}=/usr/obj
|
|
.endif
|
|
.endif
|
|
|
|
.if defined(DEBUG_PREFIX)
|
|
.for map in ${DEBUG_PREFIX}
|
|
CFLAGS+= -ffile-prefix-map=${map}
|
|
CXXFLAGS+= -ffile-prefix-map=${map}
|
|
.endfor
|
|
.endif
|
|
|
|
.if defined(DEBUG_FLAGS)
|
|
CFLAGS+=${DEBUG_FLAGS}
|
|
CXXFLAGS+=${DEBUG_FLAGS}
|
|
|
|
.if ${MK_CTF} != "no" && ${DEBUG_FLAGS:M-g} != ""
|
|
CTFFLAGS+= -g
|
|
.endif
|
|
.else
|
|
STRIP?= -s
|
|
.endif
|
|
|
|
.if ${MK_DEBUG_FILES} != "no" && empty(DEBUG_FLAGS:M-g) && \
|
|
empty(DEBUG_FLAGS:M-gdwarf*)
|
|
.if !${COMPILER_FEATURES:Mcompressed-debug}
|
|
CFLAGS+= ${DEBUG_FILES_CFLAGS:N-gz*}
|
|
CXXFLAGS+= ${DEBUG_FILES_CFLAGS:N-gz*}
|
|
.else
|
|
CFLAGS+= ${DEBUG_FILES_CFLAGS}
|
|
CXXFLAGS+= ${DEBUG_FILES_CFLAGS}
|
|
.endif
|
|
CTFFLAGS+= -g
|
|
.endif
|
|
|
|
_debuginstall:
|
|
.if ${MK_DEBUG_FILES} != "no" && defined(DEBUGFILE)
|
|
.if defined(DEBUGMKDIR)
|
|
${INSTALL} ${TAG_ARGS:D${TAG_ARGS},dbg} -d ${DESTDIR}${DEBUGFILEDIR}/
|
|
.endif
|
|
${INSTALL} ${TAG_ARGS:D${TAG_ARGS},dbg} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \
|
|
${DEBUGFILE} ${DESTDIR}${DEBUGFILEDIR}/${DEBUGFILE}
|
|
.endif
|