libWeave is the library with device side implementation of Weave protocol.


Sources are located in git repository at https://weave.googlesource.com/weave/libweave/

Install Repo

Make sure you have a bin/ directory in your home directory and that it is included in your path:

mkdir ~/bin

Download the Repo tool and ensure that it is executable:

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

Checkout code

mkdir ~/weave
cd ~/weave
repo init -u https://weave.googlesource.com/weave/manifest
repo sync

This checks out libweave and its dependencies into the ~/weave directory.

libweave Directory structure

include/Includes to be used by device code
src/Implementation sources
examples/Example of device code
Makefile, *.mk filesBuild files

Quick start on Debian/Ubuntu

Install prerequisites

sudo apt-get update
sudo apt-get install \
  autoconf \
  automake \
  binutils \
  cmake \
  g++ \
  hostapd \
  libavahi-client-dev \
  libcurl4-openssl-dev \
  libevent-dev \
  libexpat1-dev \
  libssl-dev \



  • autoconf
  • automake
  • binutils
  • libtool
  • libexpat1-dev

For tests

  • cmake
  • gtest (included; see third_party/googletest/googletest/)
  • gmock (included; see third_party/googletest/googlemock/)

For examples

  • cmake
  • hostapd
  • libavahi-client-dev
  • libcurl4-openssl-dev
  • libevhtp (included; see third_party/libevhtp/)
  • libevent-dev


From the libweave directory:

The make --jobs/-j flag is encouraged, to speed up build time. For example

make -j

which happens to be the same as

make all -j

Build library

make out/Debug/libweave.so

Build examples

make all-examples

See the examples README for details.


libweave users

In order to cross-compile, all you need to configure is CC/CXX/AR.

make CC=your-cc CXX=your-cxx AR=your-ar

So if you have a toolchain in a path like /opt/vendor/bin/arm-linux-gcc, do:

make \
  CC=/opt/vendor/bin/arm-linux-gcc \
  CXX=/opt/vendor/bin/arm-linux-g++ \

libweave developers

Note: This is only for developers who are hacking on libweave itself.

The build supports transparently downloading & using a few cross-compilers. Just add cross-<arch> to the command line in addition to the target you want to actually build.

This will cross-compile for an armv7 (hard float) target:

make cross-arm all-libs

This will cross-compile for a mips (little endian) target:

make cross-mipsel all-libs


Run tests

make test
make export-test


make testall


The build supports using qemu to run non-native tests.

This will run armv7 tests through qemu:

make cross-arm testall

Making changes

The Android Developing site has a lot of good tips for working with git and repo in general. The tips below are meant as a quick cheat sheet rather than diving deep into relevant topics.

Configure git

Make sure to have correct user in local or global config e.g.:

git config --local user.name "User Name"
git config --local user.email user.name@example.com

Start local branch

repo start <branch name> .

Edit code and commit locally e.g.

git commit -a -v

Upload CL

repo upload .

Request code review

Go to the url from the output of repo upload and add reviewers.