image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-amd64-ubuntu:latest

stages:
  - build-prepare
  - build
  - prepare-for-static-cores
  - trigger-static-cores

build-retroarch-windows-x64:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-mxe-win64-cross:gcc10
  stage: build
  variables:
    MEDIA_PATH: .media
    STRIP_BIN:  1
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch.exe
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "MOC=/usr/lib/mxe/usr/x86_64-w64-mingw32.shared/qt5/bin/moc ./configure --host=x86_64-w64-mingw32.shared"
    - "make -j$NUMPROC"
    - if [ $STRIP_BIN -eq 1 ]; then strip --strip-unneeded retroarch.exe; fi
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/redist"
    - "cd libretro-common/audio/dsp_filters && make -j$NUMPROC platform=win compiler=x86_64-w64-mingw32.static-gcc build=release && make -j$NUMPROC platform=win compiler=x86_64-w64-mingw32.static-gcc build=release strip && cd -"
    - "cp -f libretro-common/audio/dsp_filters/*.dll ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cd gfx/video_filters && make -j$NUMPROC platform=win compiler=x86_64-w64-mingw32.static-gcc build=release && make -j$NUMPROC platform=win compiler=x86_64-w64-mingw32.static-gcc build=release strip && cd -"
    - "cp -f gfx/video_filters/*.dll ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f retroarch.cfg ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/retroarch.default.cfg"
    - "echo -e '[Paths]\nPlugins = ./' > ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/qt.conf"
    - "/bin/bash /usr/lib/mxe/tools/copydlldeps.sh
        --infile retroarch.exe
        --destdir ${MEDIA_PATH}/${CI_PROJECT_NAME}/redist/
        --recursivesrcdir /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/
        --enforcedir /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/qt5/plugins/bearer/
        --enforcedir /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/qt5/plugins/iconengines/
        --enforcedir /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/qt5/plugins/imageformats/
        --enforcedir /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/qt5/plugins/platforms/
        --enforcedir /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/qt5/plugins/styles/
        --copy
        --objdump x86_64-w64-mingw32.shared-objdump"
    - "rm -f ${MEDIA_PATH}/${CI_PROJECT_NAME}/redist/opengl32.dll"

build-retroarch-windows-i686:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-mxe-win32-cross:gcc10
  stage: build
  variables:
    MEDIA_PATH: .media
    STRIP_BIN:  1
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch.exe
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "MOC=/usr/lib/mxe/usr/i686-w64-mingw32.shared/qt5/bin/moc ./configure --host=i686-w64-mingw32.shared"
    - "make -j$NUMPROC"
    - if [ $STRIP_BIN -eq 1 ]; then strip --strip-unneeded retroarch.exe; fi
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/redist"
    - "cd libretro-common/audio/dsp_filters && make -j$NUMPROC platform=win compiler=i686-w64-mingw32.static-gcc build=release && make -j$NUMPROC platform=win compiler=i686-w64-mingw32.static-gcc build=release strip && cd -"
    - "cp -f libretro-common/audio/dsp_filters/*.dll ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cd gfx/video_filters && make -j$NUMPROC platform=win compiler=i686-w64-mingw32.static-gcc build=release && make -j$NUMPROC platform=win compiler=i686-w64-mingw32.static-gcc build=release strip && cd -"
    - "cp -f gfx/video_filters/*.dll ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f retroarch.cfg ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/retroarch.default.cfg"
    - "echo -e '[Paths]\nPlugins = ./' > ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/qt.conf"
    - "/bin/bash /usr/lib/mxe/tools/copydlldeps.sh
        --infile retroarch.exe
        --destdir ${MEDIA_PATH}/${CI_PROJECT_NAME}/redist/
        --recursivesrcdir /usr/lib/mxe/usr/i686-w64-mingw32.shared/
        --enforcedir /usr/lib/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/bearer/
        --enforcedir /usr/lib/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/iconengines/
        --enforcedir /usr/lib/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/imageformats/
        --enforcedir /usr/lib/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/platforms/
        --enforcedir /usr/lib/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/styles/
        --copy
        --objdump i686-w64-mingw32.shared-objdump"
    - "rm -f ${MEDIA_PATH}/${CI_PROJECT_NAME}/redist/opengl32.dll"

