From 9bf6eb7f82d4b6996e10dbd5780a17850fb93fd8 Mon Sep 17 00:00:00 2001 From: Andreas Rammhold Date: Fri, 27 Nov 2020 16:31:18 +0100 Subject: chore(tvix): avoid unnesscary rebuilds of protos and tvix For the build of tvix we can safely ignore all the files in src/protos as well as all the nix files in the root of the repository. By passing the input sources through builtins.filterSource we can make a per-file decision whether or not we want to copy it into the store (in other words: if we consider it relevant for the build). This enables much faster development on the actual build expression. Change-Id: Ib4c01dbe9cbfa9770922f6257af2a7259814ce0d Reviewed-on: https://cl.tvl.fyi/c/depot/+/2159 Tested-by: BuildkiteCI Reviewed-by: glittershark Reviewed-by: lukegb --- third_party/nix/default.nix | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/third_party/nix/default.nix b/third_party/nix/default.nix index 15eb69d184da..b48551cff0d1 100644 --- a/third_party/nix/default.nix +++ b/third_party/nix/default.nix @@ -12,12 +12,36 @@ let customMemoryManagement = false; }; - src = ./.; + src = let + srcDir = ./.; + # create relative paths for all the sources we are filtering + asRelative = path: + let + srcS = toString srcDir; + pathS = toString path; + in + if ! lib.hasPrefix srcS pathS then + throw "Path is outside of the working directory." + else + lib.removePrefix srcS pathS; + + in builtins.filterSource (path: type: + # Strip out .nix files that are in the root of the repository. Changing + # the expression of tvix shouldn't cause a rebuild of tvix unless really + # required. + !(dirOf (asRelative path) == "/" && lib.hasSuffix ".nix" path) && + + # remove the proto files from the repo as those are compiled separately + !(lib.hasPrefix "src/proto" (asRelative path)) && + + # ignore result symlinks + !(type == "symlink" && lib.hasPrefix "result" (baseNameOf path)) + ) srcDir; # Proto generation in CMake is theoretically possible, but that is # very theoretical - this does it in Nix instead. protoSrcs = pkgs.runCommand "nix-proto-srcs" {} '' - export PROTO_SRCS=${src + "/src/proto"} + export PROTO_SRCS=${./src/proto} mkdir -p $out/libproto ${pkgs.protobuf}/bin/protoc -I=$PROTO_SRCS \ --cpp_out=$out/libproto \ -- cgit 1.4.1