mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-11-15 13:37:21 +03:00
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:
|
||||
# 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 content) (types.str.check content);
|
||||
let
|
||||
@ -76,6 +76,8 @@ rec {
|
||||
contentPath = content;
|
||||
}) ''
|
||||
${compileScript}
|
||||
${lib.optionalString strip
|
||||
"${pkgs.binutils-unwrapped}/bin/strip --strip-unneeded $out"}
|
||||
${optionalString (types.path.check nameOrPath) ''
|
||||
mv $out tmp
|
||||
mkdir -p $out/$(dirname "${nameOrPath}")
|
||||
@ -109,7 +111,10 @@ rec {
|
||||
# return 0;
|
||||
# }
|
||||
# ''
|
||||
writeC = name: { libraries ? [] }:
|
||||
writeC = name: {
|
||||
libraries ? [],
|
||||
strip ? true
|
||||
}:
|
||||
makeBinWriter {
|
||||
compileScript = ''
|
||||
PATH=${makeBinPath [
|
||||
@ -131,8 +136,8 @@ rec {
|
||||
-Wall \
|
||||
-x c \
|
||||
"$contentPath"
|
||||
strip --strip-unneeded "$out"
|
||||
'';
|
||||
inherit strip;
|
||||
} name;
|
||||
|
||||
# writeCBin takes the same arguments as writeC but outputs a directory (like writeScriptBin)
|
||||
@ -165,21 +170,38 @@ rec {
|
||||
writeHaskell = name: {
|
||||
libraries ? [],
|
||||
ghc ? pkgs.ghc,
|
||||
ghcArgs ? []
|
||||
ghcArgs ? [],
|
||||
strip ? true
|
||||
}:
|
||||
makeBinWriter {
|
||||
compileScript = ''
|
||||
cp $contentPath tmp.hs
|
||||
${ghc.withPackages (_: libraries )}/bin/ghc ${lib.escapeShellArgs ghcArgs} tmp.hs
|
||||
mv tmp $out
|
||||
${pkgs.binutils-unwrapped}/bin/strip --strip-unneeded "$out"
|
||||
'';
|
||||
inherit strip;
|
||||
} name;
|
||||
|
||||
# writeHaskellBin takes the same arguments as writeHaskell but outputs a directory (like writeScriptBin)
|
||||
writeHaskellBin = 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
|
||||
# returns an executable
|
||||
#
|
||||
|
@ -31,6 +31,12 @@ let
|
||||
test '~' = '~' && echo 'success'
|
||||
'';
|
||||
|
||||
rust = writeRustBin "test_writers" {} ''
|
||||
fn main(){
|
||||
println!("success")
|
||||
}
|
||||
'';
|
||||
|
||||
haskell = writeHaskellBin "test_writers" { libraries = [ haskellPackages.acme-default ]; } ''
|
||||
import Data.Default
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user