How To Make a MPB Package
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>