artiq-zynq/default.nix

121 lines
3.6 KiB
Nix
Raw Normal View History

2020-04-30 21:04:28 +08:00
{
mozillaOverlay ? import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz),
}:
let
pkgs = import <nixpkgs> { overlays = [ mozillaOverlay ]; };
rustPlatform = (import ./rustPlatform.nix { inherit pkgs; });
artiqpkgs = import <artiq-fast/default.nix> { inherit pkgs; };
vivado = import <artiq-fast/vivado.nix> { inherit pkgs; };
2020-05-01 11:23:00 +08:00
mkbootimage = (import ./mkbootimage.nix { inherit pkgs; });
in
rec {
zc706-firmware = rustPlatform.buildRustPackage rec {
name = "zc706-firmware";
2020-04-30 21:04:28 +08:00
version = "0.1.0";
src = ./src;
2020-05-06 22:16:34 +08:00
cargoSha256 = "0pa5m7pwpiyd1agfgfhywd8dkm6pbjx76nca4dngpw77h893c5bc";
2020-04-30 21:04:28 +08:00
nativeBuildInputs = [
pkgs.gnumake
(pkgs.python3.withPackages(ps: (with artiqpkgs; [ migen migen-axi misoc artiq ])))
pkgs.cargo-xbuild
pkgs.llvm_9
pkgs.clang_9
];
2020-04-30 21:04:28 +08:00
buildPhase = ''
export XARGO_RUST_SRC="${rustPlatform.rust.rustc.src}/src"
export CARGO_HOME=$(mktemp -d cargo-home.XXX)
make
2020-04-30 21:04:28 +08:00
'';
installPhase = ''
mkdir -p $out $out/nix-support
2020-05-07 13:52:40 +08:00
cp ../build/firmware/armv7-none-eabihf/release/runtime $out/runtime.elf
cp ../build/firmware/armv7-none-eabihf/release/szl $out/szl.elf
echo file binary-dist $out/runtime.elf >> $out/nix-support/hydra-build-products
echo file binary-dist $out/szl.elf >> $out/nix-support/hydra-build-products
2020-04-30 21:04:28 +08:00
'';
doCheck = false;
2020-04-30 21:04:28 +08:00
dontFixup = true;
};
zc706-gateware = pkgs.runCommand "zc706-gateware"
{
nativeBuildInputs = [
(pkgs.python3.withPackages(ps: (with artiqpkgs; [ migen migen-axi misoc artiq ])))
vivado
];
}
2020-04-30 21:04:28 +08:00
''
2020-05-07 13:52:40 +08:00
python ${./src/zc706.py} -g build
2020-04-30 21:04:28 +08:00
mkdir -p $out $out/nix-support
cp build/top.bit $out
echo file binary-dist $out/top.bit >> $out/nix-support/hydra-build-products
'';
# SZL startup
2020-04-30 21:04:28 +08:00
zc706-jtag = pkgs.runCommand "zc706-jtag" {}
''
mkdir $out
ln -s ${zc706-firmware}/szl.elf $out
2020-04-30 21:04:28 +08:00
ln -s ${zc706-gateware}/top.bit $out
'';
2020-05-01 11:23:00 +08:00
zc706-sd = pkgs.runCommand "zc706-sd"
{
buildInputs = [ mkbootimage ];
}
''
# Do not use "long" paths in boot.bif, because embedded developers
# can't write software (mkbootimage will segfault).
bifdir=`mktemp -d`
cd $bifdir
ln -s ${zc706-firmware}/szl.elf szl.elf
cat > boot.bif << EOF
2020-05-01 11:23:00 +08:00
the_ROM_image:
{
[bootloader]szl.elf
2020-05-01 11:23:00 +08:00
}
EOF
mkdir $out
mkbootimage boot.bif $out/boot.bin
2020-05-01 11:23:00 +08:00
ln -s ${zc706-gateware}/top.bit $out
'';
zc706-sd-zip = pkgs.runCommand "zc706-sd-zip"
{
buildInputs = [ pkgs.zip ];
}
''
mkdir -p $out $out/nix-support
zip -j $out/sd.zip ${zc706-sd}/*
echo file binary-dist $out/sd.zip >> $out/nix-support/hydra-build-products
'';
2020-05-06 16:02:44 +08:00
# FSBL startup
2020-05-06 16:02:44 +08:00
zc706-fsbl = import ./fsbl.nix { inherit pkgs; };
zc706-fsbl-sd = pkgs.runCommand "zc706-fsbl-sd"
{
buildInputs = [ mkbootimage ];
}
''
# TODO: use self-built fsbl
bifdir=`mktemp -d`
cd $bifdir
ln -s ${./fsbl.elf} fsbl.elf
ln -s ${zc706-gateware}/top.bit top.bit
ln -s ${zc706-firmware}/runtime.elf runtime.elf
cat > boot.bif << EOF
the_ROM_image:
{
[bootloader]fsbl.elf
top.bit
runtime.elf
}
EOF
mkdir $out $out/nix-support
mkbootimage boot.bif $out/boot.bin
echo file binary-dist $out/boot.bin >> $out/nix-support/hydra-build-products
'';
2020-04-30 21:04:28 +08:00
}