variables:
  download_url: "https://common-lisp.net/project/cmucl/downloads/snapshots/2020/04"
  version: "2020-04-x86"
  bootstrap: ""

stages:
  - install
  - build
  - test
  - benchmark

cache:


linux:install:
  stage: install
  tags:
    - linux
  artifacts:
    paths:
      - snapshot/
  script:
    - wget -nv $download_url/cmucl-$version-linux.tar.bz2
    - wget -nv $download_url/cmucl-$version-linux.extra.tar.bz2
    - mkdir snapshot
    - (cd snapshot; tar xjf ../cmucl-$version-linux.tar.bz2; tar xjf ../cmucl-$version-linux.extra.tar.bz2)

linux:build:
  stage: build
  tags:
    - linux
  artifacts:
    paths:
      - dist/
  needs:
    - job: linux:install
      artifacts: true
  script:
    # Do cross compile first
    - bin/create-target.sh xtarget x86_linux_clang
    - bin/create-target.sh xcross x86_linux_clang
    - bin/cross-build-world.sh -crl -B boot-2020-04-1 xtarget xcross src/tools/cross-scripts/cross-x86-x86.lisp snapshot/bin/lisp
    # Regular build using the cross-compiled result
    - bin/build.sh $bootstrap -R -C "" -o xtarget/lisp/lisp
    - bin/make-dist.sh -I dist linux-4

linux:test:
  stage: test
  tags:
    - linux
  artifacts:
    paths:
      - ansi-test/test.out
      - test.log
  needs:
    # Needs artifacts from build (dist/)
    - job: linux:build
      artifacts: true
  before_script:
    - git clone https://gitlab.common-lisp.net/ansi-test/ansi-test.git
    - (cd ansi-test; git checkout rtoy-cmucl-expected-failures)
  script:
    - bin/run-tests.sh -l dist/bin/lisp 2>&1 | tee test.log
    - cd ansi-test
    - make LISP="../dist/bin/lisp -batch -noinit -nositeinit"
    - grep 'No unexpected \(successes\|failures\)' test.out

linux:benchmark:
  stage: benchmark
  tags:
    - linux
  artifacts:
    paths:
      - benchmarks/cl-bench/results
  needs:
    # Needs artifacts from install (snapshot/) and build (dist/)
    - job: linux:install
      artifacts: true
    - job: linux:build
  script:
    - cd benchmarks/cl-bench
    - mkdir tmp
    - CMUCL=../../snapshot/bin/lisp ./run-cmucl.sh
    - CMUCL=../../dist/bin/lisp ./run-cmucl.sh
    - ../../snapshot/bin/lisp -load report

osx:install:
  stage: install
  tags:
    - osx
  artifacts:
    paths:
      - snapshot/
  script:
    - curl -s -o cmucl-$version-darwin.tar.bz2 $download_url/cmucl-$version-darwin.tar.bz2
    - mkdir snapshot
    - (cd snapshot; tar xjf ../cmucl-$version-darwin.tar.bz2)

osx:build:
  stage: build
  tags:
    - osx
  artifacts:
    paths:
      - dist/
  needs:
    - job: osx:install
      artifacts: true
  script:
    # Do cross compile first
    - bin/create-target.sh xtarget x86_darwin
    - bin/create-target.sh xcross x86_darwin
    - bin/cross-build-world.sh -crl -B boot-2020-04-1 xtarget xcross src/tools/cross-scripts/cross-x86-x86.lisp snapshot/bin/lisp
    # Regular build using the cross-compiled result
    - bin/build.sh $bootstrap -R -C "" -o xtarget/lisp/lisp
    - bin/make-dist.sh -I dist darwin-4

osx:test:
  stage: test
  tags:
    - osx
  artifacts:
    paths:
      - ansi-test/test.out
      - test.log
  needs:
    # Needs artifacts from build (dist/)
    - job: osx:build
      artifacts: true
  before_script:
    - git clone https://gitlab.common-lisp.net/ansi-test/ansi-test.git
    - (cd ansi-test; git checkout rtoy-cmucl-expected-failures)
  script:
    - bin/run-tests.sh -l dist/bin/lisp 2>&1 | tee test.log
    - cd ansi-test
    - make LISP="../dist/bin/lisp -batch -noinit -nositeinit"
    - grep 'No unexpected \(successes\|failures\)' test.out 

osx:benchmark:
  stage: benchmark
  tags:
    - osx
  artifacts:
    paths:
      - benchmarks/cl-bench/results
  needs:
    # Needs artifacts from install (snapshot/) and build (dist/)
    - job: osx:install
      artifacts: true
    - job:  osx:build
  script:
    - cd benchmarks/cl-bench
    - mkdir tmp
    - CMUCL=../../snapshot/bin/lisp ./run-cmucl.sh
    - CMUCL=../../dist/bin/lisp ./run-cmucl.sh
    - ../../snapshot/bin/lisp -load report