OSDN Git Service

Build on linux: final changes and instructions.
authorJakub Pawlowski <jpawlowski@google.com>
Thu, 25 Feb 2016 20:16:31 +0000 (12:16 -0800)
committerAndre Eisenbach <eisenbach@google.com>
Fri, 25 Mar 2016 18:55:23 +0000 (11:55 -0700)
After this patch anyone should be able to build Fluoride on Linux.

Bug: 27324453
Change-Id: I7776be12591b8fed6d38fc0375019606d311ddb9

HACKING [deleted file]
README.md [new file with mode: 0644]
build/BUILD.gn
build/secondary/third_party/libchrome/BUILD.gn
service/BUILD.gn

diff --git a/HACKING b/HACKING
deleted file mode 100644 (file)
index 138d5ec..0000000
--- a/HACKING
+++ /dev/null
@@ -1,43 +0,0 @@
-Building with GN+ninja
-======================
-
-system/bt is buildable using the GN and and ninja buildtools from the Chromium
-project. After setting up these tools, several third_party packages need to be
-set up to build the stack. It's a simple matter of copying (or sym-linking) some
-packages out of AOSP into "system/bt/third_party":
-
-From AOSP:
-1. "platform/external/libevent" => third_party/libevent. The relevant
-  headers here are "event.h" and "event-config.h". event-config.h from
-  external/libevent is only compatible on Android; this means that you will need
-  to generate a new one based on the current platform. Please follow the
-  instructions in external/libevent/README.android for instructions on how to
-  generate this file.
-2. "platform/external/libchrome" => third_party/libchrome. After that, remove
-the BUILD.gn file that's in libchrome/base. This is a legacy file that only
-works inside the Chromium project and we're using our own from secondary build
-sources.
-3. "platform/external/modp_b64" => third_party/modp_b64
-
-From Chromium:
-1. "src/testing/gtest" => third_party/gtest
-
-You will also need a fresh checkout of platform/hardware/libhardware and
-platform/system/core for some include dependencies.
-
-BUILD.gn files for all of these packages have already been set up under
-"system/bt/build/secondary/third_party" (note: we don't have a BUILD.gn file for
-modp_b64 since it comes with its own; as the package was imported into AOSP from
-Chromium). To build, run:
-
-1. 'gn args out/Default': This will prompt you to fill the contents of your
-"args.gn" file. Set the two following variables:
-  a. libhw_include_path=<path to your "platform/hardware/libhardware/include">
-  b. core_include_path=<path to your "platform/system/core/include">
-
-Once done, this will create the *.ninja files for the entire project.
-
-2. 'ninja -C out/Default all': This will build all targets (the shared library,
-executables, tests, etc) and put them in out/Default (or whatever you named the
-output directory. To build an individual target, replace "all" with the target
-of your choice, e.g. 'ninja -C out/Default net_test_osi'.
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..b042e23
--- /dev/null
+++ b/README.md
@@ -0,0 +1,111 @@
+# Fluoride Bluetooth stack
+
+## Building and running on AOSP
+Just build AOSP - Fluoride is there by default.
+
+## Building and running on Linux
+
+Instructions for Ubuntu, tested on 15.10 with GCC 5.2.1.
+
+### Install required libraries
+```sh
+sudo apt-get install libevent-dev
+```
+
+### Install build tools
+
+  - Install [ninja](https://ninja-build.org/) build system
+
+```sh
+sudo apt-get install ninja-build
+```
+or download binary from https://github.com/ninja-build/ninja/releases
+
+  - Install [gn](https://chromium.googlesource.com/chromium/src/tools/gn/) -  meta-build system that generates NinjaBuild files.
+
+Get sha1 of current version from [here](
+https://chromium.googlesource.com/chromium/buildtools/+/master/linux64/gn.sha1) and then download corresponding executable:
+
+```sh
+wget -O gn http://storage.googleapis.com/chromium-gn/<gn.sha1>
+```
+i.e. if sha1 is "3491f6687bd9f19946035700eb84ce3eed18c5fa" (value from 24 Feb 2016) do
+```sh
+wget -O gn http://storage.googleapis.com/chromium-gn/3491f6687bd9f19946035700eb84ce3eed18c5fa
+```
+Then make binary executable and put it on your PATH, i.e.:
+```sh
+chmod a+x ./gn
+sudo mv ./gn /usr/bin
+```
+
+### Download source
+```sh
+mkdir ~/fluoride
+cd ~/fluoride
+git clone https://android.googlesource.com/platform/system/bt
+```
+Then fetch third party dependencies:
+```sh
+cd ~/fluoride/bt
+mkdir third_party
+git clone https://github.com/google/googletest.git
+git clone https://android.googlesource.com/platform/external/libchrome
+git clone https://android.googlesource.com/platform/external/modp_b64
+```
+And third party dependencies of third party dependencies:
+
+```sh
+cd fluoride/bt/third_party/libchrome/base/third_party
+mkdir valgrind
+cd valgrind
+curl https://chromium.googlesource.com/chromium/src/base/+/master/third_party/valgrind/valgrind.h?format=TEXT | base64 -d > valgrind.h
+curl https://chromium.googlesource.com/chromium/src/base/+/master/third_party/valgrind/memcheck.h?format=TEXT | base64 -d > memcheck.h
+```
+Fluoride currently have dependency on some internal Android projects, which also need to be downloaded. This will be removed in future:
+```sh
+cd ~/fluoride
+git clone https://android.googlesource.com/platform/system/core
+git clone https://android.googlesource.com/platform/hardware/libhardware
+git clone https://android.googlesource.com/platform/system/media
+```
+
+### Configure your build
+We need to configure some paths to make the build successful. Run:
+```sh
+cd ~/fluoride/bt
+gn args out/Default
+```
+This will prompt you to fill the contents of your "out/Default/args.gn" file. Make it look like below. Replace "/home/job" with path to your home directory, don't use "~":
+```
+# Build arguments go here. Examples:
+#   is_component_build = true
+#   is_debug = false
+# See "gn args <out_dir> --list" for available build arguments.
+
+libhw_include_path = "/home/job/fluoride/libhardware/include"
+core_include_path = "/home/job/fluoride/core/include"
+audio_include_path = "/home/job/fluoride/media/audio/include"
+```
+
+Then generate your build files by calling
+```sh
+cd ~/fluoride/bt
+gn gen out/Default
+```
+
+### Build
+
+```sh
+cd ~/fluoride/bt
+ninja -C out/Default all
+```
+
+This will build all targets (the shared library, executables, tests, etc) and put them in out/Default. To build an individual target, replace "all" with the target of your choice, e.g. ```ninja -C out/Default net_test_osi```.
+
+### Run
+
+```sh
+cd ~/fluoride/bt/out/Default
+LD_LIBRARY_PATH=./ ./bluetoothtbd -create-ipc-socket=fluoride
+```
index 151869d..42b530c 100644 (file)
@@ -55,7 +55,9 @@ config("linux") {
   cflags_c = [ "-std=c99" ]
 
   cflags_cc = [
-    "-std=c++11",
+#TODO(jpawlowski): we should use same c++ version as Android, which is c++11,
+# but we use some c++14 features. Uncomment when this get fixed in code.:
+    "-std=c++14",
     "-fno-exceptions",
   ]
 
index 48f82c6..167cb40 100644 (file)
@@ -212,18 +212,21 @@ source_set("base_sources") {
 
   include_dirs = [
     "//",
+    "//third_party/googletest/googletest/include",
     "//third_party/libchrome",
     "//third_party/libevent",
     "//third_party/libevent/include",
     "//third_party/libchrome/base",
     "//third_party/modp_b64",
-    "//third_party/gtest/include",
   ]
 }
 
 config("libchrome_config") {
   # libchrome headers need to be able to find themselves.
-  include_dirs = [ "//third_party/libchrome" ]
+  include_dirs = [
+    "//third_party/googletest/googletest/include",
+    "//third_party/libchrome",
+ ]
 }
 
 static_library("base") {
index e8d2fd3..51e58f2 100644 (file)
@@ -48,10 +48,13 @@ source_set("service") {
   include_dirs = [
     "//",
     "//service/common",
-    "//third_party/libchrome",
     "//third_party/modp_b64/modp64",
     libhw_include_path,
   ]
+
+  deps = [
+    "//third_party/libchrome:base"
+  ]
 }
 
 executable("bluetoothtbd") {