Clone this repo:
  1. c1e1a97 Stop hard coding gtest/gmock things. am: 581f4d4b27 am: d4eabd105d by Dan Albert · 8 years ago main master n-iot-preview-4 nougat-iot-release o-iot-preview-5 o-mr1-iot-preview-6 o-preview sdk-release android-n-iot-preview-4 android-n-iot-release-ihome-igv1 android-n-iot-release-lg-thinq-wk7 android-n-iot-release-polk-at1 android-n-iot-release-smart-display android-n-iot-release-smart-display-r2 android-n-mr2-preview-1 android-n-mr2-preview-2 android-o-iot-preview-5 android-o-mr1-iot-preview-6 android-o-preview-1 android-o-preview-2 android-o-preview-3 android-o-preview-4 android-wear-o-preview-3 android-wear-o-preview-4
  2. d541929 Stop hard coding gtest/gmock things. am: 581f4d4b27 am: d4eabd105d by Dan Albert · 8 years ago
  3. d4eabd1 Stop hard coding gtest/gmock things. am: 581f4d4b27 by Dan Albert · 8 years ago android-n-mr1-preview-1 android-n-mr1-preview-2
  4. 581f4d4 Stop hard coding gtest/gmock things. by Dan Albert · 8 years ago
  5. 2c02e87 Merge remote-tracking branch \\\\'weave/master\\\\' into \\\\'weave/aosp-master\\\\' am: 7aaba04460 am: 50cf4188d8 am: 9454fc7df0 by Luis Hector Chavez · 8 years ago

Overview

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

Sources

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
PATH=~/bin:$PATH

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

PathDescription
include/Includes to be used by device code
src/Implementation sources
examples/Example of device code
third_party/Dependencies
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 \
  libtool

Prerequisites

Common

  • 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

Compiling

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.

Cross-compiling

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++ \
  AR=/opt/vendor/bin/arm-linux-ar

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

Testing

Run tests

make test
make export-test

or

make testall

Cross-testing

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.