SIGN IN SIGN UP
# HOWTO add a new implementation (named "foo"):
# - Add "foo" to the IMPLS variable (alphabetical order)
# - Add a new "foo_STEP_TO_PROG" variable.
# - Add an "impls/foo/run" script.
# - Add an "impls/foo/Makefile"
# - Add an "impls/foo/Dockerfile"
# - Implement each step in "impls/foo/".
#
# Implementation specific command line settings
#
# cbm or qbasic
basic_MODE = cbm
# clj or cljs (Clojure vs ClojureScript/lumo)
clojure_MODE = clj
# gdc, ldc2, or dmd
d_MODE = gdc
# python, js, cpp, or neko
haxe_MODE = neko
# octave or matlab
matlab_MODE = octave
# scheme (chibi, kawa, gauche, chicken, sagittarius, cyclone, foment)
scheme_MODE = chibi
2021-03-29 14:43:51 +02:00
# sml (polyml, mlton, mosml)
sml_MODE = polyml
# wasmtime wasmer wax node warpy wace_libc direct js wace_fooboot
wasm_MODE = wasmtime
#
# Implementation specific settings
#
IMPLS = ada ada.2 awk bash basic bbc-basic c c.2 chuck clojure coffee common-lisp cpp crystal cs d dart \
2021-04-23 01:45:27 +09:00
elisp elixir elm erlang es6 factor fantom fennel forth fsharp go groovy gnu-smalltalk \
2025-03-26 01:15:31 +01:00
guile hare haskell haxe hy io janet java java-truffle js jq julia kotlin latex3 livescript logo lua make mal \
matlab miniMAL nasm nim objc objpascal ocaml perl perl6 php picolisp pike plpgsql \
plsql powershell prolog ps purs python2 python3 r racket rexx rpython ruby ruby.2 rust scala scheme skew sml \
2024-10-15 19:57:59 +02:00
swift swift3 swift4 swift6 tcl ts vala vb vbs vhdl vimscript wasm wren yorick xslt zig
step5_EXCLUDES += bash # never completes at 10,000
step5_EXCLUDES += basic # too slow, and limited to ints of 2^16
step5_EXCLUDES += latex3 # no iteration, limited native stack
step5_EXCLUDES += make # no TCO capability (iteration or recursion)
step5_EXCLUDES += mal # host impl dependent
step5_EXCLUDES += matlab # never completes at 10,000
step5_EXCLUDES += plpgsql # too slow for 10,000
step5_EXCLUDES += plsql # too slow for 10,000
step5_EXCLUDES += powershell # too slow for 10,000
step5_EXCLUDES += prolog # no iteration (but interpreter does TCO implicitly)
2021-03-28 20:08:58 +02:00
step5_EXCLUDES += sml # not implemented :(
step5_EXCLUDES += $(if $(filter cpp,$(haxe_MODE)),haxe,) # cpp finishes 10,000, segfaults at 100,000
step5_EXCLUDES += xslt # iteration cannot be expressed
step5_EXCLUDES += vbs # too slow for 10,000
dist_EXCLUDES += mal
# TODO: still need to implement dist
dist_EXCLUDES += guile io julia matlab swift
# Extra options to pass to runtest.py
bbc-basic_TEST_OPTS = --test-timeout 60
guile_TEST_OPTS = --test-timeout 120
io_TEST_OPTS = --test-timeout 120
2020-08-27 12:56:54 -04:00
java-truffle_TEST_OPTS = --start-timeout 30
logo_TEST_OPTS = --start-timeout 60 --test-timeout 120
mal_TEST_OPTS = --start-timeout 60 --test-timeout 120
miniMAL_TEST_OPTS = --start-timeout 60 --test-timeout 120
perl6_TEST_OPTS = --test-timeout=60
plpgsql_TEST_OPTS = --start-timeout 60 --test-timeout 180
plsql_TEST_OPTS = --start-timeout 120 --test-timeout 120
vimscript_TEST_OPTS = --test-timeout 30
ifeq ($(MAL_IMPL),vimscript)
mal_TEST_OPTS = --start-timeout 60 --test-timeout 180
else ifeq ($(MAL_IMPL),powershell)
mal_TEST_OPTS = --start-timeout 60 --test-timeout 180
else ifeq ($(MAL_IMPL),vbs)
mal_TEST_OPTS = --start-timeout 60 --test-timeout 180 --no-pty
endif
xslt_TEST_OPTS = --test-timeout 120
vbs_TEST_OPTS = --no-pty
#
# Implementation specific utility functions
#
basic_STEP_TO_PROG_cbm = impls/basic/$($(1)).bas
basic_STEP_TO_PROG_qbasic = impls/basic/$($(1))
clojure_STEP_TO_PROG_clj = impls/clojure/target/$($(1)).jar
clojure_STEP_TO_PROG_cljs = impls/clojure/src/mal/$($(1)).cljc
haxe_STEP_TO_PROG_neko = impls/haxe/$($(1)).n
haxe_STEP_TO_PROG_python = impls/haxe/$($(1)).py
haxe_STEP_TO_PROG_cpp = impls/haxe/cpp/$($(1))
haxe_STEP_TO_PROG_js = impls/haxe/$($(1)).js
scheme_STEP_TO_PROG_chibi = impls/scheme/$($(1)).scm
scheme_STEP_TO_PROG_kawa = impls/scheme/out/$($(1)).class
scheme_STEP_TO_PROG_gauche = impls/scheme/$($(1)).scm
scheme_STEP_TO_PROG_chicken = impls/scheme/$($(1))
scheme_STEP_TO_PROG_sagittarius = impls/scheme/$($(1)).scm
scheme_STEP_TO_PROG_cyclone = impls/scheme/$($(1))
scheme_STEP_TO_PROG_foment = impls/scheme/$($(1)).scm
# Map of step (e.g. "step8") to executable file for that step
ada_STEP_TO_PROG = impls/ada/$($(1))
ada.2_STEP_TO_PROG = impls/ada.2/$($(1))
awk_STEP_TO_PROG = impls/awk/$($(1)).awk
bash_STEP_TO_PROG = impls/bash/$($(1)).sh
basic_STEP_TO_PROG = $(basic_STEP_TO_PROG_$(basic_MODE))
bbc-basic_STEP_TO_PROG = impls/bbc-basic/$($(1)).bas
c_STEP_TO_PROG = impls/c/$($(1))
c.2_STEP_TO_PROG = impls/c.2/$($(1))
chuck_STEP_TO_PROG = impls/chuck/$($(1)).ck
clojure_STEP_TO_PROG = $(clojure_STEP_TO_PROG_$(clojure_MODE))
coffee_STEP_TO_PROG = impls/coffee/$($(1)).coffee
common-lisp_STEP_TO_PROG = impls/common-lisp/$($(1))
cpp_STEP_TO_PROG = impls/cpp/$($(1))
crystal_STEP_TO_PROG = impls/crystal/$($(1))
cs_STEP_TO_PROG = impls/cs/$($(1)).exe
d_STEP_TO_PROG = impls/d/$($(1))
dart_STEP_TO_PROG = impls/dart/$($(1)).dart
elisp_STEP_TO_PROG = impls/elisp/$($(1)).el
elixir_STEP_TO_PROG = impls/elixir/lib/mix/tasks/$($(1)).ex
elm_STEP_TO_PROG = impls/elm/$($(1)).js
erlang_STEP_TO_PROG = impls/erlang/$($(1))
es6_STEP_TO_PROG = impls/es6/$($(1)).mjs
factor_STEP_TO_PROG = impls/factor/$($(1))/$($(1)).factor
fantom_STEP_TO_PROG = impls/fantom/lib/fan/$($(1)).pod
2021-04-22 11:55:17 -05:00
fennel_STEP_TO_PROG = impls/fennel/$($(1)).fnl
forth_STEP_TO_PROG = impls/forth/$($(1)).fs
fsharp_STEP_TO_PROG = impls/fsharp/$($(1)).exe
go_STEP_TO_PROG = impls/go/$($(1))
groovy_STEP_TO_PROG = impls/groovy/$($(1)).groovy
gnu-smalltalk_STEP_TO_PROG = impls/gnu-smalltalk/$($(1)).st
guile_STEP_TO_PROG = impls/guile/$($(1)).scm
2025-03-26 01:15:31 +01:00
hare_STEP_TO_PROG = impls/hare/$($(1))
haskell_STEP_TO_PROG = impls/haskell/$($(1))
haxe_STEP_TO_PROG = $(haxe_STEP_TO_PROG_$(haxe_MODE))
hy_STEP_TO_PROG = impls/hy/$($(1)).hy
io_STEP_TO_PROG = impls/io/$($(1)).io
janet_STEP_TO_PROG = impls/janet/$($(1)).janet
java_STEP_TO_PROG = impls/java/target/classes/mal/$($(1)).class
2020-08-27 12:56:54 -04:00
java-truffle_STEP_TO_PROG = impls/java-truffle/build/classes/java/main/truffle/mal/$($(1)).class
js_STEP_TO_PROG = impls/js/$($(1)).js
jq_STEP_PROG = impls/jq/$($(1)).jq
julia_STEP_TO_PROG = impls/julia/$($(1)).jl
kotlin_STEP_TO_PROG = impls/kotlin/$($(1)).jar
latex3_STEP_TO_PROG = impls/latex3/$($(1)).tex
livescript_STEP_TO_PROG = impls/livescript/$($(1)).js
logo_STEP_TO_PROG = impls/logo/$($(1)).lg
lua_STEP_TO_PROG = impls/lua/$($(1)).lua
make_STEP_TO_PROG = impls/make/$($(1)).mk
mal_STEP_TO_PROG = impls/mal/$($(1)).mal
matlab_STEP_TO_PROG = impls/matlab/$($(1)).m
miniMAL_STEP_TO_PROG = impls/miniMAL/$($(1)).json
nasm_STEP_TO_PROG = impls/nasm/$($(1))
nim_STEP_TO_PROG = impls/nim/$($(1))
objc_STEP_TO_PROG = impls/objc/$($(1))
objpascal_STEP_TO_PROG = impls/objpascal/$($(1))
ocaml_STEP_TO_PROG = impls/ocaml/$($(1))
perl_STEP_TO_PROG = impls/perl/$($(1)).pl
perl6_STEP_TO_PROG = impls/perl6/$($(1)).pl
php_STEP_TO_PROG = impls/php/$($(1)).php
picolisp_STEP_TO_PROG = impls/picolisp/$($(1)).l
pike_STEP_TO_PROG = impls/pike/$($(1)).pike
plpgsql_STEP_TO_PROG = impls/plpgsql/$($(1)).sql
plsql_STEP_TO_PROG = impls/plsql/$($(1)).sql
powershell_STEP_TO_PROG = impls/powershell/$($(1)).ps1
prolog_STEP_TO_PROG = impls/prolog/$($(1)).pl
ps_STEP_TO_PROG = impls/ps/$($(1)).ps
2021-07-22 18:49:59 +09:00
purs_STEP_TO_PROG = impls/purs/$($(1)).js
python2_STEP_TO_PROG = impls/python2/$($(1)).py
python3_STEP_TO_PROG = impls/python3/$($(1)).py
r_STEP_TO_PROG = impls/r/$($(1)).r
racket_STEP_TO_PROG = impls/racket/$($(1)).rkt
rexx_STEP_TO_PROG = impls/rexx/$($(1)).rexxpp
rpython_STEP_TO_PROG = impls/rpython/$($(1))
ruby_STEP_TO_PROG = impls/ruby/$($(1)).rb
2021-11-19 20:32:12 -07:00
ruby.2_STEP_TO_PROG = impls/ruby.2/$($(1)).rb
rust_STEP_TO_PROG = impls/rust/target/release/$($(1))
scala_STEP_TO_PROG = impls/scala/target/scala-2.11/classes/$($(1)).class
scheme_STEP_TO_PROG = $(scheme_STEP_TO_PROG_$(scheme_MODE))
skew_STEP_TO_PROG = impls/skew/$($(1)).js
2021-03-24 17:24:35 +01:00
sml_STEP_TO_PROG = impls/sml/$($(1))
swift_STEP_TO_PROG = impls/swift/$($(1))
swift3_STEP_TO_PROG = impls/swift3/$($(1))
swift4_STEP_TO_PROG = impls/swift4/$($(1))
2024-10-15 19:57:59 +02:00
swift6_STEP_TO_PROG = impls/swift6/$($(1))
tcl_STEP_TO_PROG = impls/tcl/$($(1)).tcl
ts_STEP_TO_PROG = impls/ts/$($(1)).js
vala_STEP_TO_PROG = impls/vala/$($(1))
vb_STEP_TO_PROG = impls/vb/$($(1)).exe
2024-08-08 12:31:58 +08:00
vbs_STEP_TO_PROG = impls/vbs/$($(1)).vbs
vhdl_STEP_TO_PROG = impls/vhdl/$($(1))
vimscript_STEP_TO_PROG = impls/vimscript/$($(1)).vim
wasm_STEP_TO_PROG = impls/wasm/$($(1)).wasm
wren_STEP_TO_PROG = impls/wren/$($(1)).wren
yorick_STEP_TO_PROG = impls/yorick/$($(1)).i
xslt_STEP_TO_PROG = impls/xslt/$($(1))
zig_STEP_TO_PROG = impls/zig/$($(1))