build-retroarch-windows-msvc10-x64:
  tags:
    - msvc2010
  stage: build
  variables:
    MEDIA_PATH:     .media
    MSYSTEM:        MINGW64
    ARCH:           x86_64
    MSYS_BIN_DIR:   C:\msys64\usr\bin
    SDK_BIN_DIR:    C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
    RCEDIT_BIN_DIR: C:\Program Files\rcedit
    PEDEPS_BIN_DIR: C:\Program Files\pedeps-0.1.9-win64\bin
    MSVC_PLATFORM:  windows_msvc2010_x64
  before_script:
    - $Env:HOME = "."
    - $Env:Path += -join(";", "$Env:MSYS_BIN_DIR", ";", "$Env:SDK_BIN_DIR", ";", "$Env:RCEDIT_BIN_DIR", ";", "$Env:PEDEPS_BIN_DIR")
  artifacts:
    paths:
    - retroarch.exe
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - |
      $ErrorActionPreference = 'Stop'
      # Build RetroArch
      bash.exe -l -c "make -f Makefile.griffin platform=$Env:MSVC_PLATFORM"
      if ($LastExitCode -ne 0){throw "Failed to build RetroArch"}
      mt.exe -nologo -manifest "retroarch.exe.manifest" -outputresource:"retroarch.exe;#1"
      if ($LastExitCode -ne 0){throw "Failed to add manifest to RetroArch binary"}
      rcedit-x64.exe "retroarch.exe" --set-icon "media\retroarch.ico"
      if ($LastExitCode -ne 0){throw "Failed to set icon of RetroArch binary"}
      # Create .media subdirectories
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/audio" -ItemType Directory
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/video" -ItemType Directory
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/pkg" -ItemType Directory
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/redist" -ItemType Directory
      # Copy audio/video filters
      Get-ChildItem -Path "libretro-common/audio/dsp_filters/*" -Include *.dsp | Copy-Item -Destination "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/audio"
      Get-ChildItem -Path "gfx/video_filters/*" -Include *.filt | Copy-Item -Destination "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/video"
      # Copy default config file
      Copy-Item -Path "retroarch.cfg" -Destination "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/pkg/retroarch.default.cfg"
      # Copy dll dependencies
      # (note that msvc builds should not have any, but this
      # may change in the future)
      copypedeps.exe -r retroarch.exe "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/redist"
      if ($LastExitCode -ne 0){throw "Failed to copy RetroArch dependencies"}
      Remove-Item "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/redist/retroarch.exe" -ErrorAction Ignore

build-retroarch-windows-msvc10-i686:
  tags:
    - msvc2010
  stage: build
  variables:
    MEDIA_PATH:     .media
    MSYSTEM:        MINGW32
    ARCH:           x86
    MSYS_BIN_DIR:   C:\msys64\usr\bin
    SDK_BIN_DIR:    C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
    RCEDIT_BIN_DIR: C:\Program Files\rcedit
    PEDEPS_BIN_DIR: C:\Program Files\pedeps-0.1.9-win64\bin
    MSVC_PLATFORM:  windows_msvc2010_x86
  before_script:
    - $Env:HOME = "."
    - $Env:Path += -join(";", "$Env:MSYS_BIN_DIR", ";", "$Env:SDK_BIN_DIR", ";", "$Env:RCEDIT_BIN_DIR", ";", "$Env:PEDEPS_BIN_DIR")
  artifacts:
    paths:
    - retroarch.exe
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - |
      $ErrorActionPreference = 'Stop'
      # Build RetroArch
      bash.exe -l -c "make -f Makefile.griffin platform=$Env:MSVC_PLATFORM"
      if ($LastExitCode -ne 0){throw "Failed to build RetroArch"}
      mt.exe -nologo -manifest "retroarch.exe.manifest" -outputresource:"retroarch.exe;#1"
      if ($LastExitCode -ne 0){throw "Failed to add manifest to RetroArch binary"}
      rcedit-x64.exe "retroarch.exe" --set-icon "media\retroarch.ico"
      if ($LastExitCode -ne 0){throw "Failed to set icon of RetroArch binary"}
      # Create .media subdirectories
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/audio" -ItemType Directory
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/video" -ItemType Directory
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/pkg" -ItemType Directory
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/redist" -ItemType Directory
      # Copy audio/video filters
      Get-ChildItem -Path "libretro-common/audio/dsp_filters/*" -Include *.dsp | Copy-Item -Destination "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/audio"
      Get-ChildItem -Path "gfx/video_filters/*" -Include *.filt | Copy-Item -Destination "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/video"
      # Copy default config file
      Copy-Item -Path "retroarch.cfg" -Destination "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/pkg/retroarch.default.cfg"
      # Copy dll dependencies
      # (note that msvc builds should not have any, but this
      # may change in the future)
      copypedeps.exe -r retroarch.exe "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/redist"
      if ($LastExitCode -ne 0){throw "Failed to copy RetroArch dependencies"}
      Remove-Item "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/redist/retroarch.exe" -ErrorAction Ignore

