cannam@239
|
1
|
cannam@239
|
2 The Vamp Plugin SDK -- Platform Notes for Linux and other GNU platforms
|
cannam@239
|
3 =======================================================================
|
cannam@239
|
4
|
cannam@239
|
5 Building at the command line
|
cannam@239
|
6 ----------------------------
|
cannam@239
|
7
|
cannam@239
|
8 To build the SDK, example plugins, and command-line host, first edit
|
cannam@239
|
9 the Makefile to suit your platform according to the comments in it,
|
cannam@239
|
10 then run "make".
|
cannam@239
|
11
|
cannam@239
|
12 Note that you must have libsndfile
|
cannam@239
|
13 (http://www.mega-nerd.com/libsndfile/) installed in order to build the
|
cannam@239
|
14 command-line host successfully. To build only the SDK and examples,
|
cannam@239
|
15 run "make sdk examples" instead of just "make".
|
cannam@239
|
16
|
cannam@239
|
17
|
cannam@239
|
18 Installing the Example Plugins
|
cannam@239
|
19 ------------------------------
|
cannam@239
|
20
|
cannam@239
|
21 To install the example plugins so you can load them in Vamp hosts,
|
cannam@239
|
22 copy the files
|
cannam@239
|
23
|
cannam@239
|
24 examples/vamp-example-plugins.so
|
cannam@239
|
25 and
|
cannam@239
|
26 examples/vamp-example-plugins.cat
|
cannam@239
|
27
|
cannam@239
|
28 to
|
cannam@239
|
29 /usr/local/lib/vamp/
|
cannam@239
|
30 or
|
cannam@239
|
31 $HOME/vamp/
|
cannam@239
|
32
|
cannam@239
|
33
|
cannam@239
|
34 Plugin Linkage
|
cannam@239
|
35 --------------
|
cannam@239
|
36
|
cannam@239
|
37 Vamp plugins are distributed as dynamic libraries (.so files). A
|
cannam@239
|
38 properly packaged Vamp plugin library should export exactly one public
|
cannam@239
|
39 symbol, namely the Vamp API entry point vampGetPluginDescriptor.
|
cannam@239
|
40
|
cannam@239
|
41 The default for the GNU linker is to export all of the symbols in the
|
cannam@239
|
42 library. This will work (the host will be able to load the plugin),
|
cannam@239
|
43 but it unnecessarily pollutes the host's symbol namespace, it may
|
cannam@239
|
44 cause symbol collisions in some esoteric circumstances, and it
|
cannam@239
|
45 increases the amount of time the plugin takes to load.
|
cannam@239
|
46
|
cannam@239
|
47 To improve this behaviour, you can instruct the linker to export only
|
cannam@239
|
48 the one required symbol using a linker script. To do this, place the
|
cannam@239
|
49 text
|
cannam@239
|
50
|
cannam@239
|
51 {
|
cannam@239
|
52 global: vampGetPluginDescriptor;
|
cannam@239
|
53 local: *;
|
cannam@239
|
54 };
|
cannam@239
|
55
|
cannam@239
|
56 into a text file, and then use the --version-script option to the
|
cannam@239
|
57 linker to tell it to refer to this file. All other symbols will then
|
cannam@239
|
58 be properly hidden.
|
cannam@239
|
59
|
cannam@239
|
60 The Makefile included in this SDK uses this method to manage symbol
|
cannam@239
|
61 visibility for the included example plugins, using the file
|
cannam@239
|
62 build/vamp-plugin.map. There are other methods that will work too,
|
cannam@239
|
63 but this one is simple and has the advantage of requiring no changes
|
cannam@239
|
64 to the code.
|
cannam@239
|
65
|