build:ubuntu_cpp:
  stage: build
  needs: []
  tags:
    - docker

  script:
    - mkdir -p build_cpp
    - mkdir -p install_cpp
    - cd build_cpp
    - cmake -DCMAKE_INSTALL_PREFIX:PATH=../install_cpp -DCMAKE_BUILD_TYPE=Debug -DWERROR=ON -DCOVERAGE=ON ..
    - make -j4 all install

  artifacts:
    expire_in: 1 week
    paths:
      - build_cpp/
      - install_cpp/

build:ubuntu_cpp_g++10:
  stage: build
  needs: []
  tags:
    - docker

  script:
    - apt install -y g++-10
    - mkdir -p build_cpp
    - mkdir -p install_cpp
    - cd build_cpp
    - export CXX=/usr/bin/g++-10
    - cmake -DCMAKE_INSTALL_PREFIX:PATH=../install_cpp -DCMAKE_BUILD_TYPE=Debug -DWERROR=ON -DCOVERAGE=ON ..
    - make -j4 all install

build:ubuntu_cpp_g++12:
  stage: build
  needs: []
  tags:
    - docker

  script:
    - apt install -y g++-12
    - mkdir -p build_cpp
    - mkdir -p install_cpp
    - cd build_cpp
    - export CXX=/usr/bin/g++-12
    - cmake -DCMAKE_INSTALL_PREFIX:PATH=../install_cpp -DCMAKE_BUILD_TYPE=Debug -DWERROR=ON -DCOVERAGE=ON ..
    - make -j4 all install

build:ubuntu_cpp_clang12:
  stage: build
  needs: []
  tags:
    - docker

  script:
    - apt install -y clang-12
    - mkdir -p build_cpp
    - mkdir -p install_cpp
    - cd build_cpp
    - export CXX=/usr/bin/clang++-12
    - cmake -DCMAKE_INSTALL_PREFIX:PATH=../install_cpp -DCMAKE_BUILD_TYPE=Debug -DWERROR=ON -DCOVERAGE=ON ..
    - make -j4 all install

build:ubuntu_cpp_clang15:
  stage: build
  needs: []
  tags:
    - docker

  script:
    - apt install -y clang-15
    - mkdir -p build_cpp
    - mkdir -p install_cpp
    - cd build_cpp
    - export CXX=/usr/bin/clang++-15
    - cmake -DCMAKE_INSTALL_PREFIX:PATH=../install_cpp -DCMAKE_BUILD_TYPE=Debug -DWERROR=ON -DCOVERAGE=ON ..
    - make -j4 all install

build:ubuntu_python:
  stage: build
  needs: []
  tags:
    - docker

  script:
    - python3 -m pip install virtualenv
    - virtualenv venv
    - source venv/bin/activate
    # Numpy dependancy for unit test
    - python3 -m pip install -r requirements.txt
    - python3 -m pip install .
  artifacts:
    expire_in: 1 week
    paths:
      - venv/

build:windows_cpp:
  stage: build
  needs: []
  tags:
    - windows

  image: buildtools
  before_script:
    # Install Chocolatey
    - Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
    # Install dependencies
    - choco install cmake.install --installargs '"ADD_CMAKE_TO_PATH=System"' -Y
    - choco install git -Y
    - choco install python -Y
    # Update PATH
    - $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
  script:
    - mkdir -p build_cpp
    - mkdir -p install_cpp
    - cd build_cpp
    - cmake -DCMAKE_INSTALL_PREFIX:PATH=../install_cpp -DCMAKE_BUILD_TYPE=Debug ..
    - cmake --build . -j2
    - cmake --install . --config Debug

  artifacts:
    expire_in: 1 week
    paths:
      - build_cpp/
      - install_cpp/

build:windows_python:
  stage: build
  needs: []
  tags:
    - windows

  image: buildtools
  before_script:
    # Install Chocolatey
    - Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
    # Install dependencies
    - choco install cmake.install --installargs '"ADD_CMAKE_TO_PATH=System"' -Y
    - choco install git -Y
    - choco install python -Y
    # Update PATH
    - $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
  script:
    - python -m pip install virtualenv
    - virtualenv venv
    - venv\Scripts\Activate.ps1
    # Numpy dependancy for unit test
    - python -m pip install -r requirements.txt
    - python -m pip install .
  artifacts:
    expire_in: 1 week
    paths:
      - venv/