| # 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](https://gerrit.googlesource.com/git-repo) 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 |
| |
| | Path | Description | |
| |--------------------------|------------------------------------| |
| | include/ | Includes to be used by device code | |
| | src/ | Implementation sources | |
| | examples/ | Example of device code | |
| | third_party/ | Dependencies | |
| | Makefile, \*.mk files | Build 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](/examples/daemon/README.md) 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 |
| **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](https://source.android.com/source/developing.html) |
| 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. |