Difference between revisions of "How To Make a MPB Package"

From MOD Wiki
Jump to navigation Jump to search
Line 1: Line 1:
 
This page describes how to make a plugin package for mod-plugin-builder (or MPB for short)
 
This page describes how to make a plugin package for mod-plugin-builder (or MPB for short)
 
Plugin packages are buildroot files. Because of that it must comply with Buildroot rules.<br>
 
A few important notes:
 
* The package name is defined by the folder name and cannot contain '.'
 
* There must be a <packagename>.mk file inside the package folder
 
* The package name and '.mk' file name must be the same
 
* Inside the '.mk' file all defined variables must start with the package name in uppercase replacing '-' with '_'
 
* You need to define the generated plugin bundle names in the <PACKAGE_NAME>_BUNDLES variable
 
* Browse through other examples so you get an idea of other variations of the makefiles (how to use cmake or waf for example)
 
* If you want to rebuild after a change to your plugin or the .mk then it is often easiest to just delete the previous build's directory for your plugin ~/mod-workdir/plugins-dep/build/<packagename>-<version>
 
  
 
Plugin packages reside in plugins/package/ directory.
 
Plugin packages reside in plugins/package/ directory.
Line 98: Line 88:
 
</source>
 
</source>
  
== Tips and tricks
+
== Tips and tricks ==
  
 
<source lang="makefile">
 
<source lang="makefile">
Line 111: Line 101:
 
PLUGINPKG_MAKE = $(MAKE1)
 
PLUGINPKG_MAKE = $(MAKE1)
 
</source>
 
</source>
 +
 +
== Final notes ==
 +
 +
Plugin packages are buildroot files. Because of that it must comply with Buildroot rules.<br>
 +
A few important notes:
 +
* The package name is defined by the folder name and cannot contain '.'
 +
* There must be a <packagename>.mk file inside the package folder
 +
* The package name and '.mk' file name must be the same
 +
* Inside the '.mk' file all defined variables must start with the package name in uppercase replacing '-' with '_'
 +
* You need to define the generated plugin bundle names in the <PACKAGE_NAME>_BUNDLES variable
 +
* Browse through other examples so you get an idea of other variations of the makefiles (how to use cmake or waf for example)
 +
* If you want to rebuild after a change to your plugin or the .mk then it is often easiest to just delete the previous build's directory for your plugin ~/mod-workdir/plugins-dep/build/<packagename>-<version>

Revision as of 21:40, 13 September 2017

This page describes how to make a plugin package for mod-plugin-builder (or MPB for short)

Plugin packages reside in plugins/package/ directory.

Here's an example of a plugin package file:

PLUGINPKG_VERSION = 1.0.0
PLUGINPKG_SITE = http://download.sourceforge.net/myplugin/
PLUGINPKG_SOURCE = myplugin-$(PLUGINPKG_VERSION).tar.gz
PLUGINPKG_BUNDLES = myplugin.lv2

$(eval $(cmake-package))

Let's divide this into small pieces so it's easier to understand.
We're using PLUGINPKG as a generic name, you must use your package name in uppercase here.
First we define the version, plus the download location and filename to download the source code from.

PLUGINPKG_VERSION = 1.0.0
PLUGINPKG_SITE = http://download.sourceforge.net/myplugin/
PLUGINPKG_SOURCE = myplugin-$(PLUGINPKG_VERSION).tar.gz

If you rather use a git repository, use something like this:

PLUGINPKG_VERSION = 25451be928b69c288f6978fb3b3fcf202dbd1ee1
PLUGINPKG_SITE = git://github.com/myself/myplugin
PLUGINPKG_SITE_METHOD = git

Moving on, we define which bundles to use.
(Note: they must be installed to $DESTDIR/usr/lib/lv2/)

PLUGINPKG_BUNDLES = myplugin.lv2

Finally, we defined the steps to build the package.
If you're using autoconf or cmake, buildroot has this covered for you already.
For autotools, use:

$(eval $(autotools-package))

For cmake, use:

$(eval $(cmake-package))

Using other build systems means you have to specify how to configure, build and install the code.
Here's an example for waf:

PLUGINPKG_TARGET_WAF = $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(HOST_DIR)/usr/bin/python ./waf

define PLUGINPKG_CONFIGURE_CMDS
	(cd $(@D); $(BLOP_TARGET_WAF) configure --prefix=/usr)
endef

define PLUGINPKG_BUILD_CMDS
	(cd $(@D); $(BLOP_TARGET_WAF) build -j $(PARALLEL_JOBS))
endef

define PLUGINPKG_INSTALL_TARGET_CMDS
	(cd $(@D); $(BLOP_TARGET_WAF) install --destdir=$(TARGET_DIR))
endef

$(eval $(generic-package))

And here's an example for raw makefiles:

PLUGINPKG_TARGET_MAKE = $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)

define PLUGINPKG_BUILD_CMDS
	$(PLUGINPKG_TARGET_MAKE)
endef

define PLUGINPKG_INSTALL_TARGET_CMDS
	$(PLUGINPKG_TARGET_MAKE) install DESTDIR=$(TARGET_DIR)
endef

$(eval $(generic-package))

Tips and tricks

PLUGINPKG_CONF_OPTS=-DBUILD_GUI=OFF
PLUGINPKG_AUTORECONF = YES
PLUGINPKG_MAKE = $(MAKE1)

Final notes

Plugin packages are buildroot files. Because of that it must comply with Buildroot rules.
A few important notes:

  • The package name is defined by the folder name and cannot contain '.'
  • There must be a <packagename>.mk file inside the package folder
  • The package name and '.mk' file name must be the same
  • Inside the '.mk' file all defined variables must start with the package name in uppercase replacing '-' with '_'
  • You need to define the generated plugin bundle names in the <PACKAGE_NAME>_BUNDLES variable
  • Browse through other examples so you get an idea of other variations of the makefiles (how to use cmake or waf for example)
  • If you want to rebuild after a change to your plugin or the .mk then it is often easiest to just delete the previous build's directory for your plugin ~/mod-workdir/plugins-dep/build/<packagename>-<version>