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
|
MK_WERROR= no
|
||||||
.endif
|
.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)
|
.if defined(DEBUG_FLAGS)
|
||||||
CFLAGS+=${DEBUG_FLAGS}
|
CFLAGS+=${DEBUG_FLAGS}
|
||||||
CXXFLAGS+=${DEBUG_FLAGS}
|
CXXFLAGS+=${DEBUG_FLAGS}
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ __DEFAULT_NO_OPTIONS = \
|
|||||||
CCACHE_BUILD \
|
CCACHE_BUILD \
|
||||||
CTF \
|
CTF \
|
||||||
INSTALL_AS_USER \
|
INSTALL_AS_USER \
|
||||||
|
REPRODUCIBLE_BUILD \
|
||||||
RETPOLINE \
|
RETPOLINE \
|
||||||
RUN_TESTS \
|
RUN_TESTS \
|
||||||
STALE_STAGED \
|
STALE_STAGED \
|
||||||
|
|||||||
Reference in New Issue
Block a user