-sudo: required
-
-# matrix layout based on:
-# https://github.com/libressl-portable/portable/blob/9e090286b55def5ca2c0cc375c65023a70d8796e/.travis.yml
-
-matrix:
- include:
- - {env: IMPL=ada, services: [docker]}
- - {env: IMPL=ada.2, services: [docker]}
- - {env: IMPL=awk, services: [docker]}
- - {env: IMPL=bash, services: [docker]}
- - {env: IMPL=basic basic_MODE=cbm, services: [docker]}
- - {env: IMPL=basic basic_MODE=qbasic, services: [docker]}
- - {env: IMPL=bbc-basic, services: [docker]}
- - {env: IMPL=c, services: [docker]}
- - {env: IMPL=cpp, services: [docker]}
- - {env: IMPL=coffee, services: [docker]}
- - {env: IMPL=cs, services: [docker]}
- - {env: IMPL=chuck, services: [docker]}
- - {env: IMPL=clojure clojure_MODE=clj, services: [docker]}
- - {env: IMPL=clojure clojure_MODE=cljs, services: [docker]}
- - {env: IMPL=common-lisp, services: [docker]}
- - {env: IMPL=crystal, services: [docker]}
- - {env: IMPL=d d_MODE=gdc, services: [docker]}
- - {env: IMPL=d d_MODE=ldc2, services: [docker]}
- - {env: IMPL=d d_MODE=dmd, services: [docker]}
- - {env: IMPL=dart, services: [docker]}
- - {env: IMPL=elisp, services: [docker]}
- - {env: IMPL=elixir, services: [docker]}
- - {env: IMPL=elm, services: [docker]}
- - {env: IMPL=erlang, services: [docker]} # perf runs out of memory
- - {env: IMPL=es6, services: [docker]}
- - {env: IMPL=factor, services: [docker]}
- - {env: IMPL=fantom, services: [docker]}
- - {env: IMPL=forth, services: [docker]}
- - {env: IMPL=fsharp, services: [docker]}
- - {env: IMPL=go, services: [docker]}
- - {env: IMPL=groovy, services: [docker]}
- - {env: IMPL=gnu-smalltalk, services: [docker]}
- - {env: IMPL=guile, services: [docker]}
- - {env: IMPL=haskell, services: [docker]}
- - {env: IMPL=haxe haxe_MODE=neko, services: [docker]}
- - {env: IMPL=haxe haxe_MODE=python, services: [docker]}
- - {env: IMPL=haxe haxe_MODE=cpp, services: [docker]}
- - {env: IMPL=haxe haxe_MODE=js, services: [docker]}
- - {env: IMPL=hy, services: [docker]}
- - {env: IMPL=io, services: [docker]}
- - {env: IMPL=java, services: [docker]}
- - {env: IMPL=js, services: [docker]}
- - {env: IMPL=julia, services: [docker]}
- - {env: IMPL=kotlin, services: [docker]}
- - {env: IMPL=livescript, services: [docker]}
- - {env: IMPL=logo, services: [docker]}
- - {env: IMPL=lua, services: [docker]}
- - {env: IMPL=make, services: [docker]}
- - {env: IMPL=mal BUILD_IMPL=js, services: [docker]}
- - {env: IMPL=matlab, services: [docker]} # Uses Octave
- - {env: IMPL=miniMAL, services: [docker]}
- - {env: IMPL=nasm, services: [docker]}
- - {env: IMPL=nim, services: [docker]}
- - {env: IMPL=objpascal, services: [docker]}
- - {env: IMPL=objc NO_DOCKER=1, os: osx, osx_image: xcode7}
- - {env: IMPL=objc, services: [docker]}
- - {env: IMPL=ocaml, services: [docker]}
- - {env: IMPL=perl, services: [docker]}
- - {env: IMPL=perl6, services: [docker]}
- - {env: IMPL=php, services: [docker]}
- - {env: IMPL=picolisp, services: [docker]}
- - {env: IMPL=plpgsql, services: [docker]}
-# - {env: IMPL=plsql, services: [docker]}
- - {env: IMPL=ps, services: [docker]}
- - {env: IMPL=powershell, services: [docker]}
- - {env: IMPL=python python_MODE=python2, services: [docker]}
- - {env: IMPL=python python_MODE=python3, services: [docker]}
- - {env: IMPL=r, services: [docker]}
- - {env: IMPL=racket, services: [docker]}
- - {env: IMPL=rexx, services: [docker]}
- - {env: IMPL=rpython, services: [docker]}
- - {env: IMPL=ruby, services: [docker]}
- - {env: IMPL=rust, services: [docker]}
- - {env: IMPL=scala, services: [docker]}
- - {env: IMPL=scheme scheme_MODE=chibi, services: [docker]}
- - {env: IMPL=scheme scheme_MODE=kawa, services: [docker]}
- - {env: IMPL=scheme scheme_MODE=gauche, services: [docker]}
- - {env: IMPL=scheme scheme_MODE=chicken, services: [docker]}
- - {env: IMPL=scheme scheme_MODE=sagittarius, services: [docker]}
- - {env: IMPL=scheme scheme_MODE=cyclone, services: [docker]}
-# - {env: IMPL=scheme scheme_MODE=foment, services: [docker]}
- - {env: IMPL=skew, services: [docker]}
- - {env: IMPL=swift NO_DOCKER=1, os: osx, osx_image: xcode7.3}
- - {env: IMPL=swift3, services: [docker]}
- - {env: IMPL=swift3 NO_DOCKER=1, os: osx, osx_image: xcode8}
- - {env: IMPL=swift4, services: [docker]}
- - {env: IMPL=swift4 NO_DOCKER=1, os: osx, osx_image: xcode10}
- - {env: IMPL=tcl, services: [docker]}
- - {env: IMPL=ts, services: [docker]}
- - {env: IMPL=vala, services: [docker]}
- - {env: IMPL=vb, services: [docker]}
- - {env: IMPL=vhdl, services: [docker]}
- - {env: IMPL=vimscript, services: [docker]}
- - {env: IMPL=wasm wasm_MODE=wasmtime, services: [docker]}
- - {env: IMPL=wasm wasm_MODE=wax, services: [docker]}
- - {env: IMPL=wasm wasm_MODE=node, services: [docker]}
- - {env: IMPL=wasm wasm_MODE=wace_libc, services: [docker]}
- - {env: IMPL=wasm wasm_MODE=warpy, services: [docker]}
- - {env: IMPL=yorick, services: [docker]}
-
-script:
- # Build
- - ./.travis_build.sh
-
- # Regular tests
- - ./.travis_test.sh test ${IMPL}
- - cat test.err || true
-
- # NOTE: use self-host-test branch
- # Self-hosted tests
- #- ./.travis_test.sh test mal ${IMPL}
- #- cat test.err || true; rm -f test.err
-
- # Performance tests
- - if [ -z "${NO_PERF}" ]; then ./.travis_test.sh perf ${IMPL}; fi
- - cat perf.err || true
+sudo: required
+
+# matrix layout based on:
+# https://github.com/libressl-portable/portable/blob/9e090286b55def5ca2c0cc375c65023a70d8796e/.travis.yml
+
+matrix:
+ include:
+ - {env: IMPL=ada, services: [docker]}
+ - {env: IMPL=ada.2, services: [docker]}
+ - {env: IMPL=awk, services: [docker]}
+ - {env: IMPL=bash NO_SELF_HOST_PERF=1, services: [docker]} # perf timeout
+ - {env: IMPL=basic basic_MODE=cbm NO_SELF_HOST=1, services: [docker]} # step4 OOM
+ - {env: IMPL=basic basic_MODE=qbasic NO_SELF_HOST=1, services: [docker]} # step4 OOM
+ - {env: IMPL=bbc-basic, services: [docker]}
+ - {env: IMPL=c, services: [docker]}
+ - {env: IMPL=cpp, services: [docker]}
+ - {env: IMPL=coffee, services: [docker]}
+ - {env: IMPL=cs, services: [docker]}
+ - {env: IMPL=chuck NO_SELF_HOST_PERF=1, services: [docker]} # perf OOM
+ - {env: IMPL=clojure clojure_MODE=clj, services: [docker]}
+ - {env: IMPL=clojure clojure_MODE=cljs, services: [docker]}
+ - {env: IMPL=common-lisp, services: [docker]}
+ - {env: IMPL=crystal, services: [docker]}
+ - {env: IMPL=d d_MODE=gdc, services: [docker]}
+ - {env: IMPL=d d_MODE=ldc2, services: [docker]}
+ - {env: IMPL=d d_MODE=dmd, services: [docker]}
+ - {env: IMPL=dart, services: [docker]}
+ - {env: IMPL=elisp, services: [docker]}
+ - {env: IMPL=elixir, services: [docker]}
+ - {env: IMPL=elm, services: [docker]}
+ - {env: IMPL=erlang NO_SELF_HOST=1, services: [docker]} # step8 OOM
+ - {env: IMPL=es6, services: [docker]}
+ - {env: IMPL=factor, services: [docker]}
+ - {env: IMPL=fantom, services: [docker]}
+ - {env: IMPL=forth, services: [docker]}
+ - {env: IMPL=fsharp, services: [docker]}
+ - {env: IMPL=go, services: [docker]}
+ - {env: IMPL=groovy, services: [docker]}
+ - {env: IMPL=gnu-smalltalk, services: [docker]}
+ - {env: IMPL=guile, services: [docker]}
+ - {env: IMPL=haskell, services: [docker]}
+ - {env: IMPL=haxe haxe_MODE=neko, services: [docker]}
+ - {env: IMPL=haxe haxe_MODE=python, services: [docker]}
+ - {env: IMPL=haxe haxe_MODE=cpp, services: [docker]}
+ - {env: IMPL=haxe haxe_MODE=js, services: [docker]}
+ - {env: IMPL=hy, services: [docker]}
+ - {env: IMPL=io NO_SELF_HOST_PERF=1, services: [docker]} # perf OOM
+ - {env: IMPL=java, services: [docker]}
+ - {env: IMPL=js, services: [docker]}
+ - {env: IMPL=julia, services: [docker]}
+ - {env: IMPL=kotlin, services: [docker]}
+ - {env: IMPL=livescript, services: [docker]}
+ - {env: IMPL=logo NO_SELF_HOST=1, services: [docker]} # step4 timeout
+ - {env: IMPL=lua, services: [docker]}
+ - {env: IMPL=make NO_SELF_HOST=1, services: [docker]} # step4 timeout
+ - {env: IMPL=mal BUILD_IMPL=js NO_SELF_HOST=1, services: [docker]}
+ - {env: IMPL=matlab NO_SELF_HOST_PERF=1, services: [docker]} # Octave, perf timeout
+ - {env: IMPL=miniMAL NO_SELF_HOST_PERF=1, services: [docker]} # perf timeout
+ - {env: IMPL=nasm NO_SELF_HOST_PERF=1, services: [docker]} # perf OOM
+ - {env: IMPL=nim, services: [docker]}
+ - {env: IMPL=objpascal, services: [docker]}
+ - {env: IMPL=objc NO_DOCKER=1, os: osx, osx_image: xcode7}
+ - {env: IMPL=objc, services: [docker]}
+ - {env: IMPL=ocaml, services: [docker]}
+ - {env: IMPL=perl, services: [docker]}
+ - {env: IMPL=perl6, services: [docker]}
+ - {env: IMPL=php, services: [docker]}
+ - {env: IMPL=picolisp, services: [docker]}
+ - {env: IMPL=plpgsql NO_SELF_HOST=1, services: [docker]} # step3 timeout
+# - {env: IMPL=plsql, services: [docker]}
+ - {env: IMPL=ps, services: [docker]}
+ - {env: IMPL=powershell NO_SELF_HOST_PERF=1, services: [docker]} # perf timeout
+ - {env: IMPL=python python_MODE=python2, services: [docker]}
+ - {env: IMPL=python python_MODE=python3, services: [docker]}
+ - {env: IMPL=r, services: [docker]}
+ - {env: IMPL=racket, services: [docker]}
+ - {env: IMPL=rexx, services: [docker]}
+ - {env: IMPL=rpython, services: [docker]}
+ - {env: IMPL=ruby, services: [docker]}
+ - {env: IMPL=rust, services: [docker]}
+ - {env: IMPL=scala, services: [docker]}
+ - {env: IMPL=scheme scheme_MODE=chibi, services: [docker]}
+ - {env: IMPL=scheme scheme_MODE=kawa, services: [docker]}
+ - {env: IMPL=scheme scheme_MODE=gauche, services: [docker]}
+ - {env: IMPL=scheme scheme_MODE=chicken, services: [docker]}
+ - {env: IMPL=scheme scheme_MODE=sagittarius, services: [docker]}
+ - {env: IMPL=scheme scheme_MODE=cyclone, services: [docker]}
+# - {env: IMPL=scheme scheme_MODE=foment, services: [docker]}
+ - {env: IMPL=skew, services: [docker]}
+ - {env: IMPL=swift NO_DOCKER=1, os: osx, osx_image: xcode7.3}
+ - {env: IMPL=swift3, services: [docker]}
+ - {env: IMPL=swift3 NO_DOCKER=1, os: osx, osx_image: xcode8}
+ - {env: IMPL=swift4, services: [docker]}
+ - {env: IMPL=swift4 NO_DOCKER=1, os: osx, osx_image: xcode10}
+ - {env: IMPL=tcl, services: [docker]}
+ - {env: IMPL=ts, services: [docker]}
+ - {env: IMPL=vala, services: [docker]}
+ - {env: IMPL=vb, services: [docker]}
+ - {env: IMPL=vhdl NO_SELF_HOST_PERF=1, services: [docker]} # perf timeout
+ - {env: IMPL=vimscript, services: [docker]}
+ - {env: IMPL=wasm wasm_MODE=wasmtime, services: [docker]}
+ - {env: IMPL=wasm wasm_MODE=wax, services: [docker]}
+ - {env: IMPL=wasm wasm_MODE=node, services: [docker]}
+ - {env: IMPL=wasm wasm_MODE=wace_libc, services: [docker]}
+ - {env: IMPL=wasm wasm_MODE=warpy, services: [docker]}
+ - {env: IMPL=yorick, services: [docker]}
+
+script:
+ # Build
+ - ./.travis_build.sh
+
+ # Normal tests
+ - ./.travis_test.sh test ${IMPL}
+ - cat test.err || true
+
+ # Performance tests
+ - ./.travis_test.sh perf ${IMPL}
+ - cat perf.err || true
# Returns nothing if DOCKERIZE is not set, otherwise returns the
# docker prefix necessary to run make within the docker environment
# for this impl
-get_build_command = $(strip $(if $(strip $(DOCKERIZE)),\
- docker run \
- -it --rm -u $(shell id -u) \
- -v $(dir $(abspath $(lastword $(MAKEFILE_LIST)))):/mal \
- -w /mal/$(1) \
- $(if $(strip $($(1)_MODE)),-e $(1)_MODE=$($(1)_MODE),) \
- $(if $(filter factor,$(1)),-e FACTOR_ROOTS=$(FACTOR_ROOTS),) \
- $(call impl_to_image,$(1)) \
- $(MAKE) $(if $(strip $($(1)_MODE)),$(1)_MODE=$($(1)_MODE),) \
- ,\
- $(MAKE) $(if $(strip $($(1)_MODE)),$(1)_MODE=$($(1)_MODE),)))
+get_build_command = $(strip $(foreach mode,$(1)_MODE, \
+ $(if $(strip $(DOCKERIZE)),\
+ docker run \
+ -it --rm -u $(shell id -u) \
+ -v $(dir $(abspath $(lastword $(MAKEFILE_LIST)))):/mal \
+ -w /mal/$(1) \
+ $(if $(strip $($(mode))),-e $(mode)=$($(mode)),) \
+ $(if $(filter factor,$(1)),-e FACTOR_ROOTS=$(FACTOR_ROOTS),) \
+ $(call impl_to_image,$(1)) \
+ $(MAKE) $(if $(strip $($(mode))),$(mode)=$($(mode)),) \
+ ,\
+ $(MAKE) $(if $(strip $($(mode))),$(mode)=$($(mode)),) -C $(impl))))
# Takes impl and step args. Optional env vars and dockerize args
# Returns a command prefix (docker command and environment variables)
# necessary to launch the given impl and step
-get_run_prefix = $(strip $(if $(strip $(DOCKERIZE) $(4)),\
- docker run -e STEP=$($2) -e MAL_IMPL=$(MAL_IMPL) \
- -it --rm -u $(shell id -u) \
- -v $(dir $(abspath $(lastword $(MAKEFILE_LIST)))):/mal \
- -w /mal/$(call actual_impl,$(1)) \
- $(if $(strip $($(1)_MODE)),-e $(1)_MODE=$($(1)_MODE),) \
- $(if $(filter factor,$(1)),-e FACTOR_ROOTS=$(FACTOR_ROOTS),) \
- $(foreach env,$(3),-e $(env)) \
- $(call impl_to_image,$(call actual_impl,$(1))) \
- ,\
- env STEP=$($2) MAL_IMPL=$(MAL_IMPL) \
- $(if $(strip $($(1)_MODE)),$(1)_MODE=$($(1)_MODE),) \
- $(if $(filter factor,$(1)),FACTOR_ROOTS=$(FACTOR_ROOTS),) \
- $(3)))
+get_run_prefix = $(strip $(foreach mode,$(call actual_impl,$(1))_MODE, \
+ $(if $(strip $(DOCKERIZE) $(4)),\
+ docker run -e STEP=$($2) -e MAL_IMPL=$(MAL_IMPL) \
+ -it --rm -u $(shell id -u) \
+ -v $(dir $(abspath $(lastword $(MAKEFILE_LIST)))):/mal \
+ -w /mal/$(call actual_impl,$(1)) \
+ $(if $(strip $($(mode))),-e $(mode)=$($(mode)),) \
+ $(if $(filter factor,$(1)),-e FACTOR_ROOTS=$(FACTOR_ROOTS),) \
+ $(foreach env,$(3),-e $(env)) \
+ $(call impl_to_image,$(call actual_impl,$(1))) \
+ ,\
+ env STEP=$($2) MAL_IMPL=$(MAL_IMPL) \
+ $(if $(strip $($(mode))),$(mode)=$($(mode)),) \
+ $(if $(filter factor,$(1)),FACTOR_ROOTS=$(FACTOR_ROOTS),) \
+ $(3))))
# Takes impl and step
# Returns the runtest command prefix (with runtest options) for testing the given step
$(foreach impl,$(word 1,$(subst /, ,$(@))),\
$(if $(DOCKERIZE), \
$(call get_build_command,$(impl)) $(patsubst $(impl)/%,%,$(@)), \
- $(call get_build_command,$(impl)) -C $(impl) $(subst $(impl)/,,$(@))))
+ $(call get_build_command,$(impl)) $(subst $(impl)/,,$(@))))
# Allow IMPL, and IMPL^STEP
$(DO_IMPLS): $$(foreach s,$$(STEPS),$$(call $$(@)_STEP_TO_PROG,$$(s)))
$(2):
@echo "----------------------------------------------"; \
$$(foreach impl,$$(word 2,$$(subst ^, ,$$(@))),\
- $$(if $$(DOCKERIZE), \
- echo "Running: $$(call get_build_command,$$(impl)) --no-print-directory $(1)"; \
- $$(call get_build_command,$$(impl)) --no-print-directory $(1), \
- echo "Running: $$(call get_build_command,$$(impl)) --no-print-directory -C $$(impl) $(1)"; \
- $$(call get_build_command,$$(impl)) --no-print-directory -C $$(impl) $(1)))
+ echo "Running: $$(call get_build_command,$$(impl)) --no-print-directory $(1)"; \
+ $$(call get_build_command,$$(impl)) --no-print-directory $(1))
endef
recur_impls_ = $(filter-out $(foreach impl,$($(1)_EXCLUDES),$(1)^$(impl)),$(foreach impl,$(IMPLS),$(1)^$(impl)))