app-id: com.xargon.retrodeck
runtime: org.kde.Platform
runtime-version: '5.15-21.08'
sdk: org.kde.Sdk
# Needed for Yuzu
base: io.qt.qtwebengine.BaseApp
base-version: 5.15-21.08
# /Needed for Yuzu
command: retrodeck.sh

finish-args:
   - --socket=x11
   - --socket=wayland
   - --socket=pulseaudio
   - --share=ipc
   - --share=network
   - --device=all
   - --filesystem=~/retrodeck:create
   - --filesystem=/run/media
   - --allow=multiarch
   - --talk-name=org.freedesktop.ScreenSaver
   - --talk-name=org.freedesktop.PowerManagement.Inhibit
   - --talk-name=org.freedesktop.login1
   #- --filesystem=host
   - --filesystem=xdg-run/app/com.discordapp.Discord:create
  # Yuzu
   - --filesystem=home:ro
  # - --filesystem=/run/media:ro

cleanup:
  # ES-DE
  - /include
  - /share/ffmpeg
  - /lib/cmake
  #- /lib/debug
  - /lib/pkgconfig
  # Yuzu
  - /include
  - /bin/glslangValidator
  - /bin/zip*
  - /bin/zstd*
  - /lib/pkg-config
  - /share/doc
  - /share/man
  - /src
  - '*.a'
  - '*.la'
cleanup-commands:
  # Yuzu
  - /app/cleanup-BaseApp.sh

