---
app-id: dev.lizardbyte.sunshine
runtime: org.freedesktop.Platform
runtime-version: "21.08"
sdk: org.freedesktop.Sdk
command: sunshine
separate-locales: false
finish-args:
  - --device=all  # access all devices
  - --env=PULSE_PROP_media.category=Manager  # allow sunshine to manage audio sinks
  - --filesystem=home  # need to save files in user's home directory
  - --share=ipc  # required for X11 shared memory extension
  - --share=network  # access network
  - --socket=pulseaudio  # play sounds using pulseaudio
  - --socket=wayland  # show windows using Wayland
  - --socket=x11  # show windows using X11
  - --system-talk-name=org.freedesktop.Avahi  # talk to avahi on the system bus
  - --talk-name=org.freedesktop.Flatpak  # talk to flatpak on the session bus

cleanup:
  - /include
  - /lib/cmake
  - /lib/pkgconfig
  - /lib/*.la
  - /lib/*.a
  - /share/man

modules:
  - name: boost
    disabled: false
    buildsystem: simple
    build-commands:
      - cd tools/build && bison -y -d -o src/engine/jamgram.cpp src/engine/jamgram.y
      - ./bootstrap.sh --prefix=$FLATPAK_DEST --with-libraries=system,thread,log || cat bootstrap.log
      - ./b2 install variant=release link=static,shared runtime-link=shared cxxflags="$CXXFLAGS" linkflags="$LDFLAGS"
        -j $FLATPAK_BUILDER_N_JOBS
    sources:
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/b/boost1.74/boost1.74_1.74.0.orig.tar.xz
        sha256: 2467be4af625b5ae4b3c93fc7af196a09eba39c11a7338cd9e8b356fa44d2f45

  - name: ffmpeg
    disabled: false
    config-opts:
      - --enable-gpl
      - --disable-static
      - --enable-shared
      - --disable-doc
      - --disable-programs
      - --disable-decoders
      - --disable-vdpau
      - --disable-audiotoolbox
      - --disable-videotoolbox
      - --disable-vulkan
      - --disable-sdl2
      - --disable-filters
      - --disable-avfilter
      - --disable-postproc
      - --disable-autodetect
      - --enable-nvenc
      - --enable-ffnvcodec
      - --enable-vaapi
      - --enable-libx264
      - --enable-libx265
    cleanup:
      - /share
    sources:
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/universe/f/ffmpeg/ffmpeg_5.1.1.orig.tar.xz
        sha256: 95bf3ff8c496511e71e958fb249e663c8c9c3de583c5bebc0f5a9745abbc0435
    modules:
      - name: x264
        config-opts:
          - --disable-cli
          - --enable-shared
        sources:
          - type: archive
            url: http://archive.ubuntu.com/ubuntu/pool/universe/x/x264/x264_0.164.3095+gitbaee400.orig.tar.gz
            sha256: 8b237e94b08c196a1da22f2f25875f10be4cff3648df4eeff21e00da8f683fc2

      - name: x265
        disabled: false
        buildsystem: cmake-ninja
        builddir: true
        subdir: source
        config-opts:
          - -DCMAKE_BUILD_TYPE=RelWithDebInfo
          - -DENABLE_CLI=OFF
        sources:
          - type: archive
            url: http://archive.ubuntu.com/ubuntu/pool/universe/x/x265/x265_3.5.orig.tar.gz
            sha256: e70a3335cacacbba0b3a20ec6fecd6783932288ebc8163ad74bcc9606477cae8

      - name: nv-codec-headers
        no-autogen: true
        make-install-args:
          - PREFIX=${FLATPAK_DEST}
        cleanup:
          - '*'
        sources:
          - type: archive
            url: http://archive.ubuntu.com/ubuntu/pool/universe/n/nv-codec-headers/nv-codec-headers_11.1.5.1.orig.tar.gz
            sha256: d095fbd56aa93772471a323be0ebe65504a0f43f06c76a30b6d25da77b06ae9c

  - name: avahi
    disabled: false
    cleanup:
      - /bin
      - /lib/avahi
      - /share
    config-opts:
      - --with-distro=none
      - --disable-gobject
      - --disable-introspection
      - --disable-qt3
      - --disable-qt4
      - --disable-qt5
      - --disable-gtk
      - --disable-core-docs
      - --disable-manpages
      - --disable-libdaemon
      - --disable-python
      - --disable-pygobject
      - --disable-mono
      - --disable-monodoc
      - --disable-autoipd
      - --disable-doxygen-doc
      - --disable-doxygen-dot
      - --disable-doxygen-xml
      - --disable-doxygen-html
      - --disable-manpages
      - --disable-xmltoman
      - --disable-libevent
    sources:
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/a/avahi/avahi_0.8.orig.tar.gz
        sha256: 060309d7a333d38d951bc27598c677af1796934dbd98e1024e7ad8de798fedda

  - name: libevdev
    disabled: false
    buildsystem: meson
    config-opts:
      - -Ddocumentation=disabled
      - -Dtests=disabled
    cleanup:
      - /bin
    sources:
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/libe/libevdev/libevdev_1.13.0+dfsg.orig.tar.xz
        sha256: a882e13ef1dd6bd227318080cabf60fe5af3c06471259d3acfc9dbfb202351a7

  - name: cuda
    disabled: false
    buildsystem: simple
    only-arches:
      - x86_64
      - aarch64
    cleanup:
      - '*'
    build-commands:
      - chmod u+x ./cuda.run
      - ./cuda.run --silent --toolkit --toolkitpath=$FLATPAK_DEST/cuda --no-opengl-libs --no-man-page --no-drm
        --tmpdir=$FLATPAK_BUILDER_BUILDDIR
      - rm -r $FLATPAK_DEST/cuda/nsight-systems-2021.3.2
      - rm ./cuda.run
    sources:
      - type: file
        only-arches:
          - x86_64
        url: https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda_11.4.2_470.57.02_linux.run
        sha256: bbd87ca0e913f837454a796367473513cddef555082e4d86ed9a38659cc81f0a
        dest-filename: cuda.run
      - type: file
        only-arches:
          - aarch64
        url: https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda_11.4.2_470.57.02_linux_sbsa.run  # yamllint disable-line rule:line-length
        sha256: f2c4a52e06329606c8dfb7c5ea3f4cb4c0b28f9d3fdffeeb734fcc98daf580d8
        dest-filename: cuda.run

  - name: sunshine
    disabled: false
    buildsystem: cmake
    no-make-install: false
    builddir: true
    build-options:
      cxxflags: -I${C_INCLUDE_PATH}/libevdev-1.0
    config-opts:
      - -DCMAKE_BUILD_TYPE=Release
      - -DCMAKE_INSTALL_PREFIX=/app
      - -DCMAKE_CUDA_COMPILER=/app/cuda/bin/nvcc
      - -DSUNSHINE_ASSETS_DIR=share/sunshine
      - -DSUNSHINE_EXECUTABLE_PATH=/app/bin/sunshine
      - -DSUNSHINE_ENABLE_WAYLAND=ON
      - -DSUNSHINE_ENABLE_X11=ON
      - -DSUNSHINE_ENABLE_DRM=ON
      - -DSUNSHINE_ENABLE_CUDA=ON
      - -DSUNSHINE_CONFIGURE_FLATPAK=ON
    sources:
      - type: git
        url: '@GITHUB_CLONE_URL@'
        branch: '@GITHUB_BRANCH@'
        commit: '@GITHUB_COMMIT@'
    post-install:
      # use `sed` to update apps.json with prefixes required for flatpak
      # -r (regex)
      # -z (handle new lines) https://linuxhint.com/sed-replace-newline-with-space
      # `/gm` global and multiline
      - sed -r -z -i -e
        's/("((do)|(undo)|(cmd)|(detached))"\s*:\s*\[?\n*\s*")(.*")/\1flatpak-spawn --host \7/gm'
        /app/share/sunshine/apps.json
