summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Stebbins <[email protected]>2019-02-24 13:53:56 -0700
committerJohn Stebbins <[email protected]>2019-03-07 13:59:35 -0800
commitadbd2a63b0479ed6fcf97967b4af98997c981927 (patch)
tree42edcc3acc5ede60ab5da63aa3152a2a01caf6f2
parent3062c4373b234f46b131b1092448946f25160351 (diff)
flatpak: add Intel MediaSDK plugin
Defines a flatpak manifest that is used to download and build all the dependencies for MediaSDK 19.1.pre2. These are built into a flatpak plugin that can be installed independently from the main HandBrake flatpak. When the plugin is installed, HandBrake gains the ability to do QSV encoding with the latest MediaSDK and VA drivers. When HandBrake is configured with '--flatpak --enable-qsv' and 'make pkg.create.flatpak' is run, both the HandBrake flatpak and the MediaSDK plugin will be built. The name of the MediaSDK plugin file is: fr.handbrake.plugin.IntelMediaSDK-$(HB.version)-$(HB.machine).flatpak I've also changed the the name of the HandBrake flatpak file to conform better with flatpak naming: fr.handbrake.ghb-$(HB.version)-$(HB.machine).flatpak fr.handbrake.HandBrakeCLI-$(HB.version)-$(HB.machine).flatpak
-rw-r--r--pkg/linux/flatpak/fr.handbrake.plugin.IntelMediaSDK.json106
-rw-r--r--pkg/linux/module.defs92
-rw-r--r--pkg/linux/module.rules37
-rwxr-xr-xscripts/create_flatpak_manifest.py26
4 files changed, 213 insertions, 48 deletions
diff --git a/pkg/linux/flatpak/fr.handbrake.plugin.IntelMediaSDK.json b/pkg/linux/flatpak/fr.handbrake.plugin.IntelMediaSDK.json
new file mode 100644
index 000000000..86e7125af
--- /dev/null
+++ b/pkg/linux/flatpak/fr.handbrake.plugin.IntelMediaSDK.json
@@ -0,0 +1,106 @@
+{
+ "app-id": "fr.handbrake.plugin.IntelMediaSDK",
+ "branch": "1",
+ "runtime": "fr.handbrake.ghb",
+ "runtime-version": "development",
+ "sdk": "org.freedesktop.Sdk//18.08",
+ "build-extension": true,
+ "separate-locales": false,
+ "appstream-compose": false,
+ "modules": [
+ {
+ "name": "intel-gmmlib",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/intel/gmmlib/archive/intel-gmmlib-18.4.1.tar.gz",
+ "sha256": "7970a8ae4e16efb98f38fbbc0346eea03227fc4462a9bd8e8077277cc3430a84"
+ }
+ ],
+ "buildsystem": "cmake",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release"
+ ],
+ "build-options": {
+ "prefix" : "/app/extensions/IntelMediaSDK",
+ "make-args": [
+ "VERBOSE=1"
+ ],
+ "make-install-args": [
+ "VERBOSE=1"
+ ]
+ }
+ },
+ {
+ "name": "libva",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/intel/libva/releases/download/2.4.0/libva-2.4.0.tar.bz2",
+ "sha256": "99263056c21593a26f2ece812aee6fe60142b49e6cd46cb33c8dddf18fc19391"
+ }
+ ],
+ "no-autogen": true,
+ "config-opts": ["--with-drivers-path=/app/extensions/IntelMediaSDK/lib/dri"],
+ "build-options": {
+ "prefix" : "/app/extensions/IntelMediaSDK"
+ }
+ },
+ {
+ "name": "libva-utils",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/intel/libva-utils/releases/download/2.4.0/libva-utils-2.4.0.tar.bz2",
+ "sha256": "5b7d1954b40fcb2c0544be20125c71a0852049715ab85a3e8aba60434a40c6b3"
+ }
+ ],
+ "no-autogen": true,
+ "build-options": {
+ "prefix" : "/app/extensions/IntelMediaSDK",
+ "prepend-pkg-config-path": "/app/extensions/IntelMediaSDK/lib/pkgconfig"
+ }
+ },
+ {
+ "name": "intel-media-driver",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/VCDP/media-driver/archive/intel-media-kbl-19.1.0.tar.gz",
+ "sha256": "d494f8cf395e9996beda9846afdc736998de6978481aab0e483d818a0c836d66"
+ }
+ ],
+ "buildsystem": "cmake",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release"
+ ],
+ "build-options": {
+ "prefix" : "/app/extensions/IntelMediaSDK",
+ "prepend-pkg-config-path": "/app/extensions/IntelMediaSDK/lib/pkgconfig"
+ }
+ },
+ {
+ "name": "mediasdk",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/Intel-Media-SDK/MediaSDK/archive/MSS-KBL-2019-R1.tar.gz",
+ "sha256": "ec3d23a2ca4f18144b52d2257b3050ba0f9a98f2688418dd40e8335a215be765"
+ }
+ ],
+ "buildsystem": "cmake",
+ "builddir": true,
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DMFX_ENABLE_SW_FALLBACK=OFF"
+ ],
+ "build-options": {
+ "prefix" : "/app/extensions/IntelMediaSDK",
+ "prepend-pkg-config-path": "/app/extensions/IntelMediaSDK/lib/pkgconfig"
+ }
+ }
+ ]
+}
+
diff --git a/pkg/linux/module.defs b/pkg/linux/module.defs
index 954fbd452..939a62410 100644
--- a/pkg/linux/module.defs
+++ b/pkg/linux/module.defs
@@ -18,30 +18,11 @@ else ifeq ($(HB.repo.branch),)
else
PKG.rpm.hb.version = $(tag).$(HB.repo.shorthash).$(HB.repo.branch)
endif
-ifeq ($(HB.repo.type),release)
- PKG.flatpak.branch = stable
-else
- PKG.flatpak.branch = development
-endif
ifneq ($(PGP_ID),)
PGPSIGN = --gpg-sign=$(PGP_ID)
endif
-ifeq (1,$(FEATURE.qsv))
- FPQSV = -q
-endif
-
-ifneq ($(FP_RUNTIME),)
- FPRUNTIME = -r $(FP_RUNTIME)
-endif
-
-ifneq ($(HB_URL),)
-ifneq ($(HB_SHA256),)
- FLATHUB_MANIFEST = $(PKG.gui.flathub.manifest) $(PKG.cli.flathub.manifest)
-endif
-endif
-
###############################################################################
PKG.cli.tar = $(PKG.out.abs/)$(HB.name)-$(HB.version)-$(BUILD.machine)_CLI.tar.gz
@@ -55,7 +36,6 @@ PKG.rpm.src.tar.bz2 = $(STAGE.out.src.abs/)rpm/$(PKG.rpm.basename).tar.bz2
STAGE.out.rpm.src/ = $(STAGE.out.src.abs/)rpm/
PKG.debian = $(PKG.in.abs/)linux/debian
-PKG.flatpak/ = $(PKG.in.abs/)linux/flatpak/
PKG.cli.deb = $(PKG.out.abs/)$(HB.name)-$(HB.debversion)-Ubuntu_CLI_$(BUILD.machine).deb
PKG.gui.deb = $(PKG.out.abs/)$(HB.name)-$(HB.debversion)-Ubuntu_GUI_$(BUILD.machine).deb
PKG.deb.basename = $(HB.name.lower)-$(HB.debversion)
@@ -69,18 +49,6 @@ PKG.gui.tmp.deb = $(PKG.out.abs/)$(HB.name.lower)-gtk_$(HB.debversion)_$(PKG.deb
PKG.native.rpm.stamp = $(RPM.out/).rpm.stamp
PKG.rpm.stamp = $(PKG.out.abs/).rpm.stamp
-PKG.out.flatpak/ = $(PKG.out.abs/)flatpak/
-STAGE.out.flatpak/ = $(STAGE.out.abs/)flatpak/
-PKG.gui.flathub.manifest = $(PKG.out.flatpak/)fr.handbrake.ghb.json
-PKG.cli.flathub.manifest = $(PKG.out.flatpak/)/fr.handbrake.HandBrakeCLI.json
-PKG.gui.manifest.flatpak = $(PKG.flatpak/)fr.handbrake.ghb.json
-PKG.cli.manifest.flatpak = $(PKG.flatpak/)fr.handbrake.HandBrakeCLI.json
-PKG.gui.build.flatpak = $(STAGE.out.flatpak/)$(HB.name)-$(HB.version)-$(BUILD.machine).build
-PKG.cli.build.flatpak = $(STAGE.out.flatpak/)$(HB.name)CLI-$(HB.version)-$(BUILD.machine).build
-PKG.repo.flatpak = $(PKG.out.flatpak/)$(HB.name)-Flatpak.repo
-PKG.cli.flatpak = $(PKG.out.flatpak/)$(HB.name)CLI-$(HB.version)-$(BUILD.machine).flatpak
-PKG.gui.flatpak = $(PKG.out.flatpak/)$(HB.name)-$(HB.version)-$(BUILD.machine).flatpak
-
PKG.gui.native.rpm = $(RPM.out/)RPMS/$(PKG.rpm.machine)/$(HB.name.lower)-gui-$(PKG.rpm.hb.version)-$(PKG.release)$(PKG.rpm.dist).$(PKG.rpm.machine).rpm
PKG.cli.native.rpm = $(RPM.out/)RPMS/$(PKG.rpm.machine)/$(HB.name.lower)-cli-$(PKG.rpm.hb.version)-$(PKG.release)$(PKG.rpm.dist).$(PKG.rpm.machine).rpm
@@ -92,6 +60,66 @@ RPMROOT.out = $(STAGE.out.abs/)rpmroot
RPMROOT.out/ = $(RPMROOT.out)/
###############################################################################
+# Flatpak
+###############################################################################
+
+ifeq (1,$(FEATURE.qsv))
+ FPQSV = -q
+endif
+
+ifneq ($(FP_RUNTIME),)
+ FPRUNTIME = -r $(FP_RUNTIME)
+endif
+
+ifeq ($(HB.repo.type),release)
+ PKG.branch.flatpak = stable
+else
+ PKG.branch.flatpak = development
+endif
+PKG.plugin.version.flatpak = 1
+
+PKG.flatpak/ = $(PKG.in.abs/)linux/flatpak/
+
+PKG.out.flatpak/ = $(PKG.out.abs/)flatpak/
+STAGE.out.flatpak/ = $(STAGE.out.abs/)flatpak/
+
+PKG.repo.flatpak = $(PKG.out.flatpak/)$(HB.name)-Flatpak.repo
+
+PKG.gui.name.flatpak = fr.handbrake.ghb
+PKG.gui.manifest.flathub = $(PKG.out.flatpak/)$(PKG.gui.name.flatpak).json
+PKG.gui.template.flatpak = $(PKG.flatpak/)$(PKG.gui.name.flatpak).json
+PKG.gui.manifest.flatpak = $(STAGE.out.flatpak/)$(PKG.gui.name.flatpak).json
+PKG.gui.build.flatpak = $(STAGE.out.flatpak/)$(PKG.gui.name.flatpak)-$(HB.version)-$(BUILD.machine).build
+PKG.gui.flatpak = $(PKG.out.flatpak/)$(PKG.gui.name.flatpak)-$(HB.version)-$(BUILD.machine).flatpak
+
+PKG.cli.name.flatpak = fr.handbrake.HandBrakeCLI
+PKG.cli.manifest.flathub = $(PKG.out.flatpak/)$(PKG.cli.name.flatpak).json
+PKG.cli.template.flatpak = $(PKG.flatpak/)$(PKG.cli.name.flatpak).json
+PKG.cli.manifest.flatpak = $(STAGE.out.flatpak/)$(PKG.cli.name.flatpak).json
+PKG.cli.build.flatpak = $(STAGE.out.flatpak/)$(PKG.cli.name.flatpak)-$(HB.version)-$(BUILD.machine).build
+PKG.cli.flatpak = $(PKG.out.flatpak/)$(PKG.cli.name.flatpak)-$(HB.version)-$(BUILD.machine).flatpak
+
+PKG.mediasdk.name.flatpak = fr.handbrake.plugin.IntelMediaSDK
+PKG.mediasdk.manifest.flathub = $(PKG.out.flatpak/)$(PKG.mediasdk.name.flatpak).json
+PKG.mediasdk.template.flatpak = $(PKG.flatpak/)$(PKG.mediasdk.name.flatpak).json
+PKG.mediasdk.manifest.flatpak = $(STAGE.out.flatpak/)$(PKG.mediasdk.name.flatpak).json
+PKG.mediasdk.build.flatpak = $(STAGE.out.flatpak/)$(PKG.mediasdk.name.flatpak)-$(HB.version)-$(BUILD.machine).build
+PKG.mediasdk.flatpak = $(PKG.out.flatpak/)$(PKG.mediasdk.name.flatpak)-$(HB.version)-$(BUILD.machine).flatpak
+
+PKG.all.flatpak = $(PKG.gui.flatpak) $(PKG.cli.flatpak)
+ifeq (1,$(FEATURE.qsv))
+ PKG.all.flatpak += $(PKG.mediasdk.flatpak)
+endif
+
+PKG.plugins.flatpak = $(PKG.mediasdk.flatpak)
+
+ifneq ($(HB_URL),)
+ifneq ($(HB_SHA256),)
+ FLATHUB_MANIFEST = $(PKG.gui.manifest.flathub) $(PKG.cli.manifest.flathub)
+endif
+endif
+
+###############################################################################
BUILD.out += $(PKG.src.tar)
BUILD.out += $(PKG.cli.flatpak)
diff --git a/pkg/linux/module.rules b/pkg/linux/module.rules
index 11b536c8a..3fbbbe60c 100644
--- a/pkg/linux/module.rules
+++ b/pkg/linux/module.rules
@@ -1,4 +1,5 @@
-pkg.create.flatpak:: contrib.fetch $(PKG.gui.flatpak) $(PKG.cli.flatpak) $(FLATHUB_MANIFEST)
+pkg.create.flatpak:: contrib.fetch $(PKG.all.flatpak)
+pkg.create.plugins.flatpak:: $(PKG.plugins.flatpak)
pkg.create.flathub:: $(FLATHUB_MANIFEST)
pkg.create.deb:: $(PKG.gui.deb) $(PKG.cli.deb)
pkg.create.rpm:: $(PKG.rpm.stamp)
@@ -61,27 +62,37 @@ $(PKG.rpm.stamp): $(PKG.native.rpm.stamp)
#
# Flatpak binary package rules
#
-$(PKG.gui.flathub.manifest):
+$(PKG.gui.manifest.flathub):
$(MKDIR.exe) -p $(PKG.out.flatpak/)
- $(SRC/)scripts/create_flatpak_manifest.py $(FPQSV) -a "$(HB_URL)" -s "$(HB_SHA256)" -t $(PKG.gui.manifest.flatpak) $(foreach m,$(CONTRIBS),-c "$(word 1,$($m.FETCH.url))" -s "$(word 1,$($m.FETCH.sha256))") $(FPRUNTIME) $(PKG.gui.flathub.manifest)
+ $(SRC/)scripts/create_flatpak_manifest.py $(FPQSV) -a "$(HB_URL)" -s "$(HB_SHA256)" -t $(PKG.gui.template.flatpak) $(foreach m,$(CONTRIBS),-c "$(word 1,$($m.FETCH.url))" -s "$(word 1,$($m.FETCH.sha256))") $(FPRUNTIME) $(PKG.gui.manifset.flathub)
-$(PKG.cli.flathub.manifest):
+$(PKG.cli.manifest.flathub):
$(MKDIR.exe) -p $(PKG.out.flatpak/)
- $(SRC/)scripts/create_flatpak_manifest.py $(FPQSV) -a "$(HB_URL)" -s "$(HB_SHA256)" -t $(PKG.cli.manifest.flatpak) $(foreach m,$(CONTRIBS),-c "$(word 1,$($m.FETCH.url))" -s "$(word 1,$($m.FETCH.sha256))") $(FPRUNTIME) $(PKG.cli.flathub.manifest)
+ $(SRC/)scripts/create_flatpak_manifest.py $(FPQSV) -a "$(HB_URL)" -s "$(HB_SHA256)" -t $(PKG.cli.template.flatpak) $(foreach m,$(CONTRIBS),-c "$(word 1,$($m.FETCH.url))" -s "$(word 1,$($m.FETCH.sha256))") $(FPRUNTIME) $(PKG.cli.manifest.flathub)
-$(PKG.gui.flatpak): GNUmakefile $(PKG.src.tar.bz2)
+$(PKG.gui.flatpak): GNUmakefile $(PKG.gui.template.flatpak) $(PKG.src.tar.bz2)
$(MKDIR.exe) -p $(STAGE.out.flatpak/)
$(MKDIR.exe) -p $(PKG.out.flatpak/)
- $(SRC/)scripts/create_flatpak_manifest.py $(FPQSV) -a "$(abspath $(PKG.src.tar.bz2))" -t $(PKG.gui.manifest.flatpak) $(foreach m,$(CONTRIBS),-c "$(abspath $(CONTRIB.download/)$($m.FETCH.basename))") $(STAGE.out.flatpak/)fr.handbrake.ghb.json
- flatpak-builder --default-branch=$(PKG.flatpak.branch) --disable-cache --force-clean $(PGPSIGN) --repo=$(PKG.repo.flatpak) $(PKG.gui.build.flatpak) $(STAGE.out.flatpak/)fr.handbrake.ghb.json
- flatpak build-bundle $(PKG.repo.flatpak) $(PKG.gui.flatpak) fr.handbrake.ghb $(PKG.flatpak.branch)
+ $(SRC/)scripts/create_flatpak_manifest.py $(FPQSV) -a "$(abspath $(PKG.src.tar.bz2))" -t $(PKG.gui.template.flatpak) $(foreach m,$(CONTRIBS),-c "$(abspath $(CONTRIB.download/)$($m.FETCH.basename))") $(PKG.gui.manifest.flatpak)
+ flatpak-builder --default-branch=$(PKG.branch.flatpak) --disable-cache --force-clean $(PGPSIGN) --repo=$(PKG.repo.flatpak) $(PKG.gui.build.flatpak) $(PKG.gui.manifest.flatpak)
+ flatpak build-bundle $(PKG.repo.flatpak) $(PKG.gui.flatpak) $(PKG.gui.name.flatpak) $(PKG.branch.flatpak)
-$(PKG.cli.flatpak): GNUmakefile $(PKG.src.tar.bz2)
+$(PKG.cli.flatpak): GNUmakefile $(PKG.cli.template.flatpak) $(PKG.src.tar.bz2)
$(MKDIR.exe) -p $(STAGE.out.flatpak/)
$(MKDIR.exe) -p $(PKG.out.flatpak/)
- $(SRC/)scripts/create_flatpak_manifest.py $(FPQSV) -a "$(abspath $(PKG.src.tar.bz2))" -t $(PKG.cli.manifest.flatpak) $(foreach m,$(CONTRIBS),-c "$(abspath $(CONTRIB.download/)$($m.FETCH.basename))") $(STAGE.out.flatpak/)fr.handbrake.HandBrakeCLI.json
- flatpak-builder --default-branch=$(PKG.flatpak.branch) --disable-cache --force-clean $(PGPSIGN) --repo=$(PKG.repo.flatpak) $(PKG.cli.build.flatpak) $(STAGE.out.flatpak/)fr.handbrake.HandBrakeCLI.json
- flatpak build-bundle $(PKG.repo.flatpak) $(PKG.cli.flatpak) fr.handbrake.HandBrakeCLI $(PKG.flatpak.branch)
+ $(SRC/)scripts/create_flatpak_manifest.py $(FPQSV) -a "$(abspath $(PKG.src.tar.bz2))" -t $(PKG.cli.template.flatpak) $(foreach m,$(CONTRIBS),-c "$(abspath $(CONTRIB.download/)$($m.FETCH.basename))") $(PKG.cli.manifest.flatpak)
+ flatpak-builder --default-branch=$(PKG.branch.flatpak) --disable-cache --force-clean $(PGPSIGN) --repo=$(PKG.repo.flatpak) $(PKG.cli.build.flatpak) $(PKG.cli.manifest.flatpak)
+ flatpak build-bundle $(PKG.repo.flatpak) $(PKG.cli.flatpak) $(PKG.cli.name.flatpak) $(PKG.branch.flatpak)
+
+$(PKG.mediasdk.flatpak): GNUmakefile $(PKG.mediasdk.template.flatpak) $(PKG.gui.flatpak)
+ $(MKDIR.exe) -p $(STAGE.out.flatpak/)
+ $(MKDIR.exe) -p $(PKG.out.flatpak/)
+ $(SRC/)scripts/create_flatpak_manifest.py -p -r $(PKG.branch.flatpak) -t $(PKG.mediasdk.template.flatpak) $(PKG.mediasdk.manifest.flatpak)
+ -flatpak --user remove --noninteractive $(PKG.gui.name.flatpak)//$(PKG.branch.flatpak)
+ flatpak --user install --noninteractive $(PKG.gui.flatpak)
+ flatpak-builder --default-branch=$(PKG.branch.flatpak) --disable-cache --force-clean $(PGPSIGN) --repo=$(PKG.repo.flatpak) $(PKG.mediasdk.build.flatpak) $(PKG.mediasdk.manifest.flatpak)
+ flatpak build-bundle --runtime $(PKG.repo.flatpak) $(PKG.mediasdk.flatpak) $(PKG.mediasdk.name.flatpak) $(PKG.plugin.version.flatpak)
+ -flatpak --user remove --noninteractive $(PKG.gui.name.flatpak)//$(PKG.branch.flatpak)
#
# Debian binary package rules
diff --git a/scripts/create_flatpak_manifest.py b/scripts/create_flatpak_manifest.py
index 2d1373576..b119bd9b7 100755
--- a/scripts/create_flatpak_manifest.py
+++ b/scripts/create_flatpak_manifest.py
@@ -32,6 +32,18 @@ class SourceEntry:
self.entry_type = entry_type
self.sha256 = sha256
+class FlatpakPluginManifest:
+ def __init__(self, runtime, template=None):
+ if template != None:
+ with open(template, 'r') as fp:
+ self.manifest = json.load(fp, object_pairs_hook=OrderedDict)
+
+ else:
+ self.manifest = OrderedDict()
+
+ if runtime != None:
+ self.manifest["runtime-version"] = runtime
+
class FlatpakManifest:
def __init__(self, source_list, runtime, qsv, template=None):
if template != None:
@@ -99,13 +111,14 @@ def usage():
print " -t --template - Flatpak manifest template"
print " -r --runtime - Flatpak SDK runtime version"
print " -q --qsv - Build with Intel QSV support"
+ print " -p --plugin - Manifest if for a HandBrake flatpak plugin"
print " -h --help - Show this message"
if __name__ == "__main__":
try:
- opts, args = getopt.getopt(sys.argv[1:], "a:c:s:t:r:qh",
+ opts, args = getopt.getopt(sys.argv[1:], "a:c:s:t:r:qph",
["archive=", "contrib=", "sha265=",
- "template=", "runtime=", "qsv", "help"])
+ "template=", "runtime=", "qsv", "plugin", "help"])
except getopt.GetoptError:
print "Error: Invalid option"
usage()
@@ -118,6 +131,7 @@ if __name__ == "__main__":
source_list = OrderedDict()
current_source = None
runtime = None
+ plugin = 0
qsv = 0
for opt, arg in opts:
if opt in ("-h", "--help"):
@@ -144,13 +158,19 @@ if __name__ == "__main__":
runtime = arg
elif opt in ("-q", "--qsv"):
qsv = 1;
+ elif opt in ("-p", "--plugin"):
+ plugin = 1;
if len(args) > 0:
dst = args[0]
else:
dst = None
- manifest = FlatpakManifest(source_list, runtime, qsv, template)
+ if plugin:
+ manifest = FlatpakPluginManifest(runtime, template)
+ else:
+ manifest = FlatpakManifest(source_list, runtime, qsv, template)
+
if dst != None:
with open(dst, 'w') as fp:
json.dump(manifest.manifest, fp, ensure_ascii=False, indent=4)