modules:

  - name: xmlstarlet
    config-opts:
      - --disable-static-libs
      - --with-libxml-libs-prefix=/usr/lib
      - --with-libxml-include-prefix=/usr/include/libxml2
    sources:
      - type: archive
        url: https://downloads.sourceforge.net/xmlstar/xmlstarlet-1.6.1.tar.gz
        sha256: 15d838c4f3375332fd95554619179b69e4ec91418a3a5296e7c631b7ed19e7ca
      - type: shell
        commands:
          - cp -p /usr/share/automake-*/config.{sub,guess} .
          - autoreconf -vfi
    post-install:
      - ln -s "xml" "${FLATPAK_DEST}/bin/xmlstarlet" ||:
    cleanup: ["*"]

  - name: kdialog
    buildsystem: cmake-ninja
    sources:
    - type: git
      url: https://github.com/KDE/kdialog.git
      tag: v22.03.80

  # ES-DE

  - name: ffmpeg
    config-opts:
    - --disable-static
    - --disable-programs
    - --disable-doc
    - --enable-gpl
    - --enable-nonfree
    - --enable-shared
    - --enable-libvorbis
    - --enable-libopus
    - --enable-libfdk-aac
    - --enable-libvpx
    - --enable-postproc
    sources:
    - type: git
      url: https://github.com/FFmpeg/FFmpeg.git
      tag: n5.0

  - name: freeimage
    no-autogen: true
    build-options:
        cxxflags: -std=c++14
    make-args:
    - DESTDIR=/app
    sources:
    - type: archive
      url: http://downloads.sourceforge.net/freeimage/FreeImage3180.zip
      sha256: f41379682f9ada94ea7b34fe86bf9ee00935a3147be41b6569c9605a53e438fd
    - type: shell
      commands:
      - sed -i 's|-o root -g root ||' ./Makefile.gnu
      - sed -i 's|/usr|/app|' ./Makefile.gnu

  - name: pugixml
    buildsystem: cmake-ninja
    config-opts:
    - -DBUILD_SHARED_LIBS=on .
    sources:
    - type: archive
      url: https://github.com/zeux/pugixml/releases/download/v1.11.4/pugixml-1.11.4.tar.gz
      sha256: 8ddf57b65fb860416979a3f0640c2ad45ddddbbafa82508ef0a0af3ce7061716

  - name: emulationstation-de
    buildsystem: cmake-ninja
    cleanup:
      - es-app
      - es-core
    sources:
    - type: git
      url: https://gitlab.com/leonstyhre/emulationstation-de.git
      branch: c3fc30cfd5c26195024e0da328349d83af067b9e

  # ES-DE - END

  - name: art-book-next
    buildsystem: simple
    build-commands:
      - mkdir -p ${FLATPAK_DEST}/share/emulationstation/themes/art-book-next-de/
      - mv -f * ${FLATPAK_DEST}/share/emulationstation/themes/art-book-next-de/
    sources:
      - type: git
        url: https://github.com/anthonycaccese/art-book-next-de.git
        branch: 4452f8356819d3cd079549b113fb15edb919a0df


  # External manifests start

  # RetroArch - https://github.com/flathub/org.libretro.RetroArch

  - name: retroarch
    config-opts:
      - '--enable-dbus'
    make-args:
      - GLOBAL_CONFIG_DIR=${FLATPAK_DEST}/etc
    sources:
      - type: git
        url: https://github.com/libretro/RetroArch.git
        branch: de4e56ecf28a09057734f8624af6d62f3088734f
      - type: file
        path: rd-submodules/retroarch/org.libretro.RetroArch.appdata.xml
      - type: file
        path: rd-submodules/retroarch/retroarch.cfg
    post-install:
      - mkdir -p ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/
      - >-
        mv ${FLATPAK_DEST}/share/pixmaps/retroarch.svg
        ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/
      - rmdir --ignore-fail-on-non-empty ${FLATPAK_DEST}/share/pixmaps/
      - mkdir -p ${FLATPAK_DEST}/etc
      - >-
        sed s:@prefix@:${FLATPAK_DEST}:g retroarch.cfg >
        ${FLATPAK_DEST}/etc/retroarch.cfg
      - mkdir -p ${FLATPAK_DEST}/share/appdata
      - cp org.libretro.RetroArch.appdata.xml ${FLATPAK_DEST}/share/appdata
    modules:
      - nvidia-cg-toolkit/nvidia-cg-toolkit-3.1.0013.json
      - shared-modules/SDL/SDL-1.2.15.json
      - shared-modules/SDL/SDL_image-1.2.12.json
      - shared-modules/SDL/SDL_mixer-1.2.12.json
      - shared-modules/SDL/SDL_net-1.2.8.json
      - shared-modules/libusb/libusb.json
      - shared-modules/gudev/gudev.json
      - libbz2/libbz2-1.0.8.json
      - libaio/libaio-0.3.112.json
      - shared-modules/glu/glu-9.json
      - libdecor/libdecor-0.1.0.json
  - name: retroarch-filers-video
    subdir: gfx/video_filters
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/RetroArch.git
        commit: de4e56ecf28a09057734f8624af6d62f3088734f
  - name: retroarch-filers-audio
    subdir: libretro-common/audio/dsp_filters
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/RetroArch.git
        commit: de4e56ecf28a09057734f8624af6d62f3088734f
  - name: retroarch-assets
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/retroarch-assets.git
        commit: f45dd1351e6bfb9f01e12bee8d358ad22a2bb8f9
  - name: libretro-database
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/libretro-database.git
        commit: 1754130f72d8c00a512797bf85442576258279e8
  - name: libretro-core-info
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/libretro-core-info.git
        commit: 1b2472eca14a5a187ff298ace1b614fd3d47bc7c
  - name: retroarch-joypad-autoconfig
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/retroarch-joypad-autoconfig.git
        commit: 0eb3ad2666e6bdc2de2cde4c5d4af29b8c7f2c67
  - name: common-shaders
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/common-shaders.git
        commit: 55e401834b732e62c34411321c4ffd82524345d4
  - name: slang-shaders
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/slang-shaders.git
        commit: 77558d5f2ac807b27201fb888cbf2caee8e289fa
  - name: glsl-shaders
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/glsl-shaders.git
        commit: 20801b38aa2c89a2beb9f57ffbbbcea7256e2523
  - name: common-overlays
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/common-overlays.git
        commit: db9744f4e58a740f0f10b04b62af347cd6f01928

  # RetroArch - END

  # Not part of the offical RetroArch manifest
  - name: retroarch-cores
    buildsystem: simple
    build-commands:
        - mkdir -p /app/share/libretro/cores/
        - mv ./RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores/* /app/share/libretro/cores/
    cleanup:
        - RetroArch_cores.7z
    sources:
      - type: archive
        url: https://buildbot.libretro.com/stable/1.10.2/linux/x86_64/RetroArch_cores.7z
        sha256: 0c59f99534a1ae3a2d34b1747c40398325e53db69acfab35b99c8fa8d76430e5

  # Yuzu - https://github.com/flathub/org.yuzu_emu.yuzu

  - name: libzip
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=RelWithDebInfo'
    sources:
      - type: archive
        url: https://github.com/nih-at/libzip/archive/v1.8.0.tar.gz
        sha256: 83e5d6d5dbe8f9df80aad388fa523ca3558398ed440a5afda6ef9b36b0ffdc1f
        x-checker-data:
          type: anitya
          project-id: 10649
          url-template: https://github.com/nih-at/libzip/archive/v$version.tar.gz
  - name: zstd
    buildsystem: simple
    build-commands:
      - make -j $FLATPAK_BUILDER_N_JOBS
      - make PREFIX=/ DESTDIR="${FLATPAK_DEST}" install
    sources:
      - type: archive
        url: >-
          https://github.com/facebook/zstd/releases/download/v1.5.2/zstd-1.5.2.tar.gz
        sha256: 7c42d56fac126929a6a85dbc73ff1db2411d04f104fae9bdea51305663a83fd0
        x-checker-data:
          type: anitya
          project-id: 12083
          url-template: >-
            https://github.com/facebook/zstd/releases/download/v$version/zstd-$version.tar.gz
  - name: fmt
    buildsystem: cmake-ninja
    config-opts:
      - '-DFMT_TEST=OFF'
    sources:
      - type: archive
        url: https://github.com/fmtlib/fmt/releases/download/8.1.1/fmt-8.1.1.zip
        sha256: 23778bad8edba12d76e4075da06db591f3b0e3c6c04928ced4a7282ca3400e5d
        x-checker-data:
          type: anitya
          project-id: 11526
          url-template: >-
            https://github.com/fmtlib/fmt/releases/download/$version/fmt-$version.zip
  - name: glslang
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
    sources:
      - type: archive
        url: https://github.com/KhronosGroup/glslang/archive/11.8.0.tar.gz
        sha256: 9e5fbe5b844d203da5e61bcd84eda76326e0ff5dc696cb862147bbe01d2febb0
        x-checker-data:
          type: anitya
          stable-only: true
          project-id: 205796
          url-template: https://github.com/KhronosGroup/glslang/archive/$version.tar.gz
  - name: catch2
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
      - '-DCATCH_BUILD_TESTING=OFF'
    builddir: true
    sources:
      - type: archive
        url: https://github.com/catchorg/Catch2/archive/v2.13.8.tar.gz
        sha256: b9b592bd743c09f13ee4bf35fc30eeee2748963184f6bea836b146e6cc2a585a
        x-checker-data:
          type: anitya
          stable-only: true
          project-id: 7680
          url-template: https://github.com/catchorg/Catch2/archive/v$version.tar.gz
  - name: nlohmann-json
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
      - '-DJSON_BuildTests=OFF'
    sources:
      - type: archive
        url: https://github.com/nlohmann/json/archive/v3.10.5.tar.gz
        sha256: 5daca6ca216495edf89d167f808d1d03c4a4d929cef7da5e10f135ae1540c7e4
        x-checker-data:
          type: anitya
          project-id: 141453
          url-template: https://github.com/nlohmann/json/archive/v$version.tar.gz
  - name: boost
    buildsystem: simple
    build-commands:
      - ./bootstrap.sh --with-libraries=context,container,system,headers
      - ./b2 -j $FLATPAK_BUILDER_N_JOBS install --prefix=/app
    sources:
      - type: archive
        url: >-
          https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.bz2
        sha256: 8681f175d4bdb26c52222665793eef08490d7758529330f98d3b29dd0735bccc
        x-checker-data:
          type: anitya
          project-id: 6845
          url-template: >-
            https://boostorg.jfrog.io/artifactory/main/release/$version/source/boost_1_78_0.tar.bz2
  - name: nv-codec-headers
    make-install-args:
      - PREFIX=/app
    no-autogen: true
    cleanup:
      - '*'
    sources:
      - type: git
        url: https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
        tag: n11.1.5.1
        commit: 84483da70d903239d4536763fde8c7e6c4e80784
        x-checker-data:
          type: git
          tag-pattern: ^n([\d.]+)$
  - name: yuzu
    buildsystem: cmake-ninja
    builddir: true
    config-opts:
      - '-DCMAKE_BUILD_TYPE=RelWithDebInfo'
      - '-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON'
      - '-DENABLE_QT_TRANSLATION=ON'
      - '-DYUZU_ENABLE_COMPATIBILITY_REPORTING=ON'
      - '-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON'
      - '-DYUZU_USE_QT_WEB_ENGINE=ON'
      - '-DYUZU_USE_BUNDLED_FFMPEG=ON'
      - '-DDISPLAY_VERSION=969'
      - '-DBUILD_TAG=mainline-969'
      - '-DBUILD_REPOSITORY=yuzu-emu/yuzu-mainline'
    build-options:
      env:
        TITLEBARFORMATIDLE: yuzu {}
        TITLEBARFORMATRUNNING: yuzu {} | {}
        LDFLAGS: '-L/app/lib -Wl,-z,relro,-z,now -Wl,--as-needed'
    cleanup:
      - /share/man
      - /share/pixmaps
    post-install:
      - install -Dm755 ../yuzu-launcher.sh /app/bin/yuzu-launcher
      - >-
        install -Dm644 ../org.yuzu_emu.yuzu.metainfo.xml
        /app/share/appdata/org.yuzu_emu.yuzu.metainfo.xml
      - desktop-file-install --dir=/app/share/applications ../dist/yuzu.desktop
      - >-
        desktop-file-edit --set-key StartupWMClass --set-value yuzu --set-key
        Exec --set-value yuzu-launcher /app/share/applications/yuzu.desktop
      - >-
        install -Dm644 ../dist/yuzu.svg
        /app/share/icons/hicolor/scalable/apps/yuzu.svg
      - >-
        mv /app/share/mime/packages/yuzu.xml
        /app/share/mime/packages/org.yuzu_emu.yuzu.xml
      - >-
        sed 's/yuzu/org.yuzu_emu.yuzu/g' -i
        /app/share/mime/packages/org.yuzu_emu.yuzu.xml
    sources:
      - type: git
        url: https://github.com/yuzu-emu/yuzu-mainline.git
        tag: mainline-0-969
        commit: d179e12137cd8ff88b0eade7d13de801661f869b
        disable-shallow-clone: true
        x-checker-data:
          type: git
          tag-pattern: ^(mainline-0-\d+)$
      - type: file
        path: rd-submodules/yuzu/org.yuzu_emu.yuzu.metainfo.xml
      - type: file
        path: rd-submodules/yuzu/yuzu-launcher.sh
      - type: file
        path: rd-submodules/yuzu/compatibility_list.json
        
  # Yuzu - END

  # pcsx2 - https://github.com/flathub/net.pcsx2.PCSX2

  - name: wxWidgets
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
    cleanup:
      - /bin
      - /include
      - /lib/wx/include
    sources:
      - type: git
        url: https://github.com/wxWidgets/wxWidgets.git
        tag: v3.1.5
        commit: 9c0a8be1dc32063d91ed1901fd5fcd54f4f955a1
        x-checker-data:
          type: git
          tag-pattern: ^v([\d.]+)$
    modules:
      - shared-modules/glu/glu-9.json
  - name: libaio
    no-autogen: true
    make-install-args:
      - prefix=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://pagure.io/libaio.git
        tag: libaio-0.3.112
        commit: d025927efa75a0d1b46ca3a5ef331caa2f46ee0e
        x-checker-data:
          type: git
          tag-pattern: ^libaio-([\d.]+)$
    cleanup:
      - /include
      - /lib/*.a
  - name: portaudio
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
    cleanup:
      - /include
      - /share/doc
      - /lib/cmake
      - /lib/pkgconfig
      - /lib/*.a
    sources:
      - type: git
        url: https://github.com/PortAudio/portaudio.git
        tag: v19.7.0
        commit: 147dd722548358763a8b649b3e4b41dfffbcfbb6
        x-checker-data:
          type: git
          tag-pattern: ^v([\d.]+)$
  - name: soundtouch
    buildsystem: cmake-ninja
    sources:
      - type: git
        url: https://codeberg.org/soundtouch/soundtouch.git
        tag: 2.3.1
        commit: e1f315f5358d9db5cee35a7a2886425489fcefe8
        x-checker-data:
          type: git
          tag-pattern: ^([\d.]+)$
    cleanup:
      - /bin
      - /include
      - /lib/cmake
      - /lib/pkgconfig
      - /share/doc
      - /lib/*.a
  - name: png++
    disabled: true
    buildsystem: simple
    build-commands:
      - make
      - make prefix=/app install
    sources:
      - type: archive
        url: >-
          https://download.savannah.nongnu.org/releases/pngpp/png++-0.2.10.tar.gz
        sha256: 998af216ab16ebb88543fbaa2dbb9175855e944775b66f2996fc945c8444eee1
  - name: libpcap
    buildsystem: cmake-ninja
    sources:
      - type: git
        url: https://github.com/the-tcpdump-group/libpcap.git
        tag: libpcap-1.10.1
        commit: c7642e2cc0c5bd65754685b160d25dc23c76c6bd
        x-checker-data:
          type: git
          tag-pattern: ^libpcap-([\d.]+)$
    cleanup:
      - /bin
      - /include
      - /share/man
      - /lib/pkgconfig
      - /lib/*.a
  - name: pcsx2
    buildsystem: cmake-ninja
    builddir: true
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
      - '-DPACKAGE_MODE=TRUE'
      - '-DXDG_STD=TRUE'
      - '-DDISABLE_BUILD_DATE=TRUE'
      - '-DDISABLE_PCSX2_WRAPPER=TRUE'
      - '-DDISABLE_ADVANCE_SIMD=TRUE'
      - '-DSDL2_API=TRUE'
    cleanup:
      - /share/pixmaps
      - /share/man
      - /share/doc
    post-install:
      - >-
        desktop-file-edit --set-key=Exec --set-value=pcsx2
        /app/share/applications/PCSX2.desktop
      - >-
        install -Dm644 ../AppIcon128.png
        /app/share/icons/hicolor/128x128/apps/PCSX2.png
      - >-
        install -Dm644 ../net.pcsx2.PCSX2.metainfo.xml
        /app/share/metainfo/net.pcsx2.PCSX2.metainfo.xml
    sources:
      - type: git
        url: https://github.com/PCSX2/pcsx2.git
        tag: v1.7.2554
        commit: 0d1675fbaa0d40874df98eed6270efc55620271b
      - type: file
        path: rd-submodules/pcsx2/net.pcsx2.PCSX2.metainfo.xml
      - type: file
        path: rd-submodules/pcsx2/AppIcon128.png

  # pcsx2 - END


  # Ryujinx
  # Xemu
  # Rpcs3
  # vita3k
  # dolphin
  # arduboy
  # pocket station
  # cemu - win only: wine
  # Anbox?


  # External manifests end
  

  - name: retrodeck
    buildsystem: simple
    build-commands:

        # Prep the ES-DE and RetroArch config files
        - rm -rf /app/share/emulationstation/resources/systems/unix/es_find_rules.xml
        - cp es_find_rules.xml /app/share/emulationstation/resources/systems/unix/
        - rm -rf /app/share/emulationstation/resources/systems/unix/es_systems.xml
        - cp es_systems.xml /app/share/emulationstation/resources/systems/unix/
        # These must be put in home folder, managed by retrodeck.sh
        - mkdir -p ${FLATPAK_DEST}/retrodeck/
        - cp es_settings.xml ${FLATPAK_DEST}/retrodeck/es_settings.xml
        - cp retrodeck-retroarch.cfg ${FLATPAK_DEST}/retrodeck/retrodeck-retroarch.cfg

        # Logo, res
        - rm -f /app/share/emulationstation/resources/graphics/splash.svg
        - cp splash.svg /app/share/emulationstation/resources/graphics/splash.svg
        - cp icon.svg /app/share/icons/hicolor/scalable/apps/com.xargon.retrodeck.svg

        # Tools
        - mkdir -p ${FLATPAK_DEST}/retrodeck/tools/
        - cp start-retroarch.sh ${FLATPAK_DEST}/retrodeck/tools/
        - cp move-roms.sh ${FLATPAK_DEST}/retrodeck/tools/
        - cp tools-gamelist.xml ${FLATPAK_DEST}/retrodeck/
        
        - cp retrodeck.sh /app/bin/retrodeck.sh
        - chmod +x /app/bin/retrodeck.sh

        # Desktop entry
        - cp com.xargon.retrodeck.desktop /app/share/applications/com.xargon.retrodeck.desktop

    #cleanup: ['*']
    sources:
      - type: file
        path: es_find_rules.xml
      - type: file
        path: es_settings.xml
      - type: file
        path: es_systems.xml
      - type: file
        path: retrodeck.sh
      - type: file
        path: retrodeck-retroarch.cfg
      - type: file
        path: tools-gamelist.xml
      - type: dir
        path: res
      - type: dir
        path: tools
      - type: file
        path: com.xargon.retrodeck.desktop