Files

143 lines
3.0 KiB
Nix

{
description = "Blade";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
self.submodules = true;
};
outputs =
{ nixpkgs, ... }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system}.pkgsStatic;
hostPkgs = nixpkgs.legacyPackages.${system};
mruby = pkgs.stdenv.mkDerivation {
pname = "mruby";
version = "0.0.1";
src = pkgs.lib.cleanSourceWith {
src = ./libs;
name = "mruby-src";
};
patches = [
./libs/changes.patch
];
nativeBuildInputs = with hostPkgs; [
ruby
gnumake
];
buildPhase = ''
cd mruby
rake
'';
installPhase = ''
mkdir -p $out
cp -r build/host/lib $out/lib
cp -r build/host/include $out/include
mkdir -p $out/bin
cp build/host/bin/mrbc $out/bin/mrbc
'';
};
blade = pkgs.stdenv.mkDerivation {
pname = "blade";
version = "0.1.0";
src = ./.;
nativeBuildInputs = with hostPkgs; [
bash
pkg-config
gnumake
findutils
binutils
cpio
gzip
];
buildInputs = [
pkgs.pkgsStatic.busybox
mruby
];
buildPhase = ''
make \
MRUBY_CFLAGS="-I${mruby}/include" \
MRUBY_LIBS="-L${mruby}/lib -lmruby" \
BUSYBOX="${pkgs.pkgsStatic.busybox}/bin/busybox"
'';
installPhase = ''
mkdir -p $out/bin
cp bin/blade $out/bin/blade
cp bin/initramfs.cpio.gz $out/bin/initramfs.cpio.gz
'';
};
run-blade = hostPkgs.writeShellScriptBin "run-blade" ''
set -euo pipefail
exec ${hostPkgs.qemu}/bin/qemu-system-x86_64 \
--enable-kvm \
-m 512M \
-smp 2 \
-kernel "${hostPkgs.linux}/bzImage" \
-initrd ${blade}/bin/initramfs.cpio.gz \
-append "console=ttyS0 rdinit=/init" \
-nographic
'';
in
{
packages.${system} = {
default = blade;
blade = blade;
mruby = mruby;
run-blade = run-blade;
};
apps.${system} = {
default = {
type = "app";
program = "${run-blade}/bin/run-blade";
};
};
devShells.${system}.default = pkgs.mkShell {
inputsFrom = [ blade ];
packages = with hostPkgs; [
linux
qemu
cpio
gzip
clang-tools
pkg-config
ccache
gnumake
bear
ruby
gdb
binutils
findutils
];
shellHook = ''
export CC="ccache $CC"
export CXX="ccache $CXX"
export MRUBY_CFLAGS=-I${mruby}/include
export MRUBY_LIBS="-L${mruby}/lib -lmruby"
export BUSYBOX="${pkgs.pkgsStatic.busybox}/bin/busybox"
export LINUX="${hostPkgs.linux}/bzImage"
'';
};
};
}