xfce.xfce4-notes-plugin: Generate C code with newer Vala (#359006)
[NixPkgs.git] / pkgs / servers / klipper / klipper-flash.nix
blob2f37745fd631fc7a5e150519e95613a8320e9ecb
1 { lib
2 , writeShellApplication
3 , gnumake
4 , pkgsCross
5 , klipper
6 , klipper-firmware
7 , python3
8 , avrdude
9 , stm32flash
10 , mcu ? "mcu"
11 , flashDevice ? "/dev/null"
12 , firmwareConfig ? ./simulator.cfg
14 let
15   supportedArches = [ "avr" "stm32" "lpc176x" ];
16   matchBoard = with builtins; match ''^.*CONFIG_BOARD_DIRECTORY="([a-zA-Z0-9_]+)".*$'' (readFile firmwareConfig);
17   boardArch = if matchBoard == null then null else builtins.head matchBoard;
19 writeShellApplication {
20   name = "klipper-flash-${mcu}";
21   runtimeInputs = [
22     python3
23     pkgsCross.avr.stdenv.cc
24     gnumake
25   ] ++ lib.optionals (boardArch == "avr") [ avrdude ] ++ lib.optionals (boardArch == "stm32") [ stm32flash ];
26   text = ''
27     if ${lib.boolToString (!builtins.elem boardArch supportedArches)}; then
28       printf "Flashing Klipper firmware to your board is not supported yet.\n"
29       printf "Please use the compiled firmware at ${klipper-firmware} and flash it using the tools provided for your microcontroller."
30       exit 1
31     fi
32     if ${lib.boolToString (boardArch == "stm32")}; then
33       make -C ${klipper.src} FLASH_DEVICE="${toString flashDevice}" OUT="${klipper-firmware}/" KCONFIG_CONFIG="${klipper-firmware}/config" serialflash
34     else
35       make -C ${klipper.src} FLASH_DEVICE="${toString flashDevice}" OUT="${klipper-firmware}/" KCONFIG_CONFIG="${klipper-firmware}/config" flash
36     fi
37   '';