SkyLok/camera_example/flake.nix
2026-05-20 12:22:09 +02:00

90 lines
1.9 KiB
Nix

{
description = "Cross compile libcamera app for Raspberry Pi Zero";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = import nixpkgs {
inherit system;
crossSystem = {
config = "armv6l-unknown-linux-gnueabihf";
};
};
in
{
devShells.${system}.default = pkgs.mkShell {
nativeBuildInputs = [
pkgs.pkgsBuildBuild.pkg-config
];
buildInputs = with pkgs; [
libcamera
libGL
libglvnd
mesa
];
shellHook = ''
export CC=${pkgs.stdenv.cc.targetPrefix}gcc
export CXX=${pkgs.stdenv.cc.targetPrefix}g++
export PKG_CONFIG_ALLOW_CROSS=1
echo "Cross shell ready"
'';
};
packages.${system}.default = pkgs.stdenv.mkDerivation {
pname = "rpi-zero-libcamera-app";
version = "0.1.0";
src = ./.;
nativeBuildInputs = [
pkgs.pkgsBuildBuild.pkg-config
];
buildInputs = with pkgs; [
libcamera
libevent
libGL
libglvnd
mesa
];
buildPhase = ''
runHook preBuild
export PKG_CONFIG_ALLOW_CROSS=1
mkdir -p build
${pkgs.stdenv.cc.targetPrefix}g++ \
camera.cpp \
event_loop.cpp \
-o build/camera \
$(pkg-config --cflags --libs libcamera libevent) \
-levent -levent_pthreads -lpthread
runHook postBuild
'';
installPhase = ''
mkdir -p $out/bin
cp build/camera $out/bin/camera
'';
};
apps.${system}.default = {
type = "app";
program = "${self.packages.${system}.default}/bin/camera";
};
};
}