Dependencies

From Sirikata Wiki
Jump to: navigation, search

Sirikata relies on a quite a few libraries for its full functionality. This is a list of the required and optional libraries we use and brief descriptions of what they are used for. Sirikata should build with just the required set of libraries, but will be missing some plugins which rely on additional libraries to function.

Required Libraries

  • CMake - version 2.6+ preferred. Generates build scripts.
  • Boost (system, program_options, thread, filesystem, function, bind) - version 1.38+. Wide variety of C++ utilities.
  • PBJ - Protocol buffers and jelly - wrapper around protocol buffers which has additional useful types, used for serializing network messages
    • Protocol Buffers - Serialization backend for PBJ
    • ANTLR - parser framework used for parsing PBJ files
  • prox - efficient proximity query resolver, used by space to notify objects of relevant objects
  • sqlite3 - simple, local, SQL database; currently used by object storage system for durable, persistent storage of object state
  • http-parser - http request/response parsing for CDN
  • liboauthcpp - oauth upload to CDN

Optional Libraries

  • CXXTest - unit tests.
  • libCURL - Used in crash reporting
  • Google Breakpad - crash reporting
  • Google perftools - heap debugging tools

Ogre Graphics Plugin

  • Ogre - rendering engine
    • SDL - used for input
    • Berkelium - offscreen rendering of web browsers, for embedding browsers and UI
    • OpenCollada - loads collada models from the CDN
    • FreeImage - texture loading/saving for mesh processing tools
    • NVTT - texture compression tools

Scripting

  • V8 - Used for Emerson

Physics

  • Bullet - physics simulation engine, enables bullet-physics object host plugin

Storage

  • sqlite - Simple, local object host storage
  • cassandra/thrift - Scalable object host storage

Audio

  • SDL - basic audio output
  • FFmpeg - audio decoding

Space Server

  • HIRedis - message routing table
  • CRAQ - alternative routing table implementation

Getting Started on a New Platform

Note "New Platform" can mean either a completely new platform or a new version of a currently supported platform.

Getting all the dependencies up and running on a new platform can be a real challenge. We suggest starting with an existing install script and modifying it to work with your platform.

  • Figure out which platform is closest to the one you're on.
  • Checkout the corresponding dependencies repository, which will contain an install script. These are maintained separately from the main source tree since they refer to potentially large archives that are maintained beside them. See sirikata/Makefile to see how these are checked out from other repositories.
  • Modify the install script as necessary to build all the dependencies. The script should do the following:
    • Possibly tries to install system provided packages that we need
    • Extracts binary packages locally in your tree
    • Compiles source packages and installs them locally in your tree
  • Please contribute the new script back. If you can automatically determine which platform you're on and reuse most of the script, that is preferable. If a completely different script is required a new dependency repository can be setup.
    • A script being contributed back should support a number of targets:
      • minimal-depends: the minimum dependencies to get a build running, e.g. enough to be able to run a space (no graphics, no advanced scripting features, etc).
      • minimal-graphics-depends: minimal-depends + enough to get a client with graphics displayed. The graphics plugin does not need to be fully featured.
      • depends: The normal set of dependencies that an end user would want -- graphics, scripting language support, physics simulation, etc.
      • full-depends: depends + performs actions that require root, e.g. installing system provided libraries