summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Abhishek Pandit-Subedi <abhishekpandit@google.com> 2021-07-13 15:20:57 -0700
committer Abhishek Pandit-Subedi <abhishekpandit@google.com> 2021-07-14 10:15:26 -0700
commit1357635461d5c83bb1daa32c4937200dd174ba04 (patch)
treef55867aad764ecd7a60c271758b5c26fc9323b33
parent606156590c0a9690e05be6c4b7ea73fed035d407 (diff)
floss: Update README with newer build instructions
Bug: 193585779 Test: None Tag: #floss Change-Id: If6909f59e110916a38273d08c7103a40f9fb5fe5
-rw-r--r--README.md90
-rwxr-xr-xsystem/build/install_deps.sh58
2 files changed, 69 insertions, 79 deletions
diff --git a/README.md b/README.md
index 6b90075a91..f4016073fd 100644
--- a/README.md
+++ b/README.md
@@ -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