diff --git a/pkgs/development/python-modules/wasmer/default.nix b/pkgs/development/python-modules/wasmer/default.nix index d3881032af13..dff14d15b901 100644 --- a/pkgs/development/python-modules/wasmer/default.nix +++ b/pkgs/development/python-modules/wasmer/default.nix @@ -1,45 +1,99 @@ -{ lib -, stdenv +{ stdenv +, lib , rustPlatform +, callPackage , fetchFromGitHub , buildPythonPackage , libiconv +, llvm_11 +, libffi +, libxml2 +, ncurses +, zlib }: -buildPythonPackage rec { - pname = "wasmer"; - version = "1.0.0"; +let + common = + { pname + , buildAndTestSubdir + , cargoHash + , extraNativeBuildInputs ? [ ] + , extraBuildInputs ? [ ] + }: buildPythonPackage rec { + inherit pname; + version = "1.0.0"; + format = "pyproject"; - src = fetchFromGitHub { - owner = "wasmerio"; - repo = "wasmer-python"; - rev = version; - hash = "sha256-I1GfjLaPYMIHKh2m/5IQepUsJNiVUEJg49wyuuzUYtY="; + outputs = [ "out" ] ++ lib.optional (pname == "wasmer") "testsout"; + + src = fetchFromGitHub { + owner = "wasmerio"; + repo = "wasmer-python"; + rev = version; + hash = "sha256-I1GfjLaPYMIHKh2m/5IQepUsJNiVUEJg49wyuuzUYtY="; + }; + + cargoDeps = rustPlatform.fetchCargoTarball { + inherit src; + name = "${pname}-${version}"; + sha256 = cargoHash; + }; + + nativeBuildInputs = (with rustPlatform; [ cargoSetupHook maturinBuildHook ]) + ++ extraNativeBuildInputs; + + buildInputs = lib.optionals stdenv.isDarwin [ libiconv ] + ++ extraBuildInputs; + + inherit buildAndTestSubdir; + + postInstall = lib.optionalString (pname == "wasmer") '' + mkdir $testsout + cp -R tests $testsout/tests + ''; + + # check in passthru.tests.pytest because all packages are required to run the tests + doCheck = false; + + passthru.tests = lib.optionalAttrs (pname == "wasmer") { + pytest = callPackage ./tests.nix { }; + }; + + pythonImportsCheck = [ "${lib.replaceStrings ["-"] ["_"] pname}" ]; + + meta = with lib; { + description = "Python extension to run WebAssembly binaries"; + homepage = "https://github.com/wasmerio/wasmer-python"; + license = licenses.mit; + platforms = platforms.unix; + maintainers = with maintainers; [ SuperSandro2000 ]; + }; + }; +in +rec { + wasmer = common { + pname = "wasmer"; + buildAndTestSubdir = "packages/api"; + cargoHash = "sha256-txOOia1C4W+nsXuXp4EytEn82CFfSmiOYwRLC4WPImc="; }; - cargoDeps = rustPlatform.fetchCargoTarball { - inherit src; - name = "${pname}-${version}"; - hash = "sha256-txOOia1C4W+nsXuXp4EytEn82CFfSmiOYwRLC4WPImc="; + wasmer-compiler-cranelift = common { + pname = "wasmer-compiler-cranelift"; + buildAndTestSubdir = "packages/compiler-cranelift"; + cargoHash = "sha256-cHgAUwqnbQV3E5nUYGYQ48ntbIFfq4JXfU5IrSFZ3zI="; }; - format = "pyproject"; + wasmer-compiler-llvm = common { + pname = "wasmer-compiler-llvm"; + buildAndTestSubdir = "packages/compiler-llvm"; + cargoHash = "sha256-Jm22CC5S3pN/vdVvsGZdvtoAgPzWVLto8wavSJdxY3A="; + extraNativeBuildInputs = [ llvm_11 ]; + extraBuildInputs = [ libffi libxml2.out ncurses zlib ]; + }; - nativeBuildInputs = with rustPlatform; [ cargoSetupHook maturinBuildHook ]; - - buildInputs = lib.optionals stdenv.isDarwin [ libiconv ]; - - buildAndTestSubdir = "packages/api"; - - doCheck = false; - - pythonImportsCheck = [ "wasmer" ]; - - meta = with lib; { - description = "Python extension to run WebAssembly binaries"; - homepage = "https://github.com/wasmerio/wasmer-python"; - license = licenses.mit; - platforms = platforms.unix; - maintainers = with maintainers; [ SuperSandro2000 ]; + wasmer-compiler-singlepass = common { + pname = "wasmer-compiler-singlepass"; + buildAndTestSubdir = "packages/compiler-singlepass"; + cargoHash = "sha256-lmqEo3+jYoN+4EEYphcoE4b84jdFcvYVycjrJ956Bh8="; }; } diff --git a/pkgs/development/python-modules/wasmer/tests.nix b/pkgs/development/python-modules/wasmer/tests.nix new file mode 100644 index 000000000000..bdb3adfe93ce --- /dev/null +++ b/pkgs/development/python-modules/wasmer/tests.nix @@ -0,0 +1,25 @@ +{ buildPythonPackage +, wasmer +, pytestCheckHook +, wasmer-compiler-cranelift +, wasmer-compiler-llvm +, wasmer-compiler-singlepass +}: + +buildPythonPackage rec { + pname = "wasmer-tests"; + inherit (wasmer) version; + + src = wasmer.testsout; + + dontBuild = true; + dontInstall = true; + + checkInputs = [ + pytestCheckHook + wasmer + wasmer-compiler-cranelift + wasmer-compiler-llvm + wasmer-compiler-singlepass + ]; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 9eb531ff8028..14950372494c 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -9319,7 +9319,8 @@ in { wasm = callPackage ../development/python-modules/wasm { }; - wasmer = callPackage ../development/python-modules/wasmer { }; + wasmerPackages = pkgs.recurseIntoAttrs (callPackage ../development/python-modules/wasmer { }); + inherit (self.wasmerPackages) wasmer wasmer-compiler-cranelift wasmer-compiler-llvm wasmer-compiler-singlepass; watchdog = callPackage ../development/python-modules/watchdog { inherit (pkgs.darwin.apple_sdk.frameworks) CoreServices;