build-retroarch-windows-msvc05-i686:
  tags:
    - win10
  stage: build
  variables:
    MEDIA_PATH:     .media
    MSYSTEM:        MINGW32
    ARCH:           x86
    MSYS_BIN_DIR:   C:\msys64\usr\bin
    SDK_BIN_DIR:    C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
    RCEDIT_BIN_DIR: C:\Program Files\rcedit
    PEDEPS_BIN_DIR: C:\Program Files\pedeps-0.1.9-win64\bin
    VS80COMNTOOLS:  C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\
    MSVC_PLATFORM:  windows_msvc2005_x86
  before_script:
    - $Env:HOME = "."
    - $Env:Path += -join(";", "$Env:MSYS_BIN_DIR", ";", "$Env:SDK_BIN_DIR", ";", "$Env:RCEDIT_BIN_DIR", ";", "$Env:PEDEPS_BIN_DIR")
  artifacts:
    paths:
    - retroarch.exe
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - |
      $ErrorActionPreference = 'Stop'
      # Build RetroArch
      bash.exe -l -c "make -f Makefile.griffin platform=$Env:MSVC_PLATFORM"
      if ($LastExitCode -ne 0){throw "Failed to build RetroArch"}
      mt.exe -nologo -manifest "retroarch.exe.manifest" -outputresource:"retroarch.exe;#1"
      if ($LastExitCode -ne 0){throw "Failed to add manifest to RetroArch binary"}
      rcedit-x64.exe "retroarch.exe" --set-icon "media\retroarch.ico"
      if ($LastExitCode -ne 0){throw "Failed to set icon of RetroArch binary"}
      # Create .media subdirectories
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/audio" -ItemType Directory
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/video" -ItemType Directory
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/pkg" -ItemType Directory
      New-Item -Path "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/redist" -ItemType Directory
      # Copy audio/video filters
      Get-ChildItem -Path "libretro-common/audio/dsp_filters/*" -Include *.dsp | Copy-Item -Destination "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/audio"
      Get-ChildItem -Path "gfx/video_filters/*" -Include *.filt | Copy-Item -Destination "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/filters/video"
      # Copy default config file
      Copy-Item -Path "retroarch.cfg" -Destination "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/pkg/retroarch.default.cfg"
      # Copy dll dependencies
      # (note that msvc builds should not have any, but this
      # may change in the future)
      copypedeps.exe -r retroarch.exe "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/redist"
      if ($LastExitCode -ne 0){throw "Failed to copy RetroArch dependencies"}
      Remove-Item "$Env:MEDIA_PATH/$Env:CI_PROJECT_NAME/redist/retroarch.exe" -ErrorAction Ignore

