build(nix): add a way to override what grammars get built (#3141)

pull/3222/head
Yusuf Bera Ertan 2 years ago committed by GitHub
parent 2f1d3d0899
commit 85a5df0391
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -18,83 +18,115 @@
nixpkgs, nixpkgs,
nixCargoIntegration, nixCargoIntegration,
... ...
}: }: let
nixCargoIntegration.lib.makeOutputs { outputs = config:
root = ./.; nixCargoIntegration.lib.makeOutputs {
renameOutputs = {"helix-term" = "helix";}; root = ./.;
# Set default app to hx (binary is from helix-term release build) renameOutputs = {"helix-term" = "helix";};
# Set default package to helix-term release build # Set default app to hx (binary is from helix-term release build)
defaultOutputs = { # Set default package to helix-term release build
app = "hx"; defaultOutputs = {
package = "helix"; app = "hx";
}; package = "helix";
overrides = { };
cCompiler = common: overrides = {
with common.pkgs; cCompiler = common:
if stdenv.isLinux with common.pkgs;
then gcc if stdenv.isLinux
else clang; then gcc
crateOverrides = common: _: { else clang;
helix-term = prev: let crateOverrides = common: _: {
inherit (common) pkgs; helix-term = prev: let
mkRootPath = rel: inherit (common) pkgs;
builtins.path { mkRootPath = rel:
path = "${common.root}/${rel}"; builtins.path {
name = rel; path = "${common.root}/${rel}";
}; name = rel;
grammars = pkgs.callPackage ./grammars.nix {}; };
runtimeDir = pkgs.runCommandNoCC "helix-runtime" {} '' grammars = pkgs.callPackage ./grammars.nix config;
mkdir -p $out runtimeDir = pkgs.runCommandNoCC "helix-runtime" {} ''
ln -s ${mkRootPath "runtime"}/* $out mkdir -p $out
rm -r $out/grammars ln -s ${mkRootPath "runtime"}/* $out
ln -s ${grammars} $out/grammars rm -r $out/grammars
''; ln -s ${grammars} $out/grammars
in { '';
# disable fetching and building of tree-sitter grammars in the helix-term build.rs overridedAttrs = {
HELIX_DISABLE_AUTO_GRAMMAR_BUILD = "1"; # disable fetching and building of tree-sitter grammars in the helix-term build.rs
# link languages and theme toml files since helix-term expects them (for tests) HELIX_DISABLE_AUTO_GRAMMAR_BUILD = "1";
preConfigure = # link languages and theme toml files since helix-term expects them (for tests)
pkgs.lib.concatMapStringsSep preConfigure =
"\n" pkgs.lib.concatMapStringsSep
(path: "ln -sf ${mkRootPath path} ..") "\n"
["languages.toml" "theme.toml" "base16_theme.toml"]; (path: "ln -sf ${mkRootPath path} ..")
buildInputs = (prev.buildInputs or []) ++ [common.cCompiler.cc.lib]; ["languages.toml" "theme.toml" "base16_theme.toml"];
nativeBuildInputs = [pkgs.makeWrapper]; buildInputs = (prev.buildInputs or []) ++ [common.cCompiler.cc.lib];
nativeBuildInputs = [pkgs.makeWrapper];
postFixup = '' postFixup = ''
if [ -f "$out/bin/hx" ]; then if [ -f "$out/bin/hx" ]; then
wrapProgram "$out/bin/hx" ''${makeWrapperArgs[@]} --set HELIX_RUNTIME "${runtimeDir}" wrapProgram "$out/bin/hx" ''${makeWrapperArgs[@]} --set HELIX_RUNTIME "${runtimeDir}"
fi fi
''; '';
};
in
overridedAttrs
// (
pkgs.lib.optionalAttrs
(config ? makeWrapperArgs)
{inherit (config) makeWrapperArgs;}
);
};
shell = common: prev: {
packages =
prev.packages
++ (
with common.pkgs; [lld_13 lldb cargo-tarpaulin cargo-flamegraph rust-analyzer]
);
env =
prev.env
++ [
{
name = "HELIX_RUNTIME";
eval = "$PWD/runtime";
}
{
name = "RUST_BACKTRACE";
value = "1";
}
{
name = "RUSTFLAGS";
value =
if common.pkgs.stdenv.isLinux
then "-C link-arg=-fuse-ld=lld -C target-cpu=native -Clink-arg=-Wl,--no-rosegment"
else "";
}
];
}; };
}; };
shell = common: prev: {
packages =
prev.packages
++ (
with common.pkgs; [lld_13 lldb cargo-tarpaulin cargo-flamegraph rust-analyzer]
);
env =
prev.env
++ [
{
name = "HELIX_RUNTIME";
eval = "$PWD/runtime";
}
{
name = "RUST_BACKTRACE";
value = "1";
}
{
name = "RUSTFLAGS";
value =
if common.pkgs.stdenv.isLinux
then "-C link-arg=-fuse-ld=lld -C target-cpu=native -Clink-arg=-Wl,--no-rosegment"
else "";
}
];
};
}; };
defaultOutputs = outputs {};
makeOverridableHelix = system: old:
old
// {
override = args:
makeOverridableHelix
system
(outputs args).packages.${system}.helix;
};
in
defaultOutputs
// {
packages =
nixpkgs.lib.mapAttrs
(
system: packages:
packages
// rec {
default = helix;
helix = makeOverridableHelix system packages.helix;
}
)
defaultOutputs.packages;
}; };
nixConfig = { nixConfig = {

@ -4,6 +4,8 @@
runCommandLocal, runCommandLocal,
runCommandNoCC, runCommandNoCC,
yj, yj,
includeGrammarIf ? _: true,
...
}: let }: let
# HACK: nix < 2.6 has a bug in the toml parser, so we convert to JSON # HACK: nix < 2.6 has a bug in the toml parser, so we convert to JSON
# before parsing # before parsing
@ -102,12 +104,13 @@
runHook postFixup runHook postFixup
''; '';
}; };
grammarsToBuild = builtins.filter includeGrammarIf gitGrammars;
builtGrammars = builtGrammars =
builtins.map (grammar: { builtins.map (grammar: {
inherit (grammar) name; inherit (grammar) name;
artifact = buildGrammar grammar; artifact = buildGrammar grammar;
}) })
gitGrammars; grammarsToBuild;
grammarLinks = grammarLinks =
builtins.map (grammar: "ln -s ${grammar.artifact}/${grammar.name}.so $out/${grammar.name}.so") builtins.map (grammar: "ln -s ${grammar.artifact}/${grammar.name}.so $out/${grammar.name}.so")
builtGrammars; builtGrammars;

Loading…
Cancel
Save