parent
fdee33561c
commit
718189a18a
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,60 @@ |
||||
{ # Use master branch of the overlay by default |
||||
mozillaOverlay ? import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz), |
||||
rustManifest ? builtins.fetchurl "https://static.rust-lang.org/dist/channel-rust-nightly.toml" |
||||
}: |
||||
|
||||
let |
||||
pkgs = import <nixpkgs> { overlays = [ mozillaOverlay ]; }; |
||||
rustPlatform = pkgs.recurseIntoAttrs (pkgs.callPackage ./rustPlatform.nix { |
||||
inherit rustManifest; |
||||
}); |
||||
fetchcargo = import ./fetchcargo.nix { |
||||
inherit (pkgs) stdenv cacert git cargo-vendor; |
||||
inherit (rustPlatform.rust) cargo; |
||||
}; |
||||
buildStm32Firmware = { name, src, cargoSha256 }: |
||||
let |
||||
firmwareDeps = fetchcargo { inherit name src; sha256 = cargoSha256; }; |
||||
in |
||||
rustPlatform.buildRustPackage rec { |
||||
inherit name; |
||||
version = "0.0.0"; |
||||
|
||||
inherit src cargoSha256; |
||||
|
||||
buildInputs = [ firmwareDeps ]; |
||||
patchPhase = '' |
||||
cat >> .cargo/config <<EOF |
||||
[source.crates-io] |
||||
replace-with = "vendored-sources" |
||||
|
||||
[source.vendored-sources] |
||||
directory = "${firmwareDeps}" |
||||
EOF |
||||
''; |
||||
|
||||
buildPhase = '' |
||||
export CARGO_HOME=$(mktemp -d cargo-home.XXX) |
||||
cargo build --release |
||||
''; |
||||
|
||||
doCheck = false; |
||||
installPhase = '' |
||||
mkdir -p $out $out/nix-support |
||||
cp target/thumbv7em-none-eabihf/release/${name} $out/${name}.elf |
||||
echo file binary-dist ${name}.elf >> $out/nix-support/hydra-build-products |
||||
''; |
||||
}; |
||||
in |
||||
{ |
||||
stabilizer = buildStm32Firmware { |
||||
name = "stabilizer"; |
||||
src = /home/sb/stabilizer; |
||||
cargoSha256 = "1m4cxf6c4lh28xv4iagp20ni97cya1f12yg58q0m733qahk8gncb"; |
||||
}; |
||||
thermostat = buildStm32Firmware { |
||||
name = "thermostat"; |
||||
src = /home/sb/thermostat; |
||||
cargoSha256 = "1i9p5d5n01ajbp8lmavyway6vr1mmy107qnccff9glvr91rqx352"; |
||||
}; |
||||
} |
@ -0,0 +1,49 @@ |
||||
{ stdenv, cacert, git, cargo, cargo-vendor }: |
||||
{ name, src, sha256 }: |
||||
let |
||||
# `src` restricted to the two files that define dependencies |
||||
cargoOnlySrc = stdenv.mkDerivation { |
||||
name = "${name}-cargo"; |
||||
inherit src; |
||||
phases = "installPhase"; |
||||
installPhase = '' |
||||
mkdir $out |
||||
cp ${src}/Cargo.{toml,lock} $out/ |
||||
mkdir $out/src |
||||
touch $out/src/main.rs |
||||
''; |
||||
}; |
||||
in |
||||
stdenv.mkDerivation { |
||||
name = "${name}-vendor"; |
||||
nativeBuildInputs = [ cacert git cargo cargo-vendor ]; |
||||
src = cargoOnlySrc; |
||||
|
||||
phases = "unpackPhase patchPhase installPhase"; |
||||
|
||||
installPhase = '' |
||||
if [[ ! -f Cargo.lock ]]; then |
||||
echo |
||||
echo "ERROR: The Cargo.lock file doesn't exist" |
||||
echo |
||||
echo "Cargo.lock is needed to make sure that cargoSha256 doesn't change" |
||||
echo "when the registry is updated." |
||||
echo |
||||
|
||||
exit 1 |
||||
fi |
||||
|
||||
export CARGO_HOME=$(mktemp -d cargo-home.XXX) |
||||
|
||||
cargo vendor |
||||
|
||||
cp -ar vendor $out |
||||
''; |
||||
|
||||
outputHashAlgo = "sha256"; |
||||
outputHashMode = "recursive"; |
||||
outputHash = sha256; |
||||
|
||||
impureEnvVars = stdenv.lib.fetchers.proxyImpureEnvVars; |
||||
preferLocalBuild = true; |
||||
} |
@ -0,0 +1,12 @@ |
||||
# For running on Hydra |
||||
{ pkgs ? import <nixpkgs> {}, |
||||
rustManifest ? ./channel-rust-nightly.toml |
||||
}: |
||||
|
||||
let |
||||
jobs = callPackage ./default.nix { |
||||
inherit rustManifest; |
||||
mozillaOverlay = import <mozillaOverlay>; |
||||
}; |
||||
in |
||||
builtins.mapAttrs (key: value: pkgs.lib.hydraJob value) jobs |
@ -0,0 +1 @@ |
||||
/nix/store/nk713fs4q784pdz7wdr5x8m2zfqhls6v-stabilizer |
@ -0,0 +1,23 @@ |
||||
{ recurseIntoAttrs, stdenv, lib, |
||||
makeRustPlatform, |
||||
fetchurl, patchelf, |
||||
rustManifest ? ./channel-rust-nightly.toml |
||||
}: |
||||
|
||||
let |
||||
targets = [ |
||||
"thumbv7em-none-eabihf" |
||||
]; |
||||
rustChannel = |
||||
lib.rustLib.fromManifestFile rustManifest { |
||||
inherit stdenv fetchurl patchelf; |
||||
}; |
||||
rust = |
||||
rustChannel.rust.override { |
||||
inherit targets; |
||||
}; |
||||
in |
||||
makeRustPlatform { |
||||
rustc = rust; |
||||
cargo = rust; |
||||
} |
Loading…
Reference in new issue