Commit edca6320 authored by Peter Wu's avatar Peter Wu

build_path: document use of -fmacro-prefix-map/-ffile-prefix-map

parent 56d3c751
......@@ -22,10 +22,20 @@ post-processing tool to
change them to a pre-determined value[^debugedit]. A work-around is to
[define the build path as part of the build environment]({{ "/docs/perimeter/" | prepend: site.baseurl }}),
however `reprotest` changes it so this makes it harder to assess reproducibility.
Another work-around is GCC's `-fdebug-prefix-map`, though it does not
fix other sources of irreproducibility such as `__FILE__`, and in some
packages the option itself is saved into other parts of the build
output by another tool.
Certain compiler flags can work around the issue:
* [`-fdebug-prefix-map=OLD=NEW`](
can strip directory prefixes from debug info.
(available in all GCC versions, Clang 3.8)
* [`-fmacro-prefix-map=OLD=NEW`](
is similar to `-fdebug-prefix-map`, but addresses irreproducibility due to
the use of `__FILE__` macros and alike.
(available since GCC 8, Clang support is [pending](
* `-ffile-prefix-map=OLD=NEW` is an alias for both `-fdebug-prefix-map` and
(available since GCC 8, Clang support is [pending](
Note that some packages save the compile options in the build output.
[^debugedit]: [debugedit]( can replace the path used at build time by a predefined one but it does that by rewriting bytes in place. As this does not reorder the hash table of strings, the resulting bytes are still depending on the original build path.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment