Merge pull request #109050 from xaverdh/rust-writer
writers: add writeRust and deduplicate binary stripping
This commit is contained in:
commit
ec4a1661b2
@ -63,7 +63,7 @@ rec {
|
|||||||
#
|
#
|
||||||
# Examples:
|
# Examples:
|
||||||
# writeSimpleC = makeBinWriter { compileScript = name: "gcc -o $out $contentPath"; }
|
# writeSimpleC = makeBinWriter { compileScript = name: "gcc -o $out $contentPath"; }
|
||||||
makeBinWriter = { compileScript }: nameOrPath: content:
|
makeBinWriter = { compileScript, strip ? true }: nameOrPath: content:
|
||||||
assert lib.or (types.path.check nameOrPath) (builtins.match "([0-9A-Za-z._])[0-9A-Za-z._-]*" nameOrPath != null);
|
assert lib.or (types.path.check nameOrPath) (builtins.match "([0-9A-Za-z._])[0-9A-Za-z._-]*" nameOrPath != null);
|
||||||
assert lib.or (types.path.check content) (types.str.check content);
|
assert lib.or (types.path.check content) (types.str.check content);
|
||||||
let
|
let
|
||||||
@ -76,6 +76,8 @@ rec {
|
|||||||
contentPath = content;
|
contentPath = content;
|
||||||
}) ''
|
}) ''
|
||||||
${compileScript}
|
${compileScript}
|
||||||
|
${lib.optionalString strip
|
||||||
|
"${pkgs.binutils-unwrapped}/bin/strip --strip-unneeded $out"}
|
||||||
${optionalString (types.path.check nameOrPath) ''
|
${optionalString (types.path.check nameOrPath) ''
|
||||||
mv $out tmp
|
mv $out tmp
|
||||||
mkdir -p $out/$(dirname "${nameOrPath}")
|
mkdir -p $out/$(dirname "${nameOrPath}")
|
||||||
@ -109,7 +111,10 @@ rec {
|
|||||||
# return 0;
|
# return 0;
|
||||||
# }
|
# }
|
||||||
# ''
|
# ''
|
||||||
writeC = name: { libraries ? [] }:
|
writeC = name: {
|
||||||
|
libraries ? [],
|
||||||
|
strip ? true
|
||||||
|
}:
|
||||||
makeBinWriter {
|
makeBinWriter {
|
||||||
compileScript = ''
|
compileScript = ''
|
||||||
PATH=${makeBinPath [
|
PATH=${makeBinPath [
|
||||||
@ -131,8 +136,8 @@ rec {
|
|||||||
-Wall \
|
-Wall \
|
||||||
-x c \
|
-x c \
|
||||||
"$contentPath"
|
"$contentPath"
|
||||||
strip --strip-unneeded "$out"
|
|
||||||
'';
|
'';
|
||||||
|
inherit strip;
|
||||||
} name;
|
} name;
|
||||||
|
|
||||||
# writeCBin takes the same arguments as writeC but outputs a directory (like writeScriptBin)
|
# writeCBin takes the same arguments as writeC but outputs a directory (like writeScriptBin)
|
||||||
@ -165,21 +170,38 @@ rec {
|
|||||||
writeHaskell = name: {
|
writeHaskell = name: {
|
||||||
libraries ? [],
|
libraries ? [],
|
||||||
ghc ? pkgs.ghc,
|
ghc ? pkgs.ghc,
|
||||||
ghcArgs ? []
|
ghcArgs ? [],
|
||||||
|
strip ? true
|
||||||
}:
|
}:
|
||||||
makeBinWriter {
|
makeBinWriter {
|
||||||
compileScript = ''
|
compileScript = ''
|
||||||
cp $contentPath tmp.hs
|
cp $contentPath tmp.hs
|
||||||
${ghc.withPackages (_: libraries )}/bin/ghc ${lib.escapeShellArgs ghcArgs} tmp.hs
|
${ghc.withPackages (_: libraries )}/bin/ghc ${lib.escapeShellArgs ghcArgs} tmp.hs
|
||||||
mv tmp $out
|
mv tmp $out
|
||||||
${pkgs.binutils-unwrapped}/bin/strip --strip-unneeded "$out"
|
|
||||||
'';
|
'';
|
||||||
|
inherit strip;
|
||||||
} name;
|
} name;
|
||||||
|
|
||||||
# writeHaskellBin takes the same arguments as writeHaskell but outputs a directory (like writeScriptBin)
|
# writeHaskellBin takes the same arguments as writeHaskell but outputs a directory (like writeScriptBin)
|
||||||
writeHaskellBin = name:
|
writeHaskellBin = name:
|
||||||
writeHaskell "/bin/${name}";
|
writeHaskell "/bin/${name}";
|
||||||
|
|
||||||
|
writeRust = name: {
|
||||||
|
rustc ? pkgs.rustc,
|
||||||
|
rustcArgs ? [],
|
||||||
|
strip ? true
|
||||||
|
}:
|
||||||
|
makeBinWriter {
|
||||||
|
compileScript = ''
|
||||||
|
cp "$contentPath" tmp.rs
|
||||||
|
PATH=${makeBinPath [pkgs.gcc]} ${lib.getBin rustc}/bin/rustc ${lib.escapeShellArgs rustcArgs} -o "$out" tmp.rs
|
||||||
|
'';
|
||||||
|
inherit strip;
|
||||||
|
} name;
|
||||||
|
|
||||||
|
writeRustBin = name:
|
||||||
|
writeRust "/bin/${name}";
|
||||||
|
|
||||||
# writeJS takes a name an attributeset with libraries and some JavaScript sourcecode and
|
# writeJS takes a name an attributeset with libraries and some JavaScript sourcecode and
|
||||||
# returns an executable
|
# returns an executable
|
||||||
#
|
#
|
||||||
|
@ -31,6 +31,12 @@ let
|
|||||||
test '~' = '~' && echo 'success'
|
test '~' = '~' && echo 'success'
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
rust = writeRustBin "test_writers" {} ''
|
||||||
|
fn main(){
|
||||||
|
println!("success")
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
haskell = writeHaskellBin "test_writers" { libraries = [ haskellPackages.acme-default ]; } ''
|
haskell = writeHaskellBin "test_writers" { libraries = [ haskellPackages.acme-default ]; } ''
|
||||||
import Data.Default
|
import Data.Default
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user