Skip to content

Commit

Permalink
Revert "Revert "Merge pull request roc-lang#6113 from JRMurr/nix-buil…
Browse files Browse the repository at this point in the history
…d-file-sets""
  • Loading branch information
JRMurr committed Dec 14, 2023
1 parent 43cfcae commit 2f98490
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 8 deletions.
1 change: 0 additions & 1 deletion crates/wasm_interp/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
mod frame;
mod instance;
mod tests;
mod value_store;
pub mod wasi;

Expand Down
8 changes: 4 additions & 4 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
description = "Roc flake";

inputs = {
nixpkgs.url = "github:nixos/nixpkgs?rev=676fe5e01b9a41fa14aaa48d87685677664104b1";

nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# rust from nixpkgs has some libc problems, this is patched in the rust-overlay
rust-overlay = {
url = "github:oxalica/rust-overlay";
Expand Down
4 changes: 3 additions & 1 deletion nix/builder.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@ let
inherit (compile-deps) zigPkg llvmPkgs llvmVersion llvmMajorMinorStr glibcPath libGccSPath;

subPackagePath = if subPackage != null then "crates/${subPackage}" else null;

filteredSource = pkgs.callPackage ./fileFilter.nix { };
in
rustPlatform.buildRustPackage {
pname = "roc" + lib.optionalString (subPackage != null) "_${subPackage}";
version = "0.0.1";

buildAndTestSubdir = subPackagePath;

src = pkgs.nix-gitignore.gitignoreSource [ ] ../.;
src = filteredSource;

cargoLock = {
lockFile = ../Cargo.lock;
Expand Down
80 changes: 80 additions & 0 deletions nix/fileFilter.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
{ lib, nix-gitignore }:
let
# See https://nix.dev/tutorials/file-sets for a guide on how the file set api works

fs = lib.fileset;

fileDoesNotHaveExt = fileExts: file: (!lib.lists.any (ext: file.hasExt ext) fileExts);

repoRoot = ../.;

# The file set api does not currently have a way to easily remove folders dynamically.
# The nix build does not run tests, so we try to remove any folders with only tests.
removedTests =
let
dirFilter = pathStr: (
let dirName = baseNameOf pathStr; in !(
# remove any folder whos name is `tests` or starts with `test_`
dirName == "tests"
)
);
removeTestFilter =
path: type:
# only do a "real" check on directory, allow everything else through
(type == "directory" && dirFilter path)
|| type != "directory";
in
lib.sources.cleanSourceWith { src = repoRoot; filter = removeTestFilter; };
fsBase = fs.fromSource removedTests;

# fsBase = fs.fromSource repoRoot;

# only look at files in the crates folder
onlyCratesFolder = fs.intersection ../crates fsBase;

# the above filter only has the subfolder, put some needed files from the root back in
includeCargoRootFiles = fs.unions [
../Cargo.toml
../Cargo.lock
../version.txt
onlyCratesFolder
];

# Remove any "simple" files like markdown/pictures since they probably wont be used in the actual code
removedSimpleFiles =
let
extensionsToRemove = [ "md" "svg" "png" ];
in
fs.intersection
includeCargoRootFiles
(fs.fileFilter (fileDoesNotHaveExt extensionsToRemove) repoRoot);

# the above filter can make the doc crate sad since it has pictures
docsAddedBack = fs.unions [
../crates/docs
removedSimpleFiles
];

# ===============================
# If you are trying to see what is ok to exclude from the "main" builds (cli/lang_server)
# use `cargo tree` https://doc.rust-lang.org/cargo/commands/cargo-tree.html
#
# Ex: `cargo tree -i roc_build` will show all deps of the `roc_build` crate
# if only the package passed with `-i` is shown, nothing depends on it
# ===============================

# remove www folder from checkmate crate since it's not built with nix
removedWWW = fs.difference docsAddedBack ../crates/compiler/checkmate/www;

# potential packages/folders that could be removed
# repl_* -> I don't think nix will build those

filteredSrc = fs.toSource {
root = repoRoot;
# to debug you can switch to
# fileset = fs.traceVal <file set>
fileset = removedWWW;
};

in
filteredSrc

0 comments on commit 2f98490

Please sign in to comment.