Building a worker
Supported compilers and runtimes
Compiling and linking
In order to build a C++ worker, you need to include header files from, and link against, the following:
The Worker SDK in C++. This is distributed as a package containing header files in
<package dir>/include, and a number of static libraries in
<package dir>/lib. You’ll need to link against all the static libraries in the
Generated code. These are the
.ccfiles generated by the SpatialOS schema compiler (
spatial schema) from your
.schemafiles, and their corresponding header files.
The correct order of libraries for linking is as follows:
On some platforms, you need to include compiler and linker options for using threads (e.g. pthreads) and for dynamic loading. An example of flags to include for GCC or Clang is:
-lWorkerSdk -lCoreSdk -lprotobuf -lRakNetLibStatic -lgrpc++ -lgrpc -lgpr -lssl -lz -pthread -ldl
Building for a cloud deployment
After building a project, a certain directory structure is expected when
uploading an assembly.
We don’t provide
generated build scripts,
for C++ workers, so the steps of
the Build task for your worker (within
Create a zip file containing the worker binary with a name matching the value for the
artifact_namespecified in the managed worker configuration, under
Place the zip file in
build/assembly/worker/, so it is picked up when uploading an assembly during
spatial cloud upload <assembly name>.
SpatialOS runs managed workers as part of a cloud deployment in a Linux environment similar to Ubuntu 16.04 LTS. Therefore, you need to build a binary that can be executed in this environment.
If you are developing on Windows or macOS, we suggest installing Ubuntu 16.04 LTS inside a virtual machine using VirtualBox, and using our Linux support to build managed workers. Alternatively, on Windows 10, you can install Ubuntu using the Windows Subsystem for Linux instead of a virtual machine. This is not required for local deployments during development: just for cloud deployments.