# DESCRIPTION: GitLab CI/CD for libRetro (NOT FOR GitLab-proper)

##############################################################################
################################# BOILERPLATE ################################
##############################################################################

# Core definitions
.core-defs:
  variables:
    JNI_PATH: src/os/libretro
    MAKEFILE_PATH: src/os/libretro
    CORENAME: stella

# Inclusion templates, required for the build to work
include:
  ################################## DESKTOPS ################################
  # Windows 64-bit
  - project: 'libretro-infrastructure/ci-templates'
    file: '/windows-x64-mingw.yml'

  # Linux 64-bit
  - project: 'libretro-infrastructure/ci-templates'
    file: '/linux-x64.yml'

  # MacOS 64-bit
  - project: 'libretro-infrastructure/ci-templates'
    file: '/osx-x64.yml'

  # MacOS ARM 64-bit
  - project: 'libretro-infrastructure/ci-templates'
    file: '/osx-arm64.yml'

  ################################## CELLULAR ################################
  # Android
  - project: 'libretro-infrastructure/ci-templates'
    file: '/android-jni.yml'

  # iOS
  - project: 'libretro-infrastructure/ci-templates'
    file: '/ios-arm64.yml'

  # iOS (armv7)
  - project: 'libretro-infrastructure/ci-templates'
    file: '/ios9.yml'

  ################################## CONSOLES ################################
  # Nintendo Switch
  - project: 'libretro-infrastructure/ci-templates'
    file: '/libnx-static.yml'

  # tvOS (AppleTV)
  - project: 'libretro-infrastructure/ci-templates'
    file: '/tvos-arm64.yml'

  #################################### MISC ##################################

# Stages for building
stages:
  - build-prepare
  - build-shared
  - build-static

##############################################################################
#################################### STAGES ##################################
##############################################################################
#
################################### DESKTOPS #################################
# Windows 64-bit
libretro-build-windows-x64:
  extends:
    - .libretro-windows-x64-mingw-make-default
    - .core-defs

# Linux 64-bit
libretro-build-linux-x64:
  extends:
    - .libretro-linux-x64-make-default
    - .core-defs
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-amd64-ubuntu:latest
  before_script:
    - export NUMPROC=$(($(nproc)/5))
    - sudo apt-get update -qy
    - sudo apt-get install -qy software-properties-common
    - sudo add-apt-repository -y ppa:savoury1/build-tools
    - sudo add-apt-repository -y ppa:savoury1/gcc-defaults-12
    - sudo apt-get update -qy
    - sudo apt-get install -qy gcc-12 g++-12
  # This container's existing installations of gcc and CMake are way too old
  variables:
    CC: /usr/bin/gcc-12
    CXX: /usr/bin/g++-12
    CXXFLAGS: -Wno-deprecated-declarations # Deprecation warnings aren't helpful on the libretro Gitlab

# MacOS 64-bit
libretro-build-osx-x64:
  tags:
    - mac-apple-silicon
  extends:
    - .libretro-osx-x64-make-default
    - .core-defs

# MacOS ARM 64-bit
libretro-build-osx-arm64:
  tags:
    - mac-apple-silicon
  extends:
    - .libretro-osx-arm64-make-default
    - .core-defs

################################### CELLULAR #################################
# Android ARMv7a
# android-armeabi-v7a:
#   extends:
#     - .libretro-android-jni-armeabi-v7a
#     - .core-defs

# Android ARMv8a
# android-arm64-v8a:
#   extends:
#     - .libretro-android-jni-arm64-v8a
#     - .core-defs

# Android 64-bit x86
# android-x86_64:
#   extends:
#     - .libretro-android-jni-x86_64
#     - .core-defs

# iOS
libretro-build-ios-arm64:
  tags:
    - mac-apple-silicon
  extends:
    - .libretro-ios-arm64-make-default
    - .core-defs

# tvOS
libretro-build-tvos-arm64:
  extends:
    - .libretro-tvos-arm64-make-default
    - .core-defs

################################### CONSOLES #################################
# Nintendo Switch
# libretro-build-libnx-aarch64:
#   extends:
#     - .libretro-libnx-static-retroarch-master
#     - .core-defs
