diff options
author | Andreas Rammhold <andi@notmuch.email> | 2020-11-27T15·31+0100 |
---|---|---|
committer | andi <andi@notmuch.email> | 2020-11-27T19·09+0000 |
commit | 9bf6eb7f82d4b6996e10dbd5780a17850fb93fd8 (patch) | |
tree | 90d7014b19280b3b4fb721f2310e0c6ee74a70bc /third_party/nix | |
parent | e772f38a5e19dc2f1cdd6c5b9175693eb17c0249 (diff) |
chore(tvix): avoid unnesscary rebuilds of protos and tvix r/1934
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 <grfn@gws.fyi> Reviewed-by: lukegb <lukegb@tvl.fyi>
Diffstat (limited to 'third_party/nix')
-rw-r--r-- | third_party/nix/default.nix | 28 |
1 files 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 \ |