.build:variables:
  variables: &build_variables
    GIT_SUBMODULE_STRATEGY: recursive

.build:macos: &macos_definition
  stage: build
  tags:
    - macos
  script:
    - mkdir build
    - cd build
    - >
      cmake
      -GNinja
      -DCMAKE_BUILD_TYPE=RelWithDebInfo
      -DURDE_DLPACKAGE=urde-$CI_PIPELINE_ID-macos-x86_64-$URDE_VECTOR_ISA
      -DURDE_VECTOR_ISA=$URDE_VECTOR_ISA
      ..
    - ninja urde hecl visigen
    - cd Binaries
    - cp -R urde.app $CI_PROJECT_DIR/URDE.app
    - cd $CI_PROJECT_DIR
    - strip -S -o URDE.app/Contents/MacOS/urde URDE.app/Contents/MacOS/urde
    - strip -S -o URDE.app/Contents/MacOS/hecl URDE.app/Contents/MacOS/hecl
    - strip -S -o URDE.app/Contents/MacOS/visigen URDE.app/Contents/MacOS/visigen
    - (if [ "${URDE_MACOS_CODESIGN_UID}" != "" ]; then codesign -s $URDE_MACOS_CODESIGN_UID --deep URDE.app; else echo "Unable to sign app bundle :("; fi);
  only:
    - release
    - dev
  artifacts:
    name: "urde-$CI_PIPELINE_ID-macos-x86_64-$URDE_VECTOR_ISA"
    paths:
      - URDE.app/
    expire_in: 1 week

build:macos:sse3:
  <<: *macos_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: sse3

build:macos:sse41:
  <<: *macos_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: sse41

build:macos:avx:
  <<: *macos_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: avx

build:macos:avx2:
  <<: *macos_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: avx2

.build:linux: &linux_definition
  stage: build
  tags:
    - linux
  script:
    - mkdir build
    - cd build
    - >
      cmake
      -GNinja
      -DCMAKE_BUILD_TYPE=RelWithDebInfo
      -DURDE_DLPACKAGE=urde-$CI_PIPELINE_ID-linux-x86_64-$URDE_VECTOR_ISA
      -DURDE_VECTOR_ISA=$URDE_VECTOR_ISA
      ..
    - nice -n19 ninja -j8 urde hecl visigen
    - cp Binaries/urde $CI_PROJECT_DIR
    - strip --strip-debug -o $CI_PROJECT_DIR/urde Binaries/urde
    - rm -r $CI_PROJECT_DIR/hecl
    - strip --strip-debug -o $CI_PROJECT_DIR/hecl Binaries/hecl
    - rm -r $CI_PROJECT_DIR/visigen
    - strip --strip-debug -o $CI_PROJECT_DIR/visigen Binaries/visigen
  only:
    - release
    - dev
  artifacts:
    name: "urde-$CI_PIPELINE_ID-linux-x86_64-$URDE_VECTOR_ISA"
    paths:
      - urde
      - hecl
      - visigen
    expire_in: 1 week

build:linux:sse3:
  <<: *linux_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: sse3

build:linux:sse41:
  <<: *linux_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: sse41

build:linux:avx:
  <<: *linux_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: avx

build:linux:avx2:
  <<: *linux_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: avx2

.build:win32: &win32_definition
  stage: build
  tags:
    - win32
  script:
    - cmd.exe /c "call `"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat`" && set > %temp%\vcvars.txt"
    - >
      Get-Content "$env:temp\vcvars.txt" | Foreach-Object {
        if ($_ -match "^(.*?)=(.*)$") {
          Set-Content "env:\$($matches[1])" $matches[2]
        }
      }
    - mkdir build
    - cd build
    - >
      cmake
      -GNinja
      -DCMAKE_BUILD_TYPE=RelWithDebInfo
      -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded
      -DURDE_DLPACKAGE="urde-$env:CI_PIPELINE_ID-win32-x86_64-$env:URDE_VECTOR_ISA"
      -DURDE_VECTOR_ISA="$env:URDE_VECTOR_ISA"
      -DLLVM_ROOT_DIR=C:\projects\deps\llvm
      -DCMAKE_C_FLAGS=
      -DCMAKE_CXX_FLAGS=
      ..
    - ninja urde hecl visigen
    - 'copy Binaries\urde.exe "$env:CI_PROJECT_DIR\urde.exe"'
    - 'pdbcopy Binaries\urde.pdb "$env:CI_PROJECT_DIR\urde.pdb" -p'
    - 'copy Binaries\hecl.exe "$env:CI_PROJECT_DIR\hecl.exe"'
    - 'pdbcopy Binaries\hecl.pdb "$env:CI_PROJECT_DIR\hecl.pdb" -p'
    - 'copy Binaries\visigen.exe "$env:CI_PROJECT_DIR\visigen.exe"'
    - 'pdbcopy Binaries\visigen.pdb "$env:CI_PROJECT_DIR\visigen.pdb" -p'
  only:
    - release
    - dev
  artifacts:
    name: "urde-$env:CI_PIPELINE_ID-win32-x86_64-$env:URDE_VECTOR_ISA"
    paths:
      - urde.exe
      - urde.pdb
      - hecl.exe
      - hecl.pdb
      - visigen.exe
      - visigen.pdb
    expire_in: 1 week

build:win32:sse2:
  <<: *win32_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: sse2

build:win32:sse41:
  <<: *win32_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: sse41

build:win32:avx:
  <<: *win32_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: avx

build:win32:avx2:
  <<: *win32_definition
  variables:
    <<: *build_variables
    URDE_VECTOR_ISA: avx2

deploy:
  stage: deploy
  only:
    - release
    - dev
  dependencies: []
  tags:
    - server
  variables:
    GIT_STRATEGY: none
  script:
    - python3 /var/lib/gitlab-runner/deploy_urde.py $CI_PIPELINE_ID $CI_COMMIT_REF_NAME