diff options
author | 2021-07-13 15:20:57 -0700 | |
---|---|---|
committer | 2021-07-14 10:15:26 -0700 | |
commit | 1357635461d5c83bb1daa32c4937200dd174ba04 (patch) | |
tree | f55867aad764ecd7a60c271758b5c26fc9323b33 | |
parent | 606156590c0a9690e05be6c4b7ea73fed035d407 (diff) |
floss: Update README with newer build instructions
Bug: 193585779
Test: None
Tag: #floss
Change-Id: If6909f59e110916a38273d08c7103a40f9fb5fe5
-rw-r--r-- | README.md | 90 | ||||
-rwxr-xr-x | system/build/install_deps.sh | 58 |
2 files changed, 69 insertions, 79 deletions
@@ -13,17 +13,21 @@ Instructions for a Debian based distribution: * Bison 3.x.x (tested with 3.0.x, 3.2.x and 3.7.x) You'll want to download some pre-requisite packages as well. If you're currently -configured for AOSP development, you should have all required packages. -Otherwise, you can use the following apt-get list: +configured for AOSP development, you should have most required packages. +Otherwise, you can use the following apt-get list or use the bootstrap script +(see below) to get a list of packages missing on your system: ```sh sudo apt-get install repo git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib \ - x11proto-core-dev libx11-dev lib32z-dev libncurses5 \ + x11proto-core-dev libx11-dev libncurses5 \ libgl1-mesa-dev libxml2-utils xsltproc unzip liblz4-tool libssl-dev \ libc++-dev libevent-dev \ - flatbuffers-compiler libflatbuffers1 \ - openssl openssl-dev + flatbuffers-compiler libflatbuffers1 openssl \ + libflatbuffers-dev libtinyxml2-dev \ + libglib2.0-dev libevent-dev libnss3-dev libdbus-1-dev \ + libprotobuf-dev ninja-build generate-ninja protobuf-compiler \ + libre2-9 ``` You will also need a recent-ish version of Rust and Cargo. Please follow the @@ -37,14 +41,20 @@ cd ~/fluoride git clone https://android.googlesource.com/platform/packages/modules/Bluetooth/system ``` -Install dependencies (require sudo access). This adds some Ubuntu dependencies -and also installs GN (which is the build tool we're using). +### Use bootstrap.py +`bootstrap.py` is a helper script provided to set up your build environment. It +will set up your build staging directory and also make sure you have all +required system packages to build (should work on Debian and Ubuntu). You will +still need to build some unpackaged dependencies. + +To use it: ```sh -cd ~/fluoride/bt -build/install_deps.sh +./bootstrap.py --base-dir=path/to/staging/dir --bt-dir=path/to/bt/dir ``` +### Build dependencies + The following third-party dependencies are necessary but currently unavailable via a package manager. You may have to build these from source and install them to your local environment. @@ -52,24 +62,59 @@ to your local environment. * libchrome * modp_b64 -We provide a script to produce debian packages for those components, please -follow the instructions in build/dpkg/README.txt. +We provide a script to produce debian packages for those components. Please +see the instructions in build/dpkg/README.txt for more details. + +```sh +cd build/dpkg +mkdir -p outdir/{modp_b64,libchrome} + +# Build and install modp_b64 +pushd modp_b64 +./gen-src-pkg.sh $(readlink -f ../outdir/modp_b64) +popd +sudo dpkg -i outdir/modp_b64/*.dpkg + +# Build and install libchrome +pushd libchrome +./gen-src-pkg.sh $(readlink -f ../outdir/libchrome) +popd +sudo dpkg -i outdir/libchrome/*.dpkg +``` The googletest packages provided by Debian/Ubuntu (libgmock-dev and libgtest-dev) do not provide pkg-config files, so you can build your own googletest using the steps below: +```sh +git clone https://github.com/google/googletest.git -b release-1.10.0 +cd googletest # Main directory of the cloned repository. +mkdir build # Create a directory to hold the build output. +cd build +cmake .. # Generate native build scripts for GoogleTest. +sudo make install -DCMAKE_INSTALL_PREFIX=/usr + +# Optional steps if pkgconfig isn't installed to desired location +# Modify the source (/usr/lib/x86_64-linux-gnu) and target (/usr/lib) based on +# your local installation. +for f in $(ls /usr/lib/x86_64-linux-gnu/pkgconfig/{gtest,gmock}*); do \ + ln -sf $f /usr/lib/pkgconfig/$(basename $f); +done ``` -$ git clone https://github.com/google/googletest.git -b release-1.10.0 -$ cd googletest # Main directory of the cloned repository. -$ mkdir build # Create a directory to hold the build output. -$ cd build -$ cmake .. # Generate native build scripts for GoogleTest. -$ sudo make install -DCMAKE_INSTALL_PREFIX=/usr + +### Rust dependencies + +**Note**: Handled by bootstrap script. + +Run the following to install Rust dependencies: +``` +cargo install cxxbridge-cmd ``` ### Stage your build environment +**Note**: Handled by bootstrap script. + For host build, we depend on a few other repositories: * [Platform2](https://chromium.googlesource.com/chromiumos/platform2/) * [Rust crates](https://chromium.googlesource.com/chromiumos/third_party/rust_crates/) @@ -89,7 +134,10 @@ ln -s $(readlink -f ${PROTO_LOG_DIR}) ${STAGING_DIR}/external/proto_logging ### Build We provide a build script to automate building assuming you've staged your build -environment already as above. +environment already as above. At this point, make sure you have all the +pre-requisites installed (i.e. bootstrap script and other dependencies above) or +you will see failures. In addition, you may need to set a `--libdir=` if your +libraries are not stored in `/usr/lib64` by default. ```sh @@ -114,9 +162,9 @@ Currently, Rust builds are a separate stage that uses Cargo to build. See ### Run By default on Linux, we statically link libbluetooth so you can just run the -binary directly: +binary directly. By default, it will try to run on hci0 but you can pass it +--hci=N, where N corresponds to /sys/class/bluetooth/hciN. ```sh -cd ~/fluoride/bt/out/Default -./bluetoothtbd -create-ipc-socket=fluoride +$OUTPUT_DIR/debug/btadapterd --hci=$HCI INIT_gd_hci=true ``` diff --git a/system/build/install_deps.sh b/system/build/install_deps.sh deleted file mode 100755 index 4826b385f1..0000000000 --- a/system/build/install_deps.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -CLANG_PACKAGE=clang -GNSHA1_URL="https://chromium.googlesource.com/chromium/buildtools/\ - +/central/linux64/gn.sha1?format=TEXT" - -# Check if clang is already installed on current system -clang_path=`which clang` -if [ -f "$clang_path" ]; then - # if clang binary is avalable, check its version - clang_version=$($clang_path --version | grep clang | sed "s/.*version\s*\([0-9]*\.[0-9]*\).*/\1/") - IFS="." read -ra clang_version_array <<< "$clang_version" - clang_version_major=${clang_version_array[0]} - clang_version_minor=${clang_version_array[1]} - # if the version is greater than 3.5 then do not install clang here - if [ $clang_version_major -ge 3 ] && [ $clang_version_minor -ge 5 ]; then - echo "Detected clang $clang_version" - CLANG_PACKAGE="" - fi -fi - -if [ ! -z "$CLANG_PACKAGE" ]; then - # Try to find clang from a known list - for clang_version in 12.0 11.0 - do - clang_path=`which clang-$clang_version` - if [ -f "$clang_path" ]; then - echo "Detected clang-$clang_version" - CLANG_PACKAGE="" - break - fi - done -fi - -if [ ! -z "$CLANG_PACKAGE" ]; then - echo "clang not found on current system, installing" - if [ -f /etc/lsb-release ]; then - # Ubuntu - ubuntu_version=$(lsb_release --release --short) - IFS="." read -ra ubuntu_version_array <<< "$ubuntu_version" - ubuntu_version_major=${ubuntu_version_array[0]} - ubuntu_version_minor=${ubuntu_version_array[1]} - if [ $ubuntu_version_major -lt 15 ]; then - echo "Choose clang-3.8 for Ubuntu 14 and below" - CLANG_PACKAGE=clang-3.8 - fi - fi -fi - -sudo apt-get -y install $CLANG_PACKAGE libevent-dev libc++-dev libc++abi-dev \ - ninja-build libflatbuffers-dev libtinyxml2-dev - -gn_path=`which gn` -if [ -z $gn_path ]; then - gnsha1=$(curl $GNSHA1_URL | base64 -d) - wget -O gn http://storage.googleapis.com/chromium-gn/$gnsha1 - chmod a+x ./gn - sudo mv ./gn /usr/bin/ -fi |