[PATCH] D74519: [gn build] Make build locally deterministic
Nico Weber via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 14 18:56:25 PST 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rGead0b76382a5: [gn build] Make build locally deterministic (authored by thakis).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D74519/new/
https://reviews.llvm.org/D74519
Files:
llvm/utils/gn/build/BUILD.gn
llvm/utils/gn/build/toolchain/BUILD.gn
llvm/utils/gn/docs/deterministic.md
Index: llvm/utils/gn/docs/deterministic.md
===================================================================
--- /dev/null
+++ llvm/utils/gn/docs/deterministic.md
@@ -0,0 +1,18 @@
+Deterministic builds with LLVM's GN build
+=========================================
+
+Summary: Use the following args.gn.
+
+ use_relative_paths_in_debug_info = true
+
+It is possible to produce [locally deterministic][1] builds of LLVM
+with the GN build. It requires some configuration though.
+
+1. Make debug info use relative paths by setting
+ `use_relative_paths_in_debug_info = true` in your `args.gn` file. With this
+ set, current debuggers need minor configuration to keep working. See
+ "Getting to local determinism" and "Getting debuggers to work well with
+ locally deterministic builds" in the [deterministic builds][1] documentation
+ for details.
+
+1: http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html
Index: llvm/utils/gn/build/toolchain/BUILD.gn
===================================================================
--- llvm/utils/gn/build/toolchain/BUILD.gn
+++ llvm/utils/gn/build/toolchain/BUILD.gn
@@ -39,7 +39,7 @@
tool("alink") {
if (current_os == "mac") {
- command = "libtool -static -no_warning_for_no_symbols {{arflags}} -o {{output}} {{inputs}}"
+ command = "libtool -D -static -no_warning_for_no_symbols {{arflags}} -o {{output}} {{inputs}}"
} else {
# Remove the output file first so that ar doesn't try to modify the
# existing file.
Index: llvm/utils/gn/build/BUILD.gn
===================================================================
--- llvm/utils/gn/build/BUILD.gn
+++ llvm/utils/gn/build/BUILD.gn
@@ -11,6 +11,14 @@
# out/gn/bin/llvm-undname ...`
# to generate a HTML report for the binaries passed in the last line.
llvm_build_instrumented_coverage = false
+
+ # If set, puts relative paths in debug info.
+ # Makes the build output independent of the build directory, but makes
+ # most debuggers harder to use. See "Getting to local determinism" and
+ # "Getting debuggers to work well with locally deterministic builds" in
+ # http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html
+ # for more information.
+ use_relative_paths_in_debug_info = false
}
assert(!llvm_build_instrumented_coverage || is_clang,
@@ -168,6 +176,37 @@
]
ldflags += [ "-fprofile-instr-generate" ]
}
+
+ # Deterministic build setup, see
+ # http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html
+ if (current_os == "win") {
+ ldflags += [ "/pdbaltpath:%_PDB%" ]
+ }
+ if (is_clang) {
+ cflags += [
+ "-no-canonical-prefixes",
+ "-Werror=date-time",
+ ]
+ if (current_os == "win") {
+ cflags += [
+ "-fmsc-version=1916",
+ "/X",
+ ]
+ }
+ if (current_os == "win" && use_lld) {
+ cflags += [ "/Brepro" ]
+ ldflags += [
+ "/Brepro",
+ "/lldignoreenv",
+ ]
+ }
+ if (use_relative_paths_in_debug_info) {
+ cflags += [
+ "-fdebug-compilation-dir",
+ ".",
+ ]
+ }
+ }
}
config("no_exceptions") {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74519.244807.patch
Type: text/x-patch
Size: 3186 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200215/06c3958f/attachment.bin>
More information about the llvm-commits
mailing list