mirror of
https://github.com/kanaka/mal.git
synced 2024-08-17 09:40:21 +03:00
200 lines
8.9 KiB
Makefile
200 lines
8.9 KiB
Makefile
# 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
|
|
# python, python2 or python3
|
|
python_MODE = python
|
|
# scheme (chibi, kawa, gauche, chicken, sagittarius, cyclone, foment)
|
|
scheme_MODE = chibi
|
|
# sml (polyml, mlton, mosml)
|
|
sml_MODE = polyml
|
|
# wasmtime wasmer lucet wax node warpy wace_libc
|
|
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 \
|
|
elisp elixir elm erlang es6 factor fantom fennel forth fsharp go groovy gnu-smalltalk \
|
|
guile haskell haxe hy io janet java java-truffle js jq julia kotlin livescript logo lua make mal \
|
|
matlab miniMAL nasm nim objc objpascal ocaml perl perl6 php picolisp pike plpgsql \
|
|
plsql powershell prolog ps purs python python.2 r racket rexx rpython ruby ruby.2 rust scala scheme skew sml \
|
|
swift swift3 swift4 swift5 tcl ts vala vb 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 += logo # too slow for 10,000
|
|
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)
|
|
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
|
|
|
|
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
|
|
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
|
|
endif
|
|
xslt_TEST_OPTS = --test-timeout 120
|
|
|
|
|
|
#
|
|
# 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
purs_STEP_TO_PROG = impls/purs/$($(1)).js
|
|
python_STEP_TO_PROG = impls/python/$($(1)).py
|
|
python.2_STEP_TO_PROG = impls/python.2/$($(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
|
|
ruby.2_STEP_TO_PROG = impls/ruby.2/$($(1)).rb
|
|
rust_STEP_TO_PROG = impls/rust/$($(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
|
|
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))
|
|
swift5_STEP_TO_PROG = impls/swift5/$($(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
|
|
vhdl_STEP_TO_PROG = impls/vhdl/$($(1))
|
|
vimscript_STEP_TO_PROG = impls/vimscript/$($(1)).vim
|
|
wasm_STEP_TO_PROG = impls/wasm/$($(1)).$(if $(filter lucet,$(wasm_MODE)),so,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))
|