Creating an Axl plugin¶
This tutorial describes how to construct a package with a plugin for axl.
We assume that axl has been built in the directory build-axl.
Installation¶
The first step is to get the package mypkg, which provides a template for the
package and plugin structure:
git clone https://gitlab.inria.fr/axl/mypkg.git mypkg
The package provides the script mmk is written with perl, which should be available in your environment. The perl module File/Find/Rule should also be installed:
sudo perl -MCPAN -e'install File::Find::Rule'
To be able to use the script mmk, set up the path:
cd mypkg
export PATH=$PATH:$PWD/mypkg/bin
To check that it is working correctly, you can type:
mmk -help
How to structure the package¶
We first create a package with its configuration files, using the script mmk. We create a directory newpkg that we are going to populate with configuration and source files:
mmk -pkg newpkg -with src,axl
This creates a directory newpkg with the following structure:
.
└── newpkg
├── CMakeLists.txt
├── axl
│ └── CMakeLists.txt
└── src
└── CMakeLists.txt
We have a configuration file CMakeLists.txt for the package newpkg and subdirectories
axl, src with their own configuration files CMakeLists.txt.
The directory axl is for the plugins of axl.
The directory src is for the libraries of the package newpkg.
Of course, the libraries can be used by the plugins of the package as we will see.
Configuration¶
The configuration is done with cmake. A good practice is to have a build directory, separated from the source directory. We create this build directory newpkg-build
at the same level as newpkg:
mkdir newpkg-build
The structure of the directories is:
.
├── newpkg
│ ├── CMakeLists.txt
│ ├── axl
│ │ └── CMakeLists.txt
│ └── src
│ └── CMakeLists.txt
└── newpkg-build
We now configure the package in the folder newpkg-build as follows:
cd newpkg-build
cmake ../newpkg -DAxl_DIR=$PWD/../../build-axl
The option -DAxl_DIR=/path/to/build-axl specifies where axl has been built.
Warning
The full path to the directory build-axl should be given in this option of cmake.
We can now check that the compilation builds correctly:
make
Nothing is compiled so far, since we have not yet added any source file.
How to create a plugin for Axl¶
We are going now to create a plugin newTools. For that purpose, we first create
a directory with this name in newpkg/axl :
mmk -in ../newpkg/axl -plugin newTools
The directory newTools has been added in newpkg/axl with its configuration file. It contains all the files necessary to build the plugin newTools:
the header file newToolsPlugin.h, the main file newToolsPlugin.cpp, the file newToolsPlugin.json describing the plugin and the export file newToolsExport.h (for Windows export mechanism).
The structure of the package is now:
newpkg
├── CMakeLists.txt
├── axl
│ ├── CMakeLists.txt
│ └── newTools
│ ├── CMakeLists.txt
│ ├── newToolsExport.h
│ ├── newToolsPlugin.cpp
│ ├── newToolsPlugin.h
│ └── newToolsPlugin.json
└── src
└── CMakeLists.txt
How to add a new process in the Axl plugin¶
Now we create a new process, called myProcess:
mmk -in ../newpkg/axl/newTools -process myProcess
The files myProcess[.h|.cpp] contain the corresponding process class.
The main file of the plugin newToolPlugin.cpp contains an initialize function, which has been updated to register this process.
newpkg
├── CMakeLists.txt
├── axl
│ ├── CMakeLists.txt
│ └── newTools
│ ├── CMakeLists.txt
│ ├── myProcess.cpp
│ ├── myProcess.h
│ ├── newToolsExport.h
│ ├── newToolsPlugin.cpp
│ ├── newToolsPlugin.h
│ └── newToolsPlugin.json
└── src
└── CMakeLists.txt
We can now compile these files and generate the plugin libmyToolsPlugin, which is put in the folder ${AXL_PLUGIN_DIR}:
cmake .
make
Warning
cmake has to be run again, to update the list of files to compile, when new files are added.
Executing axl, we can see now in the I/tool tab, under the tag Process
a function called myProcess. Double-cliking on it and on the button run should produce a red sphere in the view of axl.
The interface of the process is described by the method form. See here for more details.
The process can also be stored in file, such as myprocess.axl (see mypkg/data):
<axl>
<process type="myProcess" status="dynamic" name="Proc1">
<output name="Output1" color= "255 255 0"/>
</process>
</axl>
It can be evaluated by reading the file axl myprocess.axl. Notice that the color of the output has changed, due to the color attribute in <output name="Output1" color= "255 255 0"/>.