stages:
  - build
  - test

variables:
  GIT_SUBMODULE_STRATEGY: normal

.build_template: &build_definition
  stage: build
  artifacts:
    paths:
      - build/
      - .lock-waf*

.test_template: &test_definition
  stage: test
  artifacts:
    paths:
      - build/coverage


arm32_dbg:
  <<: *build_definition
  image: lv2plugin/debian-arm32
  script: python ./waf configure build -dST --werror
  variables:
    CC: "arm-linux-gnueabihf-gcc"
    CXX: "arm-linux-gnueabihf-g++"

test:arm32_dbg:
  <<: *test_definition
  image: lv2plugin/debian-arm32
  script: python ./waf test --wrapper=qemu-arm
  needs: ["arm32_dbg"]


arm32_rel:
  <<: *build_definition
  image: lv2plugin/debian-arm32
  script: python ./waf configure build -ST --werror
  variables:
    CC: "arm-linux-gnueabihf-gcc"
    CXX: "arm-linux-gnueabihf-g++"

test:arm32_rel:
  <<: *test_definition
  image: lv2plugin/debian-arm32
  script: python ./waf test --wrapper=qemu-arm
  needs: ["arm32_rel"]


arm64_dbg:
  <<: *build_definition
  image: lv2plugin/debian-arm64
  script: python ./waf configure build -dST --werror
  variables:
    CC: "aarch64-linux-gnu-gcc"
    CXX: "aarch64-linux-gnu-g++"

test:arm64_dbg:
  <<: *test_definition
  image: lv2plugin/debian-arm64
  script: python ./waf test --wrapper=qemu-aarch64
  needs: ["arm64_dbg"]


arm64_rel:
  <<: *build_definition
  image: lv2plugin/debian-arm64
  script: python ./waf configure build -ST --werror
  variables:
    CC: "aarch64-linux-gnu-gcc"
    CXX: "aarch64-linux-gnu-g++"

test:arm64_rel:
  <<: *test_definition
  image: lv2plugin/debian-arm64
  script: python ./waf test --wrapper=qemu-aarch64
  needs: ["arm64_rel"]


x64_dbg:
  <<: *build_definition
  image: lv2plugin/debian-x64
  script: python ./waf configure build -dST --werror --docs

test:x64_dbg:
  <<: *test_definition
  image: lv2plugin/debian-x64
  script: python ./waf test
  needs: ["x64_dbg"]


x64_rel:
  <<: *build_definition
  image: lv2plugin/debian-x64
  script: python ./waf configure build -ST --werror

test:x64_rel:
  <<: *test_definition
  image: lv2plugin/debian-x64
  script: python ./waf test
  needs: ["x64_rel"]


x64_static:
  <<: *build_definition
  image: lv2plugin/debian-x64
  script: python ./waf configure build -ST --werror

test:x64_static:
  <<: *test_definition
  image: lv2plugin/debian-x64
  script: python ./waf test
  needs: ["x64_static"]

x64_sanitize:
  <<: *build_definition
  image: lv2plugin/debian-x64-clang
  script: python ./waf configure build -ST --werror --no-coverage --no-test-malloc
  variables:
    CC: "clang"
    CFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
    CXX: "clang++"
    CXXFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
    LINKFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"

test:x64_sanitize:
  <<: *test_definition
  image: lv2plugin/debian-x64-clang
  script: python ./waf test
  needs: ["x64_sanitize"]


mingw32_dbg:
  <<: *build_definition
  image: lv2plugin/debian-mingw32
  script: python ./waf configure build -dST --werror --no-coverage
  variables:
    CC: "i686-w64-mingw32-gcc"
    CXX: "i686-w64-mingw32-g++"

mingw32_rel:
  <<: *build_definition
  image: lv2plugin/debian-mingw32
  script: python ./waf configure build -ST --werror --no-coverage
  variables:
    CC: "i686-w64-mingw32-gcc"
    CXX: "i686-w64-mingw32-g++"


mingw64_dbg:
  <<: *build_definition
  image: lv2plugin/debian-mingw64
  script: python ./waf configure build -dST --werror --no-coverage
  variables:
    CC: "x86_64-w64-mingw32-gcc"
    CXX: "x86_64-w64-mingw32-g++"

mingw64_rel:
  <<: *build_definition
  image: lv2plugin/debian-mingw64
  script: python ./waf configure build -ST --werror --no-coverage
  variables:
    CC: "x86_64-w64-mingw32-gcc"
    CXX: "x86_64-w64-mingw32-g++"


mac_dbg:
  <<: *build_definition
  script: python ./waf configure build -dST --werror --no-coverage
  tags: [macos]

test:mac_dbg:
  <<: *test_definition
  script: python ./waf test
  needs: ["mac_dbg"]
  tags: [macos]


mac_rel:
  <<: *build_definition
  script: python ./waf configure build -ST --werror --no-coverage
  tags: [macos]

test:mac_rel:
  <<: *test_definition
  script: python ./waf test
  needs: ["mac_rel"]
  tags: [macos]


win_dbg:
  <<: *build_definition
  script: python ./waf configure build -dST --werror --no-coverage
  tags: [windows,msvc,python]

test:win_dbg:
  <<: *test_definition
  script: python ./waf test
  needs: ["win_dbg"]
  tags: [windows,msvc,python]


win_rel:
  <<: *build_definition
  script: python ./waf configure build -ST --werror --no-coverage
  tags: [windows,msvc,python]

test:win_rel:
  <<: *test_definition
  script: python ./waf test
  needs: ["win_rel"]
  tags: [windows,msvc,python]