freebsd_instance:
  image_family: freebsd-13-0

freebsd_task:
  name: Code CI / freebsd
  install_script: pkg install -y git
  script: |
    echo 'Building V'
    git clone https://github.com/vlang/v
    cd v
    make
    ##.github/workflows/freebsd_build_tcc.sh
    ##tcc -v -v
    echo 'Build cmd/tools/fast'
    cd cmd/tools/fast && ../../../v fast.v && ./fast -clang


arm64_task:
  name: Code CI / arm64-ubuntu-tcc
  arm_container:
    image: ubuntu:latest
  install_script: apt-get update -y && apt-get install --quiet -y build-essential pkg-config wget git valgrind libsqlite3-dev libssl-dev libxi-dev libxcursor-dev libfreetype6-dev libxi-dev libxcursor-dev libgl-dev xfonts-75dpi xfonts-base libmysqlclient-dev libpq-dev gcc-10-arm-linux-gnueabihf libc6-dev-armhf-cross qemu-user
  env:
    DEBIAN_FRONTEND: noninteractive
    VFLAGS: -cc tcc -no-retry-compilation
    VJOBS: 2
  script: |
    set -e

    wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_arm64.deb
    apt install --fix-missing -y ./wkhtmltox_0.12.6-1.focal_arm64.deb

    # ensure that a V binary can be built, even if tcc has broken for some reason
    VFLAGS='-cc gcc' make

    ./v -g self
    ./v -g self

    ./v -d debug_malloc -d debug_realloc -o v cmd/v
    ./v -cg -cstrict -o v cmd/v
    #Test v->c
    thirdparty/tcc/tcc.exe -version
    ./v -cg -o v cmd/v # Make sure vtcc can build itself twice

    # - name: v self compilation
    ./v -o v2 cmd/v && ./v2 -o v3 cmd/v && ./v3 -o v4 cmd/v

    # - name: v self compilation with -skip-unused
    ./v -skip-unused -o v2 cmd/v && ./v2 -skip-unused -o v3 cmd/v && ./v3 -skip-unused -o v4 cmd/v

    # - name: v doctor
    ./v doctor

    # - name: Verify `v test` works
    ./v cmd/tools/test_if_v_test_system_works.v
    ./cmd/tools/test_if_v_test_system_works

    # - name: Self tests
    ./v test-self

    ## - name: Self tests (-cstrict)
    ## ./v -cstrict test-self

    # - name: Test time functions in a timezone UTC-12
    TZ=Etc/GMT+12 ./v test vlib/time/
    # - name: Test time functions in a timezone UTC-3
    TZ=Etc/GMT+3 ./v test vlib/time/
    # - name: Test time functions in a timezone UTC+3
    TZ=Etc/GMT-3 ./v test vlib/time/
    # - name: Test time functions in a timezone UTC+12
    TZ=Etc/GMT-12 ./v test vlib/time/
    # - name: Test time functions in a timezone using daylight saving (Europe/Paris)
    TZ=Europe/Paris ./v test vlib/time/
    # - name: Build examples
    ./v -W build-examples
    # - name: Test building v tools
    ./v -W build-tools
    # - name: Test v binaries
    ./v build-vbinaries
    # - name: Run a VSH script
    ./v run examples/v_script.vsh
    # - name: Test v tutorials
    ./v tutorials/building_a_simple_web_blog_with_vweb/code/blog

    # test the arm32 version of tcc
    # TODO: support something like `V_EMULATOR=qemu-arm v run file.v` so that V automatically runs all binaries under qemu
    ./v -arch arm32 -cc arm-linux-gnueabihf-gcc-10 -o av cmd/v && qemu-arm -L /usr/arm-linux-gnueabihf ./av -arch arm32 -cc arm-linux-gnueabihf-gcc-10 -o av2 cmd/v && qemu-arm -L /usr/arm-linux-gnueabihf ./av2 -arch arm32 -cc arm-linux-gnueabihf-gcc-10 -o av3 cmd/v && qemu-arm -L /usr/arm-linux-gnueabihf ./av3 -arch arm32 -cc arm-linux-gnueabihf-gcc-10 -o av4 cmd/v
    ./v -arch arm32 -o closure_test.c vlib/v/tests/closure_test.v && arm-linux-gnueabihf-gcc-10 -o closure_test closure_test.c && qemu-arm -L /usr/arm-linux-gnueabihf ./closure_test
