[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