161 lines
4.1 KiB
Nix
161 lines
4.1 KiB
Nix
{
|
|
description = "A blink template for STM32G4";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "nixpkgs/nixpkgs-unstable";
|
|
utils.url = "github:numtide/flake-utils";
|
|
libopencm3-src = {
|
|
url = "github:libopencm3/libopencm3";
|
|
flake = false;
|
|
};
|
|
pre-commit-hooks = {
|
|
url = "github:cachix/pre-commit-hooks.nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs =
|
|
{
|
|
self,
|
|
nixpkgs,
|
|
utils,
|
|
libopencm3-src,
|
|
pre-commit-hooks,
|
|
...
|
|
}:
|
|
{
|
|
overlays.default = final: prev: {
|
|
libopencm3-stm32 = final.stdenvNoCC.mkDerivation {
|
|
pname = "libopencm3-stm32";
|
|
version = "latest";
|
|
|
|
src = libopencm3-src;
|
|
|
|
postPatch = ''
|
|
patchShebangs scripts
|
|
'';
|
|
|
|
nativeBuildInputs = [
|
|
final.gcc-arm-embedded
|
|
final.python3
|
|
final.gnumake
|
|
];
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
makeFlags = [
|
|
"PREFIX=arm-none-eabi-"
|
|
];
|
|
|
|
TARGETS = "stm32/f0 stm32/f1 stm32/f2 stm32/f3 stm32/f4 stm32/f7 stm32/l0 stm32/l1 stm32/l4 stm32/g0 stm32/g4 stm32/h7 stm32/u5";
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out
|
|
cp -r include lib mk scripts ld $out/
|
|
|
|
patchShebangs $out/scripts
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
meta = with final.lib; {
|
|
description = "Open source ARM Cortex-M microcontroller library (STM32 targets)";
|
|
homepage = "http://libopencm3.org/";
|
|
license = licenses.lgpl3Plus;
|
|
platforms = platforms.all;
|
|
};
|
|
};
|
|
};
|
|
}
|
|
// utils.lib.eachDefaultSystem (
|
|
system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [ self.overlays.default ];
|
|
};
|
|
pname = "blink";
|
|
version = "0.1.0";
|
|
in
|
|
{
|
|
packages = {
|
|
inherit (pkgs) libopencm3-stm32;
|
|
default = pkgs.stdenvNoCC.mkDerivation {
|
|
inherit pname version;
|
|
src = pkgs.lib.cleanSource ./.;
|
|
|
|
nativeBuildInputs = with pkgs; [
|
|
gcc-arm-embedded
|
|
gnumake
|
|
python3
|
|
];
|
|
|
|
makeFlags = [
|
|
"OPENCM3_DIR=${pkgs.libopencm3-stm32}"
|
|
"PREFIX=arm-none-eabi-"
|
|
];
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
mkdir -p $out/bin
|
|
cp build/${pname}.elf $out/bin/
|
|
cp build/${pname}.bin $out/bin/
|
|
cp build/${pname}.hex $out/bin/
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
};
|
|
|
|
devShells.default =
|
|
let
|
|
# FIXME: 'gnu/stubs-32.h' file not found
|
|
clangdWrapper = pkgs.writeShellScriptBin "clangd" ''
|
|
exec ${pkgs.clang-tools}/bin/clangd \
|
|
--query-driver=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-* \
|
|
"$@"
|
|
'';
|
|
in
|
|
pkgs.mkShell {
|
|
name = "stm32-blink";
|
|
packages = self.packages.${system}.default.nativeBuildInputs ++ [
|
|
clangdWrapper
|
|
|
|
pkgs.bear
|
|
pkgs.openocd
|
|
pkgs.stlink
|
|
];
|
|
OPENCM3_DIR = pkgs.libopencm3-stm32;
|
|
PREFIX = "arm-none-eabi-";
|
|
};
|
|
|
|
formatter =
|
|
let
|
|
inherit (self.checks.${system}.pre-commit-check.config) package configFile;
|
|
script = ''
|
|
${pkgs.lib.getExe package} run --all-files --config ${configFile}
|
|
'';
|
|
in
|
|
pkgs.writeShellScriptBin "pre-commit-run" script;
|
|
|
|
checks = {
|
|
build-packages = pkgs.linkFarm "flake-packages-${system}" self.packages.${system};
|
|
|
|
pre-commit-check = pre-commit-hooks.lib.${system}.run {
|
|
src = ./.;
|
|
hooks = {
|
|
nixfmt.enable = true;
|
|
clang-format = {
|
|
enable = true;
|
|
types_or = pkgs.lib.mkForce [
|
|
"c"
|
|
"c++"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|
|
);
|
|
}
|