build-retroarch-linux-x64:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-amd64-ubuntu:xenial-gcc9
  stage: build
  variables:
    MEDIA_PATH: .media
    STRIP_BIN:  1
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch
    - retroarch_qt
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    # Qt build
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDirQt"
    - "./configure --prefix=/usr"
    - "make -j$NUMPROC"
    - if [ $STRIP_BIN -eq 1 ]; then strip --strip-unneeded retroarch; fi
    - "make install DESTDIR=${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDirQt prefix=/usr"
    - "rm -rf ${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDirQt/etc"
    - "cd ${MEDIA_PATH}/${CI_PROJECT_NAME}/ && tar -czf AppDirQt.tar.gz AppDirQt && rm -rf AppDirQt && cd -"
    - "mv -f retroarch retroarch_qt"
    # Non-Qt build
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDir"
    - "make clean"
    - "./configure --disable-qt --prefix=/usr"
    - "make -j$NUMPROC"
    - if [ $STRIP_BIN -eq 1 ]; then strip --strip-unneeded retroarch; fi
    - "make install DESTDIR=${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDir prefix=/usr"
    - "rm -rf ${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDir/etc"
    - "cd ${MEDIA_PATH}/${CI_PROJECT_NAME}/ && tar -czf AppDir.tar.gz AppDir && rm -rf AppDir && cd -"
    # Filters
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cd libretro-common/audio/dsp_filters && make -j$NUMPROC build=release && make -j$NUMPROC build=release strip && cd -"
    - "cp -f libretro-common/audio/dsp_filters/*.so ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cd gfx/video_filters && make -j$NUMPROC build=release && make -j$NUMPROC build=release strip && cd -"
    - "cp -f gfx/video_filters/*.so ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"

build-retroarch-linux-i686:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-i386-ubuntu:xenial-gcc9
  stage: build
  variables:
    MEDIA_PATH: .media
    STRIP_BIN:  1
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    # Qt build
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDirQt"
    - "./configure --prefix=/usr"
    - "make -j$NUMPROC"
    - if [ $STRIP_BIN -eq 1 ]; then strip --strip-unneeded retroarch; fi
    - "make install DESTDIR=${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDirQt prefix=/usr"
    - "rm -rf ${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDirQt/etc"
    - "cd ${MEDIA_PATH}/${CI_PROJECT_NAME}/ && tar -czf AppDirQt.tar.gz AppDirQt && rm -rf AppDirQt && cd -"
    - "mv -f retroarch retroarch_qt"
    # Non-Qt build
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDir"
    - "make clean"
    - "./configure --disable-qt --prefix=/usr"
    - "make -j$NUMPROC"
    - if [ $STRIP_BIN -eq 1 ]; then strip --strip-unneeded retroarch; fi
    - "make install DESTDIR=${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDir prefix=/usr"
    - "rm -rf ${MEDIA_PATH}/${CI_PROJECT_NAME}/AppDir/etc"
    - "cd ${MEDIA_PATH}/${CI_PROJECT_NAME}/ && tar -czf AppDir.tar.gz AppDir && rm -rf AppDir && cd -"
    # Filters
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cd libretro-common/audio/dsp_filters && make -j$NUMPROC build=release && make -j$NUMPROC build=release strip && cd -"
    - "cp -f libretro-common/audio/dsp_filters/*.so ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cd gfx/video_filters && make -j$NUMPROC build=release && make -j$NUMPROC build=release strip && cd -"
    - "cp -f gfx/video_filters/*.so ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
  
.build-retroarch-macos-xcode:
  # Metal/Universal x86_64 arm64 is default
  tags:
    - macosx-packaging
  stage: build
  variables:
    XCARCHIVE_PATH: pkg/apple/build/RetroArchUniversal
    XCPROJECT_NAME: RetroArch_Metal
    XCCONFIG: GitLabCI.xcconfig
  artifacts:
    paths:
    - ${XCPROJECT_NAME}.zip
    - retroarch-repo/
    expire_in: 10 min
  dependencies: []
  script:
    - xcodebuild -project pkg/apple/${XCPROJECT_NAME}.xcodeproj -config Release -scheme RetroArch -archivePath ${XCARCHIVE_PATH} -xcconfig pkg/apple/${XCCONFIG} archive
    - pushd ${XCARCHIVE_PATH}.xcarchive/Products/Users/gitlab/Applications/
    - ditto -c -k --sequesterRsrc --keepParent RetroArch.app RetroArch.zip
    - popd
    - mv ${XCARCHIVE_PATH}.xcarchive/Products/Users/gitlab/Applications/RetroArch.zip ${XCPROJECT_NAME}.zip
    - mkdir .retroarch-repo
    - "cp -r ./* .retroarch-repo"
    - "mv .retroarch-repo/ retroarch-repo/"

