Convert a Vamp Plugin to a JS Module » History » Version 2
Chris Cannam, 2017-06-20 09:43 AM
1 | 1 | Chris Cannam | h1. Convert a Vamp Plugin to a JS Module |
---|---|---|---|
2 | 1 | Chris Cannam | |
3 | 1 | Chris Cannam | This page will describe how to take an existing Vamp plugin library, in the form of C++/C source code, and recompile it into a Javascript module that provides the "Piper":/projects/piper interface. |
4 | 1 | Chris Cannam | |
5 | 1 | Chris Cannam | The process is a bit tricky, but it should only have to be done once for each plugin library, as the Javascript build is portable (unlike native builds of the original plugins which have to be re-done for each platform). |
6 | 1 | Chris Cannam | |
7 | 1 | Chris Cannam | The process is also complicated by any third-party library code that the plugin may use. It's not possible to take an existing native library file (whether .a, .lib, .so, .dylib or .dll) and convert that to Javascript -- you have to add the original library source files to your build. This could be tricky to do if the library has any particular configuration requirements. |
8 | 2 | Chris Cannam | |
9 | 2 | Chris Cannam | h4. An Illustrative Docker file |
10 | 2 | Chris Cannam | |
11 | 2 | Chris Cannam | To accompany this explanation, you can "find an example Docker file here":https://github.com/piper-audio/piper-vamp-js/blob/master/examples/docker/Dockerfile which actually carries out the process of converting and building a plugin library within a Docker container. This is not an especially convenient way to do it, but it should make explicit all of the necessary steps in a more-or-less reproducible way. |
12 | 2 | Chris Cannam | |
13 | 2 | Chris Cannam | h4. Prerequisites |
14 | 2 | Chris Cannam | |
15 | 2 | Chris Cannam | You will need the following: |
16 | 2 | Chris Cannam | |
17 | 2 | Chris Cannam | * A typical Unix-like system - this has been tested using Arch Linux and macOS |
18 | 2 | Chris Cannam | * A sufficiently recent version of the Emscripten C++-to-Javascript compiler |
19 | 2 | Chris Cannam | * Typical native C/C++ build tools |
20 | 2 | Chris Cannam | * Node.js environment, to run the tests |
21 | 2 | Chris Cannam | |
22 | 2 | Chris Cannam | You will need to have the following repositories checked out. The build process expects that all of these will be checked out into a common parent directory. |
23 | 2 | Chris Cannam | |
24 | 2 | Chris Cannam | * "Piper":/projects/piper - basic schema |
25 | 2 | Chris Cannam | * "Piper Vamp C++":/projects/piper-cpp - supporting C++ code |
26 | 2 | Chris Cannam | * "Piper Vamp JS":/projects/piper-vamp-js - Javascript adapter code |
27 | 2 | Chris Cannam | * "Vamp Plugin SDK":/projects/vamp-plugin-sdk - Vamp SDK used by both of the last two |
28 | 2 | Chris Cannam | * "Vamp Test Plugin":/projects/vamp-test-plugin - Plugin used to run tests when building the adapter code |
29 | 2 | Chris Cannam | * Your own plugin library's source code |
30 | 2 | Chris Cannam | |
31 | 2 | Chris Cannam | Also create a new directory for the JS module to be compiled in. You will need to provide a Makefile and a main file (in C++, to be cross-compiled to JS along with everything else) for this module so it makes sense to have a dedicated directory (and likely a version control repository) to put them in. |