|
|
|
@ -24,6 +24,7 @@ |
|
|
|
|
# Specify binaries to build in the form { foo.src = "src/foo.cr"; } |
|
|
|
|
# The default `crystal build` options can be overridden with { foo.options = [ "--optionname" ]; } |
|
|
|
|
, crystalBinaries ? { } |
|
|
|
|
, enableParallelBuilding ? true |
|
|
|
|
, ... |
|
|
|
|
}@args: |
|
|
|
|
|
|
|
|
@ -51,6 +52,20 @@ let |
|
|
|
|
|
|
|
|
|
buildDirectly = shardsFile == null || crystalBinaries != { }; |
|
|
|
|
|
|
|
|
|
mkCrystalBuildArgs = bin: attrs: |
|
|
|
|
lib.concatStringsSep " " ([ |
|
|
|
|
"crystal" |
|
|
|
|
"build" |
|
|
|
|
] ++ lib.optionals enableParallelBuilding [ |
|
|
|
|
"--threads" |
|
|
|
|
"$NIX_BUILD_CORES" |
|
|
|
|
] ++ [ |
|
|
|
|
"-o" |
|
|
|
|
bin |
|
|
|
|
(attrs.src or (throw "No source file for crystal binary ${bin} provided")) |
|
|
|
|
(lib.concatStringsSep " " (attrs.options or defaultOptions)) |
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
in |
|
|
|
|
stdenv.mkDerivation (mkDerivationArgs // { |
|
|
|
|
|
|
|
|
@ -72,6 +87,7 @@ stdenv.mkDerivation (mkDerivationArgs // { |
|
|
|
|
|
|
|
|
|
PREFIX = placeholder "out"; |
|
|
|
|
|
|
|
|
|
inherit enableParallelBuilding; |
|
|
|
|
strictDeps = true; |
|
|
|
|
buildInputs = args.buildInputs or [ ] ++ [ crystal ]; |
|
|
|
|
|
|
|
|
@ -88,16 +104,7 @@ stdenv.mkDerivation (mkDerivationArgs // { |
|
|
|
|
"runHook preBuild" |
|
|
|
|
] ++ lib.optional (format == "make") |
|
|
|
|
"make \${buildTargets:-build} $makeFlags" |
|
|
|
|
++ lib.optionals (format == "crystal") (lib.mapAttrsToList |
|
|
|
|
(bin: attrs: '' |
|
|
|
|
crystal ${lib.escapeShellArgs ([ |
|
|
|
|
"build" |
|
|
|
|
"-o" |
|
|
|
|
bin |
|
|
|
|
(attrs.src or (throw "No source file for crystal binary ${bin} provided")) |
|
|
|
|
] ++ (attrs.options or defaultOptions))} |
|
|
|
|
'') |
|
|
|
|
crystalBinaries) |
|
|
|
|
++ lib.optionals (format == "crystal") (lib.mapAttrsToList mkCrystalBuildArgs crystalBinaries) |
|
|
|
|
++ lib.optional (format == "shards") |
|
|
|
|
"shards build --local --production ${lib.concatStringsSep " " (args.options or defaultOptions)}" |
|
|
|
|
++ [ "runHook postBuild" ])); |
|
|
|
|