# Mac OS Universal, Metal
build-retroarch-osx-universal-metal:
  extends: .build-retroarch-macos-xcode

build-retroarch-osx-opengl-x64:
  extends: .build-retroarch-macos-xcode
  variables:
    XCARCHIVE_PATH: pkg/apple/build/RetroArchOpenGL
    XCPROJECT_NAME: RetroArch
    XCCONFIG: OpenGL_GitLabCI.xcconfig

#build-retroarch-osx-ppc:
#  stage: build
#  artifacts:
#    paths:
#    - ${XCPROJECT_NAME}.zip
#    - retroarch-repo/
#    expire_in: 10 min
#  dependencies: []
#  variables:
#    XCPROJECT_NAME: RetroArch
#    XCCONFIG: OpenGL_GitLabCI.xcconfig
#  tags:
#   - macosx-legacy
#  script:
#    - xcodebuild -target RetroArch -configuration Release -project pkg/apple/RetroArch_PPC.xcodeproj ONLY_ACTIVE_ARCH=NO
#    - pushd pkg/apple/build/Release/
#    - ditto -c -k --sequesterRsrc --keepParent RetroArch.app ${XCPROJECT_NAME}.zip
#    - popd
#    - mv pkg/apple/build/Release/RetroArch.zip ${XCPROJECT_NAME}.zip
#    - mkdir .retroarch-repo
#    - "cp -r ./* .retroarch-repo"
#    - "mv .retroarch-repo/ retroarch-repo/"

build-retroarch-ios-arm64:
  extends: .build-retroarch-macos-xcode
  variables:
    XCPROJECT_NAME: RetroArch_iOS11_Metal
    XCCONFIG: GitLabCI.xcconfig
    XCSCHEME: "RetroArch iOS Release"
  artifacts:
    paths:
    - retroarch-repo/
    expire_in: 10 min
  script:
    - xcodebuild -project pkg/apple/${XCPROJECT_NAME}.xcodeproj -config Release -scheme "${XCSCHEME}" -xcconfig pkg/apple/iOS/GitLabCI.xcconfig build
    - mkdir .retroarch-repo
    - "cp -r ./* .retroarch-repo"
    - "mv .retroarch-repo/ retroarch-repo/"

build-retroarch-ios9:
  extends: .build-retroarch-macos-xcode
  variables:
    XCPROJECT_NAME: RetroArch_iOS9
    XCCONFIG: GitLabCI.xcconfig
    XCSCHEME: "RetroArchiOS9"
  artifacts:
    paths:
    - retroarch-repo/
    expire_in: 10 min
  script:
    - xcodebuild -project pkg/apple/${XCPROJECT_NAME}.xcodeproj -config Release -scheme "${XCSCHEME}" -xcconfig pkg/apple/iOS/GitLabCI.xcconfig build
    - mkdir .retroarch-repo
    - "cp -r ./* .retroarch-repo"
    - "mv .retroarch-repo/ retroarch-repo/"

build-retroarch-tvos-arm64:
  extends: build-retroarch-ios-arm64
  variables:
    XCSCHEME: "RetroArch tvOS Release"

build-retroarch-dingux-mips32:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-dingux:latest
  stage: build
  variables:
    MEDIA_PATH: .media
    STRIP_BIN:  1
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch
    - retroarch_rg350.opk
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "make -j$NUMPROC -f Makefile.rg350"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"

build-retroarch-dingux-odbeta-mips32:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-dingux:odbeta
  stage: build
  variables:
    MEDIA_PATH: .media
    STRIP_BIN:  1
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch
    - retroarch_rg350_odbeta.opk
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "make -j$NUMPROC -f Makefile.rg350_odbeta"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"

build-retroarch-rs90-odbeta-mips32:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-dingux:odbeta
  stage: build
  variables:
    MEDIA_PATH: .media
    STRIP_BIN:  1
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch
    - retroarch_rs90_odbeta.opk
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "make -j$NUMPROC -f Makefile.rs90"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"

build-retroarch-retrofw-mips32:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-dingux:odbeta
  stage: build
  variables:
    MEDIA_PATH: .media
    STRIP_BIN:  1
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch
    - retroarch_retrofw.opk
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "make -j$NUMPROC -f Makefile.retrofw"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"

build-retroarch-miyoo-arm32:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-dingux:latest
  stage: build
  variables:
    MEDIA_PATH: .media
    STRIP_BIN:  1
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "make -j$NUMPROC -f Makefile.miyoo"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f pkg/miyoo/20a-retroarch ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"

build-retroarch-android-normal:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-android:latest
  stage: build
  artifacts:
    paths:
    - retroarch-precompiled/
    expire_in: 10 min
  script:
  script:
    - |
      set -e
      cd pkg/android/phoenix
      ./gradlew assembleNormalRelease
      cd -
      mkdir .retroarch-precompiled
      cp -r ./* .retroarch-precompiled/
      mv .retroarch-precompiled/ retroarch-precompiled/

build-retroarch-android-aarch64:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-android:latest
  stage: build
  artifacts:
    paths:
    - retroarch-precompiled/
    expire_in: 10 min
  script:
    - |
      set -e
      cd pkg/android/phoenix
      ./gradlew assembleAarch64Release
      cd -
      mkdir .retroarch-precompiled
      cp -r ./* .retroarch-precompiled/
      mv .retroarch-precompiled/ retroarch-precompiled/

build-retroarch-android-ra32:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-android:latest
  stage: build
  artifacts:
    paths:
    - retroarch-precompiled/
    expire_in: 10 min
  script:
    - |
      set -e
      cd pkg/android/phoenix
      ./gradlew assembleRa32Release
      cd -
      mkdir .retroarch-precompiled
      cp -r ./* .retroarch-precompiled/
      mv .retroarch-precompiled/ retroarch-precompiled/

build-retroarch-android-playstore-normal:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-android:latest
  stage: build
  artifacts:
    paths:
    - retroarch-precompiled/
    expire_in: 10 min
  script:
    - |
      set -e
      cd pkg/android/phoenix
      ./gradlew bundlePlayStoreNormalRelease
      cd -
      mkdir .retroarch-precompiled
      cp -r ./* .retroarch-precompiled/
      mv .retroarch-precompiled/ retroarch-precompiled/

build-retroarch-android-playstore-plus:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-android:latest
  stage: build
  artifacts:
    paths:
    - retroarch-precompiled/
    expire_in: 10 min
  script:
    - |
      set -e
      cd pkg/android/phoenix
      ./gradlew bundlePlayStorePlusRelease
      cd -
      mkdir .retroarch-precompiled
      cp -r ./* .retroarch-precompiled/
      mv .retroarch-precompiled/ retroarch-precompiled/

build-static-retroarch-libnx-aarch64:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-libnx-devkitpro:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs:
    # Static dummy builds without a core so its a good check if it properly builds
    - build-static-retroarch-dummy-libnx-aarch64
  script:
    # Allow failure since we don't have a core
    - "make -f Makefile.libnx -j$NUMPROC ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-dummy-libnx-aarch64:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-libnx-devkitpro:latest
  stage: build
  variables:
    MEDIA_PATH: .media
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch_switch.nro
    - retroarch_switch.elf
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "make -f Makefile.libnx -j$NUMPROC HAVE_STATIC_DUMMY=1"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f pkg/libnx/retroarch.jpg ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"

build-static-retroarch-vita:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-vita:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    -  retroarch-precompiled-gl/
    expire_in: 10 min
  dependencies: []
  needs:
    # Dummy build requires no core
    - build-static-retroarch-dummy-vita
  script:
    # Allow failure since we don't have a core
    - "make -f Makefile.vita -j$NUMPROC ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "make -f Makefile.vita clean"
    - "HAVE_VITAGLES=1 make -f Makefile.vita -j$NUMPROC ||:"
    - "mkdir .retroarch-precompiled-gl"
    - "cp -r ./* .retroarch-precompiled-gl/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"
    - "mv .retroarch-precompiled-gl/ retroarch-precompiled-gl/"

build-static-retroarch-dummy-vita:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-vita:latest
  stage: build
  variables:
    MEDIA_PATH: .media
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  eboot.bin
    -  param.sfo
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "make -f Makefile.vita.salamander -j$NUMPROC"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -fr pkg/vita/* ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"

build-static-retroarch-ps2:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-ps2:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs:
    # Dummy build requires no core
    - build-static-retroarch-dummy-ps2
  script:
    # Allow failure since we don't have a core
    - "make -f Makefile.ps2 -j$NUMPROC ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-dummy-ps2:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-ps2:latest
  stage: build
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  raboot.elf
    expire_in: 10 min
  dependencies: []
  script:
    - "make -f Makefile.ps2.salamander -j$NUMPROC release"

build-static-retroarch-psl1ght:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-psl1ght:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs:
    # Dummy build requires no core
    - build-static-retroarch-dummy-psl1ght
  script:
    # Allow failure since we don't have a core
    - "make -f Makefile.psl1ght -j$NUMPROC ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-dummy-psl1ght:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-psl1ght:latest
  stage: build
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch_psl1ght_salamander.elf
    expire_in: 10 min
  dependencies: []
  script:
    - "make -f Makefile.psl1ght.salamander -j$NUMPROC create-salamander"

build-static-retroarch-psp:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-psp:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs:
    # Dummy build requires no core
    - build-static-retroarch-dummy-psp
  script:
    # We need to boostrap before compile
    - "(cd bootstrap/psp1/kernel_functions_prx/ && make && cd -)"
    # Allow failure since we don't have a core
    - "make -f Makefile.psp1 -j$NUMPROC ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-dummy-psp:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-psp:latest
  stage: build
  variables:
    MEDIA_PATH: .media
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - EBOOT.PBP
    - kernel_functions.prx
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "(cd bootstrap/psp1/kernel_functions_prx/ && make && cd -)"
    - "make -f Makefile.psp1.salamander -j$NUMPROC"
    - "make -C bootstrap/psp1/kernel_functions_prx/"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "cp -f pkg/psp1/ICON0.PNG ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "cp -f pkg/psp1/PIC1.PNG ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"

build-static-retroarch-djgpp:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-djgpp-build-container:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs: []
  script:
    # Allow failure since we don't have a core
    - "make -f Makefile.dos -j$NUMPROC ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-ctr:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-devkitpro:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs:
    # Dummy build requires no core
    - build-static-retroarch-dummy-ctr
  script:
    # Allow failure since we don't have a core
    - "make -f Makefile.ctr -j$NUMPROC USE_CTRULIB_2=1 ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-ctr-legacy:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-devkitpro:ctr-legacy
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs: []
  script:
    # Allow failure since we don't have a core
    - "make -f Makefile.ctr -j$NUMPROC ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-dummy-ctr:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-devkitpro:latest
  stage: build
  variables:
    MEDIA_PATH: .media
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch_3ds.cia
    - RetroArch.3dsx
    - RetroArch.smdh
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "make -f Makefile.ctr.salamander -j$NUMPROC USE_CTRULIB_2=1"
    - "mv -f retroarch_3ds_salamander.cia retroarch_3ds.cia"
    - "mv -f retroarch_3ds_salamander.3dsx RetroArch.3dsx"
    - "mv -f retroarch_3ds_salamander.smdh RetroArch.smdh"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"

build-static-retroarch-wiiu:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-wiiu:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs:
    # Dummy build requires no core
    - build-static-retroarch-dummy-wiiu
  script:
    # Allow failure since we don't have a core
    - "make -f Makefile.wiiu -j$NUMPROC ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-dummy-wiiu:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-wiiu:latest
  stage: build
  variables:
    MEDIA_PATH: .media
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch.rpx
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "make -f Makefile.wiiu -j$NUMPROC SALAMANDER_BUILD=1"
    - "mv -f retroarch_wiiu_salamander.rpx retroarch.rpx"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f pkg/wiiu/icon.png ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "cp -f pkg/wiiu/meta.xml ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"

build-static-retroarch-wii:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-devkitpro:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs:
    # Dummy build requires no core
    - build-static-retroarch-dummy-wii
  script:
    # Allow failure since we don't have a core
    - "make -f Makefile.wii -j$NUMPROC EXTERNAL_LIBOGC=1 GX_PTHREAD_LEGACY=0 ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-dummy-wii:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-devkitpro:latest
  stage: build
  variables:
    MEDIA_PATH: .media
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - boot.dol
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "make -f Makefile.wii.salamander -j$NUMPROC EXTERNAL_LIBOGC=1 GX_PTHREAD_LEGACY=0"
    - "mv -f retroarch-salamander_wii.dol boot.dol"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f pkg/wii/icon.png ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "cp -f pkg/wii/meta.xml ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"

build-static-retroarch-ngc:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-devkitpro:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    -  retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs:
    # Dummy build requires no core
    - build-static-retroarch-dummy-ngc
  script:
    # Allow failure since we don't have a core
    - "make -f Makefile.ngc -j$NUMPROC EXTERNAL_LIBOGC=1 GX_PTHREAD_LEGACY=0 ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-dummy-ngc:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-devkitpro:latest
  stage: build
  variables:
    MEDIA_PATH: .media
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"

build-static-retroarch-emscripten:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-emscripten:latest
  stage: prepare-for-static-cores
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - retroarch-precompiled/
    expire_in: 10 min
  dependencies: []
  needs:
    # Dummy build requires no core
    - build-static-retroarch-dummy-emscripten
  script:
    # Allow failure since we don't have a core
    - "emmake make -f Makefile.emscripten -j$NUMPROC ||:"
    - "mkdir .retroarch-precompiled"
    - "cp -r ./* .retroarch-precompiled/"
    - "mv .retroarch-precompiled/ retroarch-precompiled/"

build-static-retroarch-dummy-emscripten:
  image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-amd64-ubuntu:latest
  stage: build
  variables:
    MEDIA_PATH: .media
  before_script:
    - export NUMPROC=$(($(nproc)/3))
  artifacts:
    paths:
    - ${MEDIA_PATH}
    expire_in: 10 min
  dependencies: []
  script:
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"
    - "cp -f libretro-common/audio/dsp_filters/*.dsp ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/audio"
    - "cp -f gfx/video_filters/*.filt ${MEDIA_PATH}/${CI_PROJECT_NAME}/filters/video"
    - "cp -rf pkg/emscripten/libretro ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
    - "cp -f media/canvas.png ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"
    - "cp -f media/icon_dark.ico ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"
    - "cp -f media/icon_light.ico ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"
    - "cp -f media/invader_dark.png ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"
    - "cp -f media/invader_light.png ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"
    - "cp -f media/libretro-logo.png ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"
    - "cp -f media/retroarch-16x16.ico ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"
    - "cp -f media/retroarch-16x16.png ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"
    - "cp -f media/retroarch-96x96.png ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"
    - "cp -f media/retroarch.ico ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg/media"

trigger_static-cores:
  stage: trigger-static-cores
  needs:
  - build-static-retroarch-libnx-aarch64
  - build-static-retroarch-vita
  - build-static-retroarch-ps2
  - build-static-retroarch-psl1ght
  - build-static-retroarch-psp
  - build-static-retroarch-ctr
  - build-static-retroarch-ctr-legacy
  - build-static-retroarch-wiiu
  - build-static-retroarch-wii
  - build-static-retroarch-ngc
  - build-static-retroarch-emscripten
  dependencies: []
  script:
    # Dummy for now
    - /bin/true