share/mk: Substitute reproducible prefixes in dwarf info
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
This commit is contained in:
@@ -13,6 +13,28 @@ CFLAGS+= -DNDEBUG
|
||||
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}
|
||||
|
||||
@@ -78,6 +78,7 @@ __DEFAULT_NO_OPTIONS = \
|
||||
CCACHE_BUILD \
|
||||
CTF \
|
||||
INSTALL_AS_USER \
|
||||
REPRODUCIBLE_BUILD \
|
||||
RETPOLINE \
|
||||
RUN_TESTS \
|
||||
STALE_STAGED \
|
||||
|
||||
Reference in New Issue
Block a user