HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //snap/mesa-2404/1165/snap/snapcraft.yaml
name: mesa-2404
license: MIT
base: core24
summary: Mesa libraries for core24 snaps
description: |
  A content snap containing the mesa libraries and drivers for `base: core24` snaps.

  It supports a broad range of hardware through the Mesa stack as well as Nvidia
  drivers installed from your distribution through the native SnapD support.

  To make use of this snap in your application, allowing for GPU acceleration on
  a broader set of hardware without including the drivers in your snap, refer to the
  documentation below:

  https://mir-server.io/docs/the-gpu-2404-snap-interface
website: https://github.com/canonical/mesa-2404
contact: https://github.com/canonical/mesa-2404/issues
source-code: https://github.com/canonical/mesa-2404

compression: lzo
adopt-info: dri

grade: stable
confinement: strict

platforms:
  amd64:
  arm64:
  armhf:
  ppc64el:
  s390x:
  riscv64:

package-repositories:
  - type: apt
    url: http://archive.ubuntu.com/ubuntu
    suites: [noble]
    components: [main]
    architectures: [i386]
    key-id: F6ECB3762474EDA9D21B7022871920D1991BC93C
    key-server: keyserver.ubuntu.com

parts:
  apis:
    # This provides the essential APIs
    #   o libGL.so.0
    #   o libEGL.so.1
    #   o libva.so.2
    #   o libvulkan.so.1
    #   o libgbm.so.1
    #
    plugin: nil
    stage-packages:
      - libgl1
      - libegl1
      - libgles2
      - libvulkan1
      - libgbm1
    prime:
      - usr/lib
      - usr/share/doc/*/copyright
      - usr/share/glvnd

  drm:
    # DRM userspace
    #   o libdrm.so.2
    plugin: nil
    stage-packages:
      - libdrm2
      - libdrm-common
    organize:
      # Expected at /libdrm by the `gpu-2404` interface
      usr/share/libdrm: libdrm
    prime:
      - usr/lib
      - usr/share/doc/*/copyright
      - libdrm

  va:
    # Video Acceleration API
    #   o libva.so.2
    plugin: nil
    stage-packages:
      - libva2
      - libva-drm2
      - libva-x11-2
      - libva-wayland2
    prime:
      - usr/lib
      - usr/share/doc/*/copyright

  dri:
    # Userspace drivers
    plugin: nil
    stage-packages:
      - libgl1-mesa-dri
      - va-driver-all
      - vdpau-driver-all
      - libvdpau-va-gl1
      - mesa-vulkan-drivers
      - libglx-mesa0
    organize:
      # Expected at /drirc.d by the `gpu-2404` interface
      usr/share/drirc.d: drirc.d
    prime:
      - usr/lib
      - usr/share/doc/*/copyright
      - usr/share/vulkan
      - drirc.d
    override-stage: |
      sed -i 's@/usr/lib/[a-z0-9_-]\+/@@' ${CRAFT_PART_INSTALL}/usr/share/vulkan/*/*.json
      craftctl default
      craftctl set version=$(
        dpkg-parsechangelog \
          --file ${CRAFT_PART_INSTALL}/usr/share/doc/libgl1-mesa-dri/changelog* \
          --show-field Version \
        | sed -rne 's/(^[0-9.]+).*/\1/p'
      )-snap$( git -C $CRAFT_PROJECT_DIR rev-list --count HEAD )

  x11:
    # X11 support (not much cost to having this)
    #   o libGLX.so.0
    plugin: nil
    stage-packages:
      - libglx0
      - libx11-xcb1
      - libxau6
      - libxcb-dri2-0
      - libxcb-dri3-0
      - libxcb-present0
      - libxcb-sync1
      - libxcb-xfixes0
      - libxcb1
      - libxdamage1
      - libxdmcp6
      - libxshmfence1
    organize:
      # Expected at /X11/XErrorDB by the `gpu-2404` interface
      usr/share/X11/XErrorDB: X11/XErrorDB
    prime:
      - usr/lib
      - usr/share/doc/*/copyright
      - usr/share/X11/locale
      - X11

  wayland:
    # Wayland support (not much cost to having this)
    plugin: nil
    stage-packages:
      - libwayland-client0
      - libwayland-cursor0
      - libwayland-egl1
      - libwayland-server0
    prime:
      - usr/lib
      - usr/share/doc/*/copyright

  nvidia-egl-ext-deps:
    source: https://github.com/NVIDIA/eglexternalplatform.git
    source-tag: 1.2
    source-depth: 1
    plugin: meson
    build-packages:
      - meson
    override-prime: '' # only build headers

  nvidia-egl-ext:
    # EGL external platforms
    after: [nvidia-egl-ext-deps]
    # TODO: change to pull egl-x11 from the archive once packaged
    source: https://github.com/NVIDIA/egl-x11.git
    source-commit: 8aac36c712561ebfecc82af3db15c50cd0d573fb
    source-depth: 1
    plugin: meson
    meson-parameters:
      - --prefix=/usr
    build-packages:
      - meson
      - pkgconf
      - libdrm-dev
      - libgbm-dev
      - libgl-dev
      - libegl-dev
      - libx11-dev
      - libx11-xcb-dev
      - libxcb1-dev
      - libxcb-dri3-dev
      - libxcb-present-dev
    stage-packages:
      - libnvidia-egl-wayland1
      - to amd64:
        - libnvidia-egl-gbm1
      - to arm64:
        - libnvidia-egl-gbm1
    prime:
      - usr/lib/**/*.so.*
      - usr/share/egl/egl_external_platform.d

  apis-i386:
      # This provides the essential APIs
      #   o libGL.so.1
      #   o libEGL.so.1
      #   o libva.so.2
      #   o libvulkan.so.1
      #   o libgbm.so.1
      #
    plugin: nil
    stage-packages:
      - on amd64:
        - libgl1:i386
        - libegl1:i386
        - libgles2:i386
        - libvulkan1:i386
        - libgbm1:i386
    override-prime: |
      if [ `arch` = "x86_64" ]; then craftctl default; fi
    prime:
      - usr/lib
      - usr/share/doc/*/copyright
      - usr/share/glvnd

  drm-i386:
    # DRM userspace
    #   o libdrm.so.2
    plugin: nil
    stage-packages:
      - on amd64:
        - libdrm2:i386
        - libdrm-common
    override-prime: |
      if [ `arch` = "x86_64" ]; then craftctl default; fi
    organize:
      # Expected at /libdrm by the `gpu-2404` interface
      usr/share/libdrm: libdrm
    prime:
      - usr/lib
      - usr/share/doc/*/copyright
      - libdrm

  va-i386:
    # Video Acceleration API
    #   o libva.so.2
    plugin: nil
    stage-packages:
      - on amd64:
        - libva2:i386
        - libva-drm2:i386
        - libva-x11-2:i386
        - libva-wayland2:i386
    override-prime: |
      if [ `arch` = "x86_64" ]; then craftctl default; fi
    prime:
      - usr/lib
      - usr/share/doc/*/copyright

  dri-i386:
    # Userspace drivers
    plugin: nil
    stage-packages:
      - on amd64:
        - libgl1-mesa-dri:i386
        - va-driver-all:i386
        - vdpau-driver-all:i386
        - mesa-vulkan-drivers:i386
        - libglx-mesa0:i386
    override-stage: |
      if [ `arch` = "x86_64" ]; then
        sed -i 's@/usr/lib/[a-z0-9_-]\+/@@' ${CRAFT_PART_INSTALL}/usr/share/vulkan/*/*.json
      fi
      craftctl default
    organize:
      # Expected at /drirc.d by the `gpu-2404` interface
      usr/share/drirc.d: drirc.d
    override-prime: |
      if [ `arch` = "x86_64" ]; then craftctl default; fi
    prime:
      - usr/lib
      - usr/share/vulkan
      - usr/share/doc/*/copyright
      - drirc.d

  x11-i386:
    # X11 support (not much cost to having this)
    #   o libGLX.so.0
    plugin: nil
    stage-packages:
      - on amd64:
        - libglx0:i386
        - libva-x11-2:i386
        - libx11-xcb1:i386
        - libxau6:i386
        - libxcb-dri2-0:i386
        - libxcb-dri3-0:i386
        - libxcb-present0:i386
        - libxcb-sync1:i386
        - libxcb-xfixes0:i386
        - libxcb1:i386
        - libxdamage1:i386
        - libxdmcp6:i386
        - libxshmfence1:i386
    override-prime: |
      if [ `arch` = "x86_64" ]; then craftctl default; fi
    prime:
      - usr/lib
      - usr/share/doc/*/copyright

  wayland-i386:
    # Wayland support (not much cost to having this)
    plugin: nil
    stage-packages:
      - on amd64:
        - libwayland-client0:i386
        - libwayland-cursor0:i386
        - libwayland-egl1:i386
        - libwayland-server0:i386
    override-prime: |
      if [ `arch` = "x86_64" ]; then craftctl default; fi
    prime:
      - usr/lib
      - usr/share/doc/*/copyright

  nvidia-egl-ext-i386:
    # EGL external platforms
    plugin: nil
    stage-packages:
      - on amd64:
        - libnvidia-egl-wayland1:i386
    override-prime: |
      if [ `arch` = "x86_64" ]; then craftctl default; fi
    prime:
      - usr/lib

  # These were at some point part of mesa-2404 and its cleanup lists,
  # but are no longer dependencies.
  # To avoid refreshes breaking consumer snaps, we need to hold on to them.
  legacy:
    plugin: nil
    stage-packages:
      - libdrm-nouveau2
      - libdrm-radeon1
      - libglapi-mesa
      - libllvm17t64
      - libllvm19
    prime:
      - usr/lib
      - usr/share/doc/*/copyright

  legacy-i386:
    plugin: nil
    stage-packages:
      - on amd64:
        - libdrm-nouveau2:i386
        - libdrm-radeon1:i386
        - libglapi-mesa:i386
        - libllvm17t64:i386
        - libllvm19:i386
        - libpciaccess0:i386
    override-prime: |
      if [ `arch` = "x86_64" ]; then craftctl default; fi
    prime:
      - usr/lib

  # Work around https://bugs.launchpad.net/snapcraft/+bug/2076115
  cleanup:
    after:
    - apis
    - drm
    - dri
    - nvidia-egl-ext
    - va
    - x11
    - wayland
    - apis-i386
    - drm-i386
    - dri-i386
    - nvidia-egl-ext-i386
    - va-i386
    - x11-i386
    - wayland-i386
    - legacy
    - legacy-i386
    plugin: nil
    build-snaps:
    - core24
    override-prime: |
      set -eux
      cd /snap/core24/current
      find . -type f,l -exec rm -f ${CRAFT_PRIME}/{} \;
      find ${CRAFT_PRIME} -empty -type d -delete

  file-list:
    after: [cleanup]
    plugin: nil
    override-prime: |
      mkdir -p ${CRAFT_PRIME}/snap

      # Avoid new userspace drivers slipping into the consumer snaps,
      # using wildcards to support multi-arch snaps
      cat <<EOF > ${CRAFT_PRIME}/snap/${CRAFT_ARCH_BUILD_FOR}.list
      usr/lib/*/dri/*
      usr/lib/*/libVkLayer_*.so
      usr/lib/*/libgallium-*.so
      usr/lib/*/libvulkan_*.so
      usr/lib/*/vdpau/*
      usr/share/X11/locale/*
      usr/share/drirc.d/*
      usr/share/egl/egl_external_platform.d/*
      usr/share/glvnd/egl_vendor.d/*
      usr/share/libdrm/*
      usr/share/vulkan/*.d/*
      EOF

      # Elements that should be pruned from the list
      cleanup_patterns=(
        -e debconf                                    # Cruft pulled in through python3 dependency (dropped upstream)
        -e dpkg-reconfigure                           # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1061658
        -e ^usr/lib/.*/dri/                           # Individual DRI and LibVA drivers
        -e ^usr/lib/.*/libVkLayer_.*.so               # Vulkan layer libraries
        -e ^usr/lib/.*/libgallium-.*.so               # Mesa's shared infrastracture libraries
        -e ^usr/lib/.*/libvulkan_.*.so                # Individual Vulkan drivers
        -e ^usr/lib/.*/vdpau/                         # Individual VDPAU drivers
        -e ^usr/share/X11/locale/*                    # X11 locale files
        -e ^usr/share/drirc.d/.*                      # Mesa quirk files
        -e ^usr/share/egl/egl_external_platform.d/.*  # EGL ICD files
        -e ^usr/share/glvnd/egl_vendor.d/*            # glvnd ICD files
        -e ^usr/share/libdrm/.*                       # libdrm support files
        -e ^usr/share/vulkan/.*.d/*                   # Vulkan ICD files
      )

      (
        cd ${CRAFT_PART_INSTALL}/../..
        # All the cruft coming from stage packages, but not actually primed
        find $( ls -d */install/usr/share/{bug,doc,gcc,gdb,lintian,man} ) -type f,l | cut -d/ -f3-

        cd ${CRAFT_PRIME}
        # Everything that is indeed primed
        find usr -type f,l

        # The re-organized bits
        find X11 -type f,l | awk '{ print "usr/share/" $0 }'
      ) \
      | grep --invert-match "${cleanup_patterns[@]}" \
      | sed 's/\(.so.[0-9]\+\)\([0-9\.]\+\)\?$/\1*/' \
      | sort --unique \
      >> ${CRAFT_PRIME}/snap/${CRAFT_ARCH_BUILD_FOR}.list

  scripts:
    after: [file-list]
    plugin: nil
    source: scripts
    override-build: |
      set -x
      SCRIPT=bin/gpu-2404-provider-wrapper
      ARCH_TRIPLETS=( ${CRAFT_ARCH_TRIPLET_BUILD_FOR} )

      [ ${CRAFT_ARCH_BUILD_FOR} == amd64 ] && ARCH_TRIPLETS+=( i386-linux-gnu )

      mkdir -p ${CRAFT_PART_INSTALL}/bin
      sed \
        -e "s/@ARCH_TRIPLETS@/${ARCH_TRIPLETS[*]}/" \
        -e "s/@COMPONENT_SENTINEL@/kernel-gpu-2404-sentinel/" \
        -e "s/@COMPONENT_MANGLER@/kernel-gpu-2404-provider-mangler/" \
        ${CRAFT_PART_SRC}/${SCRIPT}.in \
        > ${CRAFT_PART_INSTALL}/${SCRIPT}
      chmod 555 ${CRAFT_PART_INSTALL}/${SCRIPT}

  component-monitor:
    after: [file-list]
    plugin: rust
    source: component-monitor

plugs:
  kernel-gpu-2404:
    interface: content
    target: $SNAP/kernel-gpu-2404

slots:
  gpu-2404:
    interface: content
    read:
    - $SNAP
    - $SNAP_DATA/kernel-gpu-2404

environment:
  COMPONENT_INTERFACE: kernel-gpu-2404
  COMPONENT_SENTINEL_PATH: ${SNAP}/kernel-gpu-2404/kernel-gpu-2404-sentinel
  COMPONENT_TARGET: ${SNAP_DATA}/kernel-gpu-2404

apps:
  component-monitor:
    daemon: simple
    restart-condition: always
    restart-delay: 3s
    command: bin/component-monitor