The branch main has been updated by imp:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=faeaa25f562493370a5da84b429ab0a117c3213a

commit faeaa25f562493370a5da84b429ab0a117c3213a
Author:     Warner Losh <[email protected]>
AuthorDate: 2025-12-28 07:31:05 +0000
Commit:     Warner Losh <[email protected]>
CommitDate: 2025-12-28 08:16:39 +0000

    kernel: MK_REPRODUCIBLE_PATHS for full paths vs /usr/src
    
    There are many environments that you do not want the paths to be
    canonicalized. For example, if I always build a product from a specific
    path in a jail that's dependent on the product version, I don't want
    that to be sanitized to /usr/src because when I have profiling tools run
    against multiple kernels, I can't do A/B testing and results processing
    if everything points to /usr/src (sadly, the profiling tools cannot
    remap back to the original like gdb can). Since we need both active at
    the same time, symbloic link fallbacks don't work.
    
    We do want the rest of the build to be reproducible, however. We'll get
    the same binaries if we rebuild later since we always rebuild with the
    same path.
    
    Turn them both on for maximum reproduction for environments where that
    cannot be guaranteed.
    
    Sponsored by:           Netflix
    Input from:             emaste, ivy
    Differential Revision:  https://reviews.freebsd.org/D52959
---
 share/man/man5/src.conf.5                   | 9 ++++++++-
 share/mk/bsd.debug.mk                       | 2 +-
 share/mk/src.opts.mk                        | 1 +
 sys/conf/kern.opts.mk                       | 1 +
 sys/conf/kern.post.mk                       | 2 +-
 sys/conf/kmod.mk                            | 2 +-
 tools/build/options/WITH_REPRODUCIBLE_PATHS | 6 ++++++
 7 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5
index 1d55ab074a45..a047dfb528fd 100644
--- a/share/man/man5/src.conf.5
+++ b/share/man/man5/src.conf.5
@@ -1,5 +1,5 @@
 .\" DO NOT EDIT-- this file is @generated by tools/build/options/makeman.
-.Dd December 21, 2025
+.Dd December 28, 2025
 .Dt SRC.CONF 5
 .Os
 .Sh NAME
@@ -1590,6 +1590,13 @@ option.
 Exclude build metadata (such as the build time, user, or host)
 from the kernel, boot loaders, and uname output, so that builds produce
 bit-for-bit identical output.
+.It Va WITH_REPRODUCIBLE_PATHS
+Modify the paths encoded in binary artifacts to be standard path
+
+Normaly, the actual path is encoded in the binary. However, this makes the 
build
+differ depending on the path it was built from. With this option enabled, the
+paths recorded are /usr/src, regardless of the actual path. With this option
+disabled, the actual paths are recorded.
 .It Va WITHOUT_RESCUE
 Do not build
 .Xr rescue 8 .
diff --git a/share/mk/bsd.debug.mk b/share/mk/bsd.debug.mk
index cf2fb4356aef..9f4dc5d90484 100644
--- a/share/mk/bsd.debug.mk
+++ b/share/mk/bsd.debug.mk
@@ -16,7 +16,7 @@ MK_WERROR=    no
 # 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 ${MK_REPRODUCIBLE_PATHS} != "no" && !defined(DEBUG_PREFIX)
 .if defined(SRCTOP)
 DEBUG_PREFIX+= ${SRCTOP:S,/$,,}=/usr/src
 .endif
diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk
index 0d806702417f..0805c88976da 100644
--- a/share/mk/src.opts.mk
+++ b/share/mk/src.opts.mk
@@ -217,6 +217,7 @@ __DEFAULT_NO_OPTIONS = \
     MALLOC_PRODUCTION \
     OFED_EXTRA \
     OPENLDAP \
+    REPRODUCIBLE_PATHS \
     RPCBIND_WARMSTART_SUPPORT \
     SORT_THREADS \
     ZONEINFO_LEAPSECONDS_SUPPORT \
diff --git a/sys/conf/kern.opts.mk b/sys/conf/kern.opts.mk
index cef4dd11ba58..81b117492916 100644
--- a/sys/conf/kern.opts.mk
+++ b/sys/conf/kern.opts.mk
@@ -56,6 +56,7 @@ __DEFAULT_NO_OPTIONS = \
     KERNEL_RETPOLINE \
     RATELIMIT \
     REPRODUCIBLE_BUILD \
+    REPRODUCIBLE_PATHS \
     VERIEXEC
 
 # Some options are totally broken on some architectures. We disable them. If 
you
diff --git a/sys/conf/kern.post.mk b/sys/conf/kern.post.mk
index 7cdfd17778db..343abc5853f7 100644
--- a/sys/conf/kern.post.mk
+++ b/sys/conf/kern.post.mk
@@ -372,7 +372,7 @@ _ILINKS+= x86
 _ILINKS+= i386
 .endif
 
-.if ${MK_REPRODUCIBLE_BUILD} != "no"
+.if ${MK_REPRODUCIBLE_PATHS} != "no"
 PREFIX_SYSDIR=/usr/src/sys
 PREFIX_OBJDIR=/usr/obj/usr/src/${MACHINE}.${MACHINE_CPUARCH}/sys/${KERN_IDENT}
 CFLAGS+= -ffile-prefix-map=${SYSDIR}=${PREFIX_SYSDIR}
diff --git a/sys/conf/kmod.mk b/sys/conf/kmod.mk
index 6e20dce0653f..edc311348971 100644
--- a/sys/conf/kmod.mk
+++ b/sys/conf/kmod.mk
@@ -303,7 +303,7 @@ all: ${PROG}
 beforedepend: ${_ILINKS}
 beforebuild: ${_ILINKS}
 
-.if ${MK_REPRODUCIBLE_BUILD} != "no"
+.if ${MK_REPRODUCIBLE_PATHS} != "no"
 PREFIX_SYSDIR=/usr/src/sys
 CFLAGS+= -ffile-prefix-map=${SYSDIR}=${PREFIX_SYSDIR}
 .if defined(KERNBUILDDIR)
diff --git a/tools/build/options/WITH_REPRODUCIBLE_PATHS 
b/tools/build/options/WITH_REPRODUCIBLE_PATHS
new file mode 100644
index 000000000000..e71ebff204d7
--- /dev/null
+++ b/tools/build/options/WITH_REPRODUCIBLE_PATHS
@@ -0,0 +1,6 @@
+Modify the paths encoded in binary artifacts to be standard path
+
+Normaly, the actual path is encoded in the binary. However, this makes the 
build
+differ depending on the path it was built from. With this option enabled, the
+paths recorded are /usr/src, regardless of the actual path. With this option
+disabled, the actual paths are recorded.

Reply via email to