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

From MOD Wiki
Jump to navigation Jump to search
Line 2: Line 2:
  
 
Plugin packages reside in plugins/package/ directory.
 
Plugin packages reside in plugins/package/ directory.
 +
 +
== Plugin package example ==
  
 
Here's an example of a plugin package file:
 
Here's an example of a plugin package file:
Line 15: Line 17:
 
Let's divide this into small pieces so it's easier to understand.<br>
 
Let's divide this into small pieces so it's easier to understand.<br>
 
We're using PLUGINPKG as a generic name, '''you must use your package name in uppercase''' here.<br>
 
We're using PLUGINPKG as a generic name, '''you must use your package name in uppercase''' here.<br>
 +
 +
=== Version and download location ===
 +
 
First we define the version, plus the download location and filename to download the source code from.<br>
 
First we define the version, plus the download location and filename to download the source code from.<br>
  
Line 30: Line 35:
 
PLUGINPKG_SITE_METHOD = git
 
PLUGINPKG_SITE_METHOD = git
 
</source>
 
</source>
 +
 +
=== LV2 bundles ===
  
 
Moving on, we define which bundles to use.<br>
 
Moving on, we define which bundles to use.<br>
Line 37: Line 44:
 
PLUGINPKG_BUNDLES = myplugin.lv2
 
PLUGINPKG_BUNDLES = myplugin.lv2
 
</source>
 
</source>
 +
 +
=== Build rules ===
  
 
Finally, we defined the steps to build the package.<br>
 
Finally, we defined the steps to build the package.<br>
 
If you're using autoconf or cmake, buildroot has this covered for you already.<br>
 
If you're using autoconf or cmake, buildroot has this covered for you already.<br>
 +
Using other build systems means you have to specify how to configure, build and install the code.
 +
 +
==== autotools ====
 +
 
For autotools, use:
 
For autotools, use:
  
Line 45: Line 58:
 
$(eval $(autotools-package))
 
$(eval $(autotools-package))
 
</source>
 
</source>
 +
 +
==== cmake ====
  
 
For cmake, use:
 
For cmake, use:
Line 51: Line 66:
 
</source>
 
</source>
  
Using other build systems means you have to specify how to configure, build and install the code.<br>
+
==== waf ====
 +
 
 
Here's an example for waf:
 
Here's an example for waf:
  
Line 71: Line 87:
 
$(eval $(generic-package))
 
$(eval $(generic-package))
 
</source>
 
</source>
 +
 +
==== raw makefile ====
  
 
And here's an example for raw makefiles:
 
And here's an example for raw makefiles:

Revision as of 21:42, 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.

Plugin package example

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.

Version and download location

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

LV2 bundles

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

PLUGINPKG_BUNDLES = myplugin.lv2

Build rules

Finally, we defined the steps to build the package.
If you're using autoconf or cmake, buildroot has this covered for you already.
Using other build systems means you have to specify how to configure, build and install the code.

autotools

For autotools, use:

$(eval $(autotools-package))

cmake

For cmake, use:

$(eval $(cmake-package))

waf

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))

raw makefile

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>