diff options
author | Bernardo Meurer <bernardo@meurer.org> | 2022-08-01 14:07:26 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-01 14:07:26 -0700 |
commit | 6f435e54b5fa853027d01f11d88b0c4102970eaf (patch) | |
tree | 72d743713f72c59361596e264456f47c9660824b /pkgs/servers/klipper | |
parent | 70c06a92862b6f02d1ccf042910f9b3fa6c4e590 (diff) | |
parent | b391d98a710378a6f930877adb5fa6433ae71928 (diff) |
Merge pull request #165151 from vtuan10/klipper-firmware
nixos/klipper: Add Klipper firmware options
Diffstat (limited to 'pkgs/servers/klipper')
-rw-r--r-- | pkgs/servers/klipper/klipper-firmware.nix | 61 | ||||
-rw-r--r-- | pkgs/servers/klipper/klipper-flash.nix | 38 | ||||
-rw-r--r-- | pkgs/servers/klipper/klipper-genconf.nix | 21 | ||||
-rw-r--r-- | pkgs/servers/klipper/simulator.cfg | 23 |
4 files changed, 143 insertions, 0 deletions
diff --git a/pkgs/servers/klipper/klipper-firmware.nix b/pkgs/servers/klipper/klipper-firmware.nix new file mode 100644 index 0000000000000..f80cec0b687ed --- /dev/null +++ b/pkgs/servers/klipper/klipper-firmware.nix @@ -0,0 +1,61 @@ +{ stdenv +, lib +, pkg-config +, pkgsCross +, bintools-unwrapped +, libffi +, libusb1 +, wxGTK +, python2 +, python3 +, gcc-arm-embedded +, klipper +, avrdude +, stm32flash +, mcu ? "mcu" +, firmwareConfig ? ./simulator.cfg +}: stdenv.mkDerivation rec { + name = "klipper-firmware-${mcu}-${version}"; + version = klipper.version; + src = klipper.src; + + nativeBuildInputs = [ + python2 + python3 + pkgsCross.avr.stdenv.cc + gcc-arm-embedded + bintools-unwrapped + libffi + libusb1 + avrdude + stm32flash + pkg-config + wxGTK # Required for bossac + ]; + + preBuild = "cp ${firmwareConfig} ./.config"; + + postPatch = '' + patchShebangs . + ''; + + makeFlags = [ + "V=1" + "KCONFIG_CONFIG=${firmwareConfig}" + ]; + + installPhase = '' + mkdir -p $out + cp ./.config $out/config + cp -r out/* $out + ''; + + dontFixup = true; + + meta = with lib; { + inherit (klipper.meta) homepage license; + description = "Firmware part of Klipper"; + maintainers = with maintainers; [ vtuan10 ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/servers/klipper/klipper-flash.nix b/pkgs/servers/klipper/klipper-flash.nix new file mode 100644 index 0000000000000..fedc477c27617 --- /dev/null +++ b/pkgs/servers/klipper/klipper-flash.nix @@ -0,0 +1,38 @@ +{ lib +, writeShellApplication +, gnumake +, pkgsCross +, klipper +, klipper-firmware +, python2 +, avrdude +, stm32flash +, mcu ? "mcu" +, flashDevice ? "/dev/null" +, firmwareConfig ? ./simulator.cfg +}: +let + supportedArches = [ "avr" "stm32" "lpc176x" ]; + matchBoard = with builtins; match ''^.*CONFIG_BOARD_DIRECTORY="([a-zA-Z0-9_]+)".*$'' (readFile firmwareConfig); + boardArch = if matchBoard == null then null else builtins.head matchBoard; +in +writeShellApplication { + name = "klipper-flash-${mcu}"; + runtimeInputs = [ + python2 + pkgsCross.avr.stdenv.cc + gnumake + ] ++ lib.optionals (boardArch == "avr") [ avrdude ] ++ lib.optionals (boardArch == "stm32") [ stm32flash ]; + text = '' + if ${lib.boolToString (!builtins.elem boardArch supportedArches)}; then + printf "Flashing Klipper firmware to your board is not supported yet.\n" + printf "Please use the compiled firmware at ${klipper-firmware} and flash it using the tools provided for your microcontroller." + exit 1 + fi + if ${lib.boolToString (boardArch == "stm32")}; then + make -C ${klipper.src} FLASH_DEVICE="${toString flashDevice}" OUT="${klipper-firmware}/" KCONFIG_CONFIG="${klipper-firmware}/config" serialflash + else + make -C ${klipper.src} FLASH_DEVICE="${toString flashDevice}" OUT="${klipper-firmware}/" KCONFIG_CONFIG="${klipper-firmware}/config" flash + fi + ''; +} diff --git a/pkgs/servers/klipper/klipper-genconf.nix b/pkgs/servers/klipper/klipper-genconf.nix new file mode 100644 index 0000000000000..42eb519e8c196 --- /dev/null +++ b/pkgs/servers/klipper/klipper-genconf.nix @@ -0,0 +1,21 @@ +{ writeShellApplication +, klipper +, python2 +, gnumake +, pkgsCross +}: writeShellApplication { + name = "klipper-genconf"; + runtimeInputs = [ + python2 + pkgsCross.avr.stdenv.cc + gnumake + ]; + text = '' + CURRENT_DIR=$(pwd) + TMP=$(mktemp -d) + make -C ${klipper.src} OUT="$TMP" KCONFIG_CONFIG="$CURRENT_DIR/config" menuconfig + rm -rf "$TMP" config.old + printf "\nYour firmware configuration for klipper:\n\n" + cat config + ''; +} diff --git a/pkgs/servers/klipper/simulator.cfg b/pkgs/servers/klipper/simulator.cfg new file mode 100644 index 0000000000000..4dc19b1e40ffb --- /dev/null +++ b/pkgs/servers/klipper/simulator.cfg @@ -0,0 +1,23 @@ +# CONFIG_LOW_LEVEL_OPTIONS is not set +# CONFIG_MACH_AVR is not set +# CONFIG_MACH_ATSAM is not set +# CONFIG_MACH_ATSAMD is not set +# CONFIG_MACH_LPC176X is not set +# CONFIG_MACH_STM32 is not set +# CONFIG_MACH_RP2040 is not set +# CONFIG_MACH_PRU is not set +# CONFIG_MACH_LINUX is not set +CONFIG_MACH_SIMU=y +CONFIG_BOARD_DIRECTORY="simulator" +CONFIG_CLOCK_FREQ=20000000 +CONFIG_SERIAL=y +CONFIG_SIMULATOR_SELECT=y +CONFIG_SERIAL_BAUD=250000 +CONFIG_USB_VENDOR_ID=0x1d50 +CONFIG_USB_DEVICE_ID=0x614e +CONFIG_USB_SERIAL_NUMBER="12345" +CONFIG_HAVE_GPIO=y +CONFIG_HAVE_GPIO_ADC=y +CONFIG_HAVE_GPIO_SPI=y +CONFIG_HAVE_GPIO_HARD_PWM=y +CONFIG_INLINE_STEPPER_HACK=y |