diff options
author | Alyssa Ross <hi@alyssa.is> | 2022-12-06 19:57:55 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2023-02-08 13:48:30 +0000 |
commit | bf3aadfdd39aa197e18bade671fab6726349ffa4 (patch) | |
tree | 698567af766ed441d757b57a7b21e68d4a342a2b /nixpkgs/pkgs/servers/klipper | |
parent | f4afc5a01d9539ce09e47494e679c51f80723d07 (diff) | |
parent | 99665eb45f58d959d2cb9e49ddb960c79d596f33 (diff) | |
download | nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.gz nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.bz2 nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.lz nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.xz nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.zst nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.zip |
Merge commit '99665eb45f58d959d2cb9e49ddb960c79d596f33'
Diffstat (limited to 'nixpkgs/pkgs/servers/klipper')
-rw-r--r-- | nixpkgs/pkgs/servers/klipper/default.nix | 28 | ||||
-rw-r--r-- | nixpkgs/pkgs/servers/klipper/klipper-firmware.nix | 61 | ||||
-rw-r--r-- | nixpkgs/pkgs/servers/klipper/klipper-flash.nix | 38 | ||||
-rw-r--r-- | nixpkgs/pkgs/servers/klipper/klipper-genconf.nix | 21 | ||||
-rw-r--r-- | nixpkgs/pkgs/servers/klipper/simulator.cfg | 23 |
5 files changed, 160 insertions, 11 deletions
diff --git a/nixpkgs/pkgs/servers/klipper/default.nix b/nixpkgs/pkgs/servers/klipper/default.nix index 490bb9c9e094..c3f97ce779f9 100644 --- a/nixpkgs/pkgs/servers/klipper/default.nix +++ b/nixpkgs/pkgs/servers/klipper/default.nix @@ -1,32 +1,38 @@ { stdenv , lib , fetchFromGitHub -, python2 +, python3 , unstableGitUpdater }: stdenv.mkDerivation rec { pname = "klipper"; - version = "unstable-2022-03-11"; + version = "unstable-2022-06-18"; src = fetchFromGitHub { owner = "KevinOConnor"; repo = "klipper"; - rev = "e3beafbdb4f2ac3f889f81aec0cad5ec473c8612"; - sha256 = "sha256-xZSZUJ2TNaUzfwEFpnzr5EPlOvILLyiQ/3K1iiup7kU="; + rev = "d3c4ba4839dd7a4339ae024752e6c6424884c185"; + sha256 = "sha256-2Fq56JIk5qcKpWffz1k/EJ+xYAnUpuxvCryq88l//8E="; }; sourceRoot = "source/klippy"; - # there is currently an attempt at moving it to Python 3, but it will remain - # Python 2 for the foreseeable future. - # c.f. https://github.com/KevinOConnor/klipper/pull/3278 # NB: This is needed for the postBuild step - nativeBuildInputs = [ (python2.withPackages ( p: with p; [ cffi ] )) ]; + nativeBuildInputs = [ (python3.withPackages ( p: with p; [ cffi ] )) ]; - buildInputs = [ (python2.withPackages (p: with p; [ cffi pyserial greenlet jinja2 ])) ]; + buildInputs = [ (python3.withPackages (p: with p; [ cffi pyserial greenlet jinja2 markupsafe ])) ]; # we need to run this to prebuild the chelper. - postBuild = "python2 ./chelper/__init__.py"; + postBuild = "python ./chelper/__init__.py"; + + # 2022-06-28: Python 3 is already supported in klipper, alas shebangs remained + # the same - we replace them in patchPhase. + patchPhase = '' + for F in klippy.py console.py parsedump.py; do + substituteInPlace $F \ + --replace '/usr/bin/env python2' '/usr/bin/env python' + done + ''; # NB: We don't move the main entry point into `/bin`, or even symlink it, # because it uses relative paths to find necessary modules. We could wrap but @@ -50,7 +56,7 @@ stdenv.mkDerivation rec { meta = with lib; { description = "The Klipper 3D printer firmware"; homepage = "https://github.com/KevinOConnor/klipper"; - maintainers = with maintainers; [ lovesegfault zhaofengli ]; + maintainers = with maintainers; [ lovesegfault zhaofengli cab404 ]; platforms = platforms.linux; license = licenses.gpl3Only; }; diff --git a/nixpkgs/pkgs/servers/klipper/klipper-firmware.nix b/nixpkgs/pkgs/servers/klipper/klipper-firmware.nix new file mode 100644 index 000000000000..f80cec0b687e --- /dev/null +++ b/nixpkgs/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/nixpkgs/pkgs/servers/klipper/klipper-flash.nix b/nixpkgs/pkgs/servers/klipper/klipper-flash.nix new file mode 100644 index 000000000000..fedc477c2761 --- /dev/null +++ b/nixpkgs/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/nixpkgs/pkgs/servers/klipper/klipper-genconf.nix b/nixpkgs/pkgs/servers/klipper/klipper-genconf.nix new file mode 100644 index 000000000000..42eb519e8c19 --- /dev/null +++ b/nixpkgs/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/nixpkgs/pkgs/servers/klipper/simulator.cfg b/nixpkgs/pkgs/servers/klipper/simulator.cfg new file mode 100644 index 000000000000..4dc19b1e40ff --- /dev/null +++ b/nixpkgs/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 |