diff --git a/pkgs/development/compilers/jasmin/default.nix b/pkgs/development/compilers/jasmin/default.nix new file mode 100644 index 00000000000..ef1b3055190 --- /dev/null +++ b/pkgs/development/compilers/jasmin/default.nix @@ -0,0 +1,44 @@ +{ stdenv +, fetchurl +, unzip +, jdk +, ant +, makeWrapper +, jre +, callPackage +}: + +stdenv.mkDerivation rec { + pname = "jasmin"; + version = "2.4"; + + src = fetchurl { + url = "mirror://sourceforge/jasmin/jasmin-${version}/jasmin-${version}.zip"; + sha256 = "17a41vr96glcdrdbk88805wwvv1r6w8wg7if23yhd0n6rrl0r8ga"; + }; + + nativeBuildInputs = [ unzip jdk ant makeWrapper ]; + + buildPhase = "ant all"; + installPhase = + '' + install -Dm644 jasmin.jar $out/share/java/jasmin.jar + mkdir -p $out/bin + makeWrapper ${jre}/bin/java $out/bin/jasmin \ + --add-flags "-jar $out/share/java/jasmin.jar" + ''; + + passthru.tests = { + minimal-module = callPackage ./test-assemble-hello-world {}; + }; + + meta = with stdenv.lib; { + description = "An assembler for the Java Virtual Machine"; + homepage = "http://jasmin.sourceforge.net/"; + downloadPage = "https://sourceforge.net/projects/jasmin/files/latest/download"; + license = licenses.bsd3; + maintainers = with maintainers; [ fgaz ]; + platforms = platforms.all; + }; +} + diff --git a/pkgs/development/compilers/jasmin/test-assemble-hello-world/HelloWorld.j b/pkgs/development/compilers/jasmin/test-assemble-hello-world/HelloWorld.j new file mode 100644 index 00000000000..564e6c8a9aa --- /dev/null +++ b/pkgs/development/compilers/jasmin/test-assemble-hello-world/HelloWorld.j @@ -0,0 +1,31 @@ +.class public HelloWorld +.super java/lang/Object + +; +; standard initializer (calls java.lang.Object's initializer) +; +.method public ()V + aload_0 + invokenonvirtual java/lang/Object/()V + return +.end method + +; +; main() - prints out Hello World +; +.method public static main([Ljava/lang/String;)V + .limit stack 2 ; up to two items can be pushed + + ; push System.out onto the stack + getstatic java/lang/System/out Ljava/io/PrintStream; + + ; push a string onto the stack + ldc "Hello World!" + + ; call the PrintStream.println() method. + invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V + + ; done + return +.end method + diff --git a/pkgs/development/compilers/jasmin/test-assemble-hello-world/default.nix b/pkgs/development/compilers/jasmin/test-assemble-hello-world/default.nix new file mode 100644 index 00000000000..1840edffa77 --- /dev/null +++ b/pkgs/development/compilers/jasmin/test-assemble-hello-world/default.nix @@ -0,0 +1,12 @@ +{ stdenv, jasmin, jre }: + +stdenv.mkDerivation { + name = "jasmin-test-assemble-hello-world"; + meta.timeout = 60; + buildCommand = '' + ${jasmin}/bin/jasmin ${./HelloWorld.j} + ${jre}/bin/java HelloWorld | grep "Hello World" + touch $out + ''; +} + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e8a205aafd3..fc6b8adea04 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8275,6 +8275,8 @@ in inherit installjdk pluginSupport; }); + jasmin = callPackage ../development/compilers/jasmin { }; + javacard-devkit = pkgsi686Linux.callPackage ../development/compilers/javacard-devkit { }; julia_07 = callPackage ../development/compilers/julia/0.7.nix {