diff --git a/packages/brainfuck/2.7.3/build.sh b/packages/brainfuck/2.7.3/build.sh new file mode 100644 index 0000000..50c1868 --- /dev/null +++ b/packages/brainfuck/2.7.3/build.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# Put instructions to build your package in here +PREFIX=$(realpath $(dirname $0)) + +git clone https://github.com/fabianishere/brainfuck.git + +cd brainfuck +git checkout 06f84462e0a96487670a4b8024e3ec531e0377ee + + +mkdir -p build + +cd build + +cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX/ -DENABLE_EDITLINE=OFF + +make -j$(nproc) +make install -j$(nproc) + +cd ../../ +rm -rf brainfuck diff --git a/packages/brainfuck/2.7.3/environment b/packages/brainfuck/2.7.3/environment new file mode 100644 index 0000000..780b668 --- /dev/null +++ b/packages/brainfuck/2.7.3/environment @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +# Put 'export' statements here for environment variables +export PATH=$PWD/bin:$PATH diff --git a/packages/brainfuck/2.7.3/metadata.json b/packages/brainfuck/2.7.3/metadata.json new file mode 100644 index 0000000..a9f3083 --- /dev/null +++ b/packages/brainfuck/2.7.3/metadata.json @@ -0,0 +1,5 @@ +{ + "language": "brainfuck", + "version": "2.7.3", + "aliases": ["bf"] +} diff --git a/packages/brainfuck/2.7.3/run b/packages/brainfuck/2.7.3/run new file mode 100644 index 0000000..7c4e7dd --- /dev/null +++ b/packages/brainfuck/2.7.3/run @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +# Put instructions to run the runtime +fold -w1 | brainfuck $1 diff --git a/packages/brainfuck/2.7.3/test.bf b/packages/brainfuck/2.7.3/test.bf new file mode 100644 index 0000000..d0c07ec --- /dev/null +++ b/packages/brainfuck/2.7.3/test.bf @@ -0,0 +1 @@ +-[--->+<]>------.----. \ No newline at end of file diff --git a/packages/coffeescript/2.5.1/build.sh b/packages/coffeescript/2.5.1/build.sh new file mode 100755 index 0000000..58d99b2 --- /dev/null +++ b/packages/coffeescript/2.5.1/build.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Download and install NodeJS +curl "https://nodejs.org/dist/v15.10.0/node-v15.10.0-linux-x64.tar.xz" -o node.tar.xz +tar xf node.tar.xz --strip-components=1 +rm node.tar.xz +export PATH=$PWD/bin:$PATH + +# Install CoffeeScript via npm and done +npm install --global coffeescript@2.5.1 diff --git a/packages/coffeescript/2.5.1/environment b/packages/coffeescript/2.5.1/environment new file mode 100644 index 0000000..bd0ff98 --- /dev/null +++ b/packages/coffeescript/2.5.1/environment @@ -0,0 +1 @@ +export PATH=$PWD/bin:$PATH \ No newline at end of file diff --git a/packages/coffeescript/2.5.1/metadata.json b/packages/coffeescript/2.5.1/metadata.json new file mode 100644 index 0000000..23380d1 --- /dev/null +++ b/packages/coffeescript/2.5.1/metadata.json @@ -0,0 +1,5 @@ +{ + "language": "coffeescript", + "version": "2.5.1", + "aliases": ["coffeescript", "coffee"] +} diff --git a/packages/coffeescript/2.5.1/run b/packages/coffeescript/2.5.1/run new file mode 100644 index 0000000..5d8cc03 --- /dev/null +++ b/packages/coffeescript/2.5.1/run @@ -0,0 +1,3 @@ +#!/bin/bash + +coffee "$@" diff --git a/packages/coffeescript/2.5.1/test.coffee b/packages/coffeescript/2.5.1/test.coffee new file mode 100644 index 0000000..b3a8f72 --- /dev/null +++ b/packages/coffeescript/2.5.1/test.coffee @@ -0,0 +1 @@ +console.log "OK" \ No newline at end of file diff --git a/packages/llvm_ir/12.0.1/build.sh b/packages/llvm_ir/12.0.1/build.sh new file mode 100755 index 0000000..7afd41a --- /dev/null +++ b/packages/llvm_ir/12.0.1/build.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +curl -L "https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/clang+llvm-12.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz" -o llvm-ir.tar.xz + +tar xf llvm-ir.tar.xz clang+llvm-12.0.1-x86_64-linux-gnu-ubuntu-/bin --strip-components=1 + +rm llvm-ir.tar.xz diff --git a/packages/llvm_ir/12.0.1/compile b/packages/llvm_ir/12.0.1/compile new file mode 100755 index 0000000..082fb5c --- /dev/null +++ b/packages/llvm_ir/12.0.1/compile @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +llc "$@" -o binary.s +clang binary.s -o binary diff --git a/packages/llvm_ir/12.0.1/environment b/packages/llvm_ir/12.0.1/environment new file mode 100644 index 0000000..85a25b6 --- /dev/null +++ b/packages/llvm_ir/12.0.1/environment @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +export PATH=$PWD/bin:$PATH diff --git a/packages/llvm_ir/12.0.1/metadata.json b/packages/llvm_ir/12.0.1/metadata.json new file mode 100644 index 0000000..50dfbbc --- /dev/null +++ b/packages/llvm_ir/12.0.1/metadata.json @@ -0,0 +1,5 @@ +{ + "language": "llvm_ir", + "version": "12.0.1", + "aliases": ["llvm", "llvm-ir", "ll"] +} diff --git a/packages/llvm_ir/12.0.1/run b/packages/llvm_ir/12.0.1/run new file mode 100644 index 0000000..94b3b0b --- /dev/null +++ b/packages/llvm_ir/12.0.1/run @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +shift +binary "$@" diff --git a/packages/llvm_ir/12.0.1/test.ll b/packages/llvm_ir/12.0.1/test.ll new file mode 100644 index 0000000..be7d5d3 --- /dev/null +++ b/packages/llvm_ir/12.0.1/test.ll @@ -0,0 +1,10 @@ +@.str = private unnamed_addr constant [2 x i8] c"OK" + +declare i32 @puts(i8* nocapture) nounwind + +define i32 @main() { + %cast210 = getelementptr [2 x i8],[2 x i8]* @.str, i64 0, i64 0 + + call i32 @puts(i8* %cast210) + ret i32 0 +} diff --git a/packages/mono/6.12.0/build.sh b/packages/mono/6.12.0/build.sh new file mode 100755 index 0000000..7bb4b63 --- /dev/null +++ b/packages/mono/6.12.0/build.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +PREFIX=$(realpath $(dirname $0)) + +mkdir -p build/mono build/mono-basic +cd build + +curl "https://download.mono-project.com/sources/mono/mono-6.12.0.122.tar.xz" -o mono.tar.xz +curl -L "https://github.com/mono/mono-basic/archive/refs/tags/4.7.tar.gz" -o mono-basic.tar.gz +tar xf mono.tar.xz --strip-components=1 -C mono +tar xf mono-basic.tar.gz --strip-components=1 -C mono-basic + +# Compiling Mono +cd mono + +./configure --prefix "$PREFIX" + +make -j$(nproc) +make install -j$(nproc) + +export PATH="$PREFIX/bin:$PATH" # To be able to use mono commands + +# Compiling mono-basic +cd ../mono-basic +./configure --prefix="$PREFIX" + +make -j$(nproc) PLATFORM="linux" # Avoids conflict with the $PLATFORM variable we have +make install -j$(nproc) PLATFORM="linux" + +# Remove redundant files +cd ../../ +rm -rf build diff --git a/packages/mono/6.12.0/compile b/packages/mono/6.12.0/compile new file mode 100644 index 0000000..5246bc2 --- /dev/null +++ b/packages/mono/6.12.0/compile @@ -0,0 +1,16 @@ +#!/bin/bash + +case "${PISTON_LANGUAGE}" in + csharp) + rename 's/$/\.cs/' "$@" # Add .cs extension + csc -out:out *.cs + ;; + basic) + rename 's/$/\.vb/' "$@" # Add .vb extension + vbnc -out:out *.vb + ;; + *) + echo "How did you get here? (${PISTON_LANGUAGE})" + exit 1 + ;; +esac diff --git a/packages/mono/6.12.0/environment b/packages/mono/6.12.0/environment new file mode 100644 index 0000000..977a5e8 --- /dev/null +++ b/packages/mono/6.12.0/environment @@ -0,0 +1 @@ +export PATH=$PWD/bin:$PATH diff --git a/packages/mono/6.12.0/metadata.json b/packages/mono/6.12.0/metadata.json new file mode 100644 index 0000000..3f483a4 --- /dev/null +++ b/packages/mono/6.12.0/metadata.json @@ -0,0 +1,20 @@ +{ + "language": "mono", + "version": "6.12.0", + "provides": [ + { + "language": "csharp", + "aliases": ["mono", "mono-csharp", "mono-c#", "mono-cs", "c#", "cs"] + }, + { + "language": "basic", + "aliases": [ + "vb", + "mono-vb", + "mono-basic", + "visual-basic", + "visual basic" + ] + } + ] +} diff --git a/packages/mono/6.12.0/run b/packages/mono/6.12.0/run new file mode 100644 index 0000000..5a2e015 --- /dev/null +++ b/packages/mono/6.12.0/run @@ -0,0 +1,4 @@ +#!/bin/bash + +shift +mono out "$@" \ No newline at end of file diff --git a/packages/mono/6.12.0/test.cs b/packages/mono/6.12.0/test.cs new file mode 100644 index 0000000..e91a2a2 --- /dev/null +++ b/packages/mono/6.12.0/test.cs @@ -0,0 +1,9 @@ +using System; + +public class Test +{ + public static void Main(string[] args) + { + Console.WriteLine("OK"); + } +} \ No newline at end of file diff --git a/packages/mono/6.12.0/test.vb b/packages/mono/6.12.0/test.vb new file mode 100644 index 0000000..291042e --- /dev/null +++ b/packages/mono/6.12.0/test.vb @@ -0,0 +1,9 @@ +Imports System + +Module Module1 + + Sub Main() + Console.WriteLine("OK") + End Sub + +End Module diff --git a/packages/scala/3.0.0/build.sh b/packages/scala/3.0.0/build.sh new file mode 100755 index 0000000..4cbf363 --- /dev/null +++ b/packages/scala/3.0.0/build.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Download and extract JDK8 +curl -L "https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz" -o jdk.tar.gz +tar xzf jdk.tar.gz --strip-components=1 +rm jdk.tar.gz + +# Download and extract Scala 3 +curl -L "https://github.com/lampepfl/dotty/releases/download/3.0.0/scala3-3.0.0.tar.gz" -o scala.tar.gz +tar -xzf scala.tar.gz --strip-components=1 +rm scala.tar.gz diff --git a/packages/scala/3.0.0/compile b/packages/scala/3.0.0/compile new file mode 100644 index 0000000..25853ef --- /dev/null +++ b/packages/scala/3.0.0/compile @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +# Compile scala classes into a jar file +scalac "$@" -d out.jar + +# Create the Manifest and include scala lib jars: +# NOTE: - entry point will only consider @main and App traits from the main file +# - scala lib jars will be added to the class path in order to run the jar properly +echo "Main-Class: $(grep -oP '\@main\s+def\s+\K[a-zA-Z][a-zA-Z0-9]*|object\s+\K[a-zA-Z][a-zA-Z0-9]*(?=\s+extends\s+App)' $1) +Class-Path: $(echo $JAVA_HOME/lib/*.jar | sed 's/\s/\n /g') + +" > manifest.txt + +# Update the jar with the manifest +jar ufm out.jar manifest.txt diff --git a/packages/scala/3.0.0/environment b/packages/scala/3.0.0/environment new file mode 100644 index 0000000..a1fcafe --- /dev/null +++ b/packages/scala/3.0.0/environment @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +# Scala requires JAVA_HOME to be set +export JAVA_HOME=$PWD +export PATH=$PWD/bin:$PATH diff --git a/packages/scala/3.0.0/metadata.json b/packages/scala/3.0.0/metadata.json new file mode 100644 index 0000000..37bccf8 --- /dev/null +++ b/packages/scala/3.0.0/metadata.json @@ -0,0 +1,5 @@ +{ + "language": "scala", + "version": "3.0.0", + "aliases": ["sc"] +} diff --git a/packages/scala/3.0.0/run b/packages/scala/3.0.0/run new file mode 100644 index 0000000..afcc045 --- /dev/null +++ b/packages/scala/3.0.0/run @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +# Run jar file +shift +java -jar out.jar "$@" diff --git a/packages/scala/3.0.0/test.scala b/packages/scala/3.0.0/test.scala new file mode 100644 index 0000000..bf4cabc --- /dev/null +++ b/packages/scala/3.0.0/test.scala @@ -0,0 +1,3 @@ +@main def run(): Unit = { + println("OK") +} \ No newline at end of file diff --git a/runtimes/brainfuck.nix b/runtimes/brainfuck.nix deleted file mode 100644 index 3acf84b..0000000 --- a/runtimes/brainfuck.nix +++ /dev/null @@ -1,55 +0,0 @@ -{pkgs, piston, ...}: -let - # All other BF packages are either marked as broken in nix-pkgs - # or have missing functionality. Yabi isn't perfect either. - pkg = pkgs.haskellPackages.yabi; -in piston.mkRuntime { - language = "brainfuck"; - version = pkg.version; - - aliases = [ - "bf" - "yabi" - ]; - - run = '' - # Yabi produces messages when parsing the BF file that are sent to stderr - # Yabi will also break when trying to take more input at EOF - ${pkg}/bin/yabi "$1" 2> /dev/null - ''; - - tests = [ - # stdout test - (piston.mkTest { - files = { - "test.bf" = ''-[--->+<]>------.----.''; - }; - args = []; - stdin = ""; - packages = []; - main = "test.bf"; - }) - - # stdin test - (piston.mkTest { - files = { - "test.bf" = '',.,.''; - }; - args = []; - stdin = "OK"; - packages = []; - main = "test.bf"; - }) - - # bf doesn't take args test - (piston.mkTest { - files = { - "test.bf" = ''-[--->+<]>------.----.''; - }; - args = ["OK"]; - stdin = ""; - packages = []; - main = "test.bf"; - }) - ]; -} \ No newline at end of file diff --git a/runtimes/default.nix b/runtimes/default.nix index 4624670..b2cf206 100644 --- a/runtimes/default.nix +++ b/runtimes/default.nix @@ -58,9 +58,4 @@ args: { "dotnet-sdk-fsharp-interactive" = import ./dotnet-sdk-fsharp-interactive.nix args; "dotnet-sdk-visual-basic" = import ./dotnet-sdk-visual-basic.nix args; "fpc-pascal" = import ./fpc-pascal.nix args; - "brainfuck" = import ./brainfuck.nix args; - "node-coffeescript" = import ./node-coffeescript.nix args; - "jvm-scala" = import ./jvm-scala.nix args; - "llvm_ir" = import ./llvm_ir.nix args; - "mono-basic" = import ./mono-basic.nix args; } diff --git a/runtimes/jvm-scala.nix b/runtimes/jvm-scala.nix deleted file mode 100644 index ab72b36..0000000 --- a/runtimes/jvm-scala.nix +++ /dev/null @@ -1,54 +0,0 @@ -{pkgs, piston, ...}: -let - pkg = pkgs.scala; - java = pkgs.jdk8; - sed = pkgs.gnused; -in piston.mkRuntime { - language = "scala"; - version = pkg.version; - runtime = "jvm"; - - aliases = [ - "sc" - ]; - - compile = '' - # Compile scala classes into a jar file - ${pkg}/bin/scalac "$@" -d out.jar - - # Capture extra class-path libraries - java_libs="$(echo ${java}/lib/openjdk/lib/*.jar | ${sed}/bin/sed 's/\s/\\n /g')" - scala_libs="$(echo ${pkg}/lib/*.jar | ${sed}/bin/sed 's/\s/\\n /g')" - - echo -e "Class-Path: $java_libs - $scala_libs - " > classPath - - # Update the jar manifest with scala libs - ${java}/bin/jar umf classPath out.jar - ''; - - run = '' - # Run jar from compile - shift - ${java}/bin/java -jar out.jar "$@" - ''; - - tests = [ - (piston.mkTest { - files = { - "test.sc" = '' - object Main { - def main(args: Array[String]) = { - println("OK") - } - } - ''; - }; - args = []; - stdin = ""; - packages = []; - main = "test.sc"; - }) - ]; -} \ No newline at end of file diff --git a/runtimes/llvm_ir.nix b/runtimes/llvm_ir.nix deleted file mode 100644 index 2f736aa..0000000 --- a/runtimes/llvm_ir.nix +++ /dev/null @@ -1,47 +0,0 @@ -{pkgs, piston, ...}: -let - pkg = pkgs.llvm; - clang = pkgs.llvmPackages_13.libcxxClang; -in piston.mkRuntime { - language = "llvm_ir"; - version = clang.version; - - aliases = [ - "llvm" - "llvm-ir" - "ll" - ]; - - compile = '' - ${pkg}/bin/llc "$@" -o binary.s - ${clang}/bin/clang binary.s -o binary - ''; - - run = '' - shift - ./binary "$@" - ''; - - tests = [ - (piston.mkTest { - files = { - "test.ll" = '' - @.str = private unnamed_addr constant [2 x i8] c"OK" - - declare i32 @puts(i8* nocapture) nounwind - - define i32 @main() { - %cast210 = getelementptr [2 x i8],[2 x i8]* @.str, i64 0, i64 0 - - call i32 @puts(i8* %cast210) - ret i32 0 - } - ''; - }; - args = []; - stdin = ""; - packages = []; - main = "test.ll"; - }) - ]; -} \ No newline at end of file diff --git a/runtimes/mono-basic.nix b/runtimes/mono-basic.nix deleted file mode 100644 index ecafd3c..0000000 --- a/runtimes/mono-basic.nix +++ /dev/null @@ -1,47 +0,0 @@ -{pkgs, piston, ...}: -let - pkg = pkgs.mono; -in piston.mkRuntime { - language = "basic"; - version = pkg.version; - runtime = "mono"; - - aliases = [ - "vb" - "mono-vb" - "mono-basic" - "visual-basic" - ]; - - compile = '' - rename 's/$/\.vb/' "$@" # Add .vb extension - ${pkg}/bin/vbc -out:out -sdkpath:${pkg}/lib/mono/4.8-api *.vb - ''; - - run = '' - shift - ${pkg}/bin/mono out.exe "$@" - ''; - - tests = [ - (piston.mkTest { - files = { - "test.vb" = '' - Imports System - - Module Module1 - - Sub Main() - Console.WriteLine("OK") - End Sub - - End Module - ''; - }; - args = []; - stdin = ""; - packages = []; - main = "test.vb"; - }) - ]; -} \ No newline at end of file diff --git a/runtimes/node-coffeescript.nix b/runtimes/node-coffeescript.nix deleted file mode 100644 index 8f006ea..0000000 --- a/runtimes/node-coffeescript.nix +++ /dev/null @@ -1,57 +0,0 @@ -{pkgs, piston, ...}: -let - pkg = pkgs.nodePackages.coffee-script; -in piston.mkRuntime { - language = "coffeescript"; - version = pkg.version; - runtime = "node"; - - aliases = [ - "coffee" - ]; - - run = '' - ${pkg}/bin/coffee "$@" - ''; - - tests = [ - # stdout test - (piston.mkTest { - files = { - "test.coffee" = '' - console.log "OK" - ''; - }; - args = []; - stdin = ""; - packages = []; - main = "test.coffee"; - }) - - # args test - (piston.mkTest { - files = { - "test.coffee" = '' - console.log process.argv[2] - ''; - }; - args = ["OK"]; - stdin = ""; - packages = []; - main = "test.coffee"; - }) - - # stdin test - (piston.mkTest { - files = { - "test.coffee" = '' - process.stdin.on('data', (data) => console.log(data.toString())) - ''; - }; - args = []; - stdin = "OK"; - packages = []; - main = "test.coffee"; - }) - ]; -} \ No newline at end of file