1#
2#  Copyright 2015 Google, Inc.
3#
4#  Licensed under the Apache License, Version 2.0 (the "License");
5#  you may not use this file except in compliance with the License.
6#  You may obtain a copy of the License at:
7#
8#  http://www.apache.org/licenses/LICENSE-2.0
9#
10#  Unless required by applicable law or agreed to in writing, software
11#  distributed under the License is distributed on an "AS IS" BASIS,
12#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13#  See the License for the specific language governing permissions and
14#  limitations under the License.
15#
16
17# This is the root build file for GN. GN will start processing by loading this
18# file, and recursively load all dependencies until all dependencies are either
19# resolved or known not to exist (which will cause the build to fail). So if
20# you add a new build file, there must be some path of dependencies from this
21# file to your new one or GN won't know about it.
22
23group("all") {
24  deps = [ ":bluetooth" ]
25
26  if (use.test) {
27    deps += [ ":bluetooth_tests" ]
28  }
29}
30
31# This pulls in main/BUILD.gn and all of its dependencies.
32group("bluetooth") {
33  deps = [
34    "//bt/main:bluetooth",
35    "//bt/main:bluetooth-static",
36    #"//bt/service:bluetoothtbd",
37  ]
38}
39
40if (use.test) {
41  group("bluetooth_tests") {
42    deps = [
43      "//bt/btcore:net_test_btcore",
44      "//bt/common:bluetooth_test_common",
45      "//bt/profile/avrcp:net_test_avrcp",
46      "//bt/service:bluetoothtbd_test",
47      "//bt/stack:net_test_btm_iso",
48      "//bt/types:net_test_types",
49
50      #"//bt/packet:net_test_btpackets",
51    ]
52  }
53}
54
55if (host_cpu == target_cpu && host_os == target_os) {
56  group("tools") {
57    deps = [
58      "//bt/gd/dumpsys/bundler:bluetooth_flatbuffer_bundler",
59      "//bt/gd/packet/parser:bluetooth_packetgen",
60    ]
61  }
62}
63
64if (defined(use.android) && use.android) {
65  group("android_bluetooth_tests") {
66    deps = [
67      "//bt/device:net_test_device",
68      "//bt/hci:net_test_hci",
69      "//bt/osi:net_test_osi",
70      "//bt/test/suite:net_test_bluetooth",
71    ]
72  }
73}
74
75config("target_defaults") {
76  include_dirs = [
77    "//bt",
78    "//bt/linux_include",
79    "//bt/types",
80    "//bt/include",
81
82    # For flatbuffer generated headers
83    "${root_gen_dir}/bt/gd/",
84    "${root_gen_dir}/bt/gd/dumpsys/bundler",
85  ]
86
87  cflags = [
88    "-fPIC",
89    "-Wno-non-c-typedef-for-linkage",
90    "-Wno-unreachable-code-return",
91    "-Wno-defaulted-function-deleted",
92    "-Wno-gnu-variable-sized-type-not-at-end",
93    "-Wno-format-nonliteral",
94    "-Wno-inconsistent-missing-override",
95    "-Wno-unreachable-code",
96    "-Wno-range-loop-construct",
97    "-Wno-reorder-init-list",
98    "-Wno-unused-function",
99    "-Wno-unused-result",
100    "-Wno-unused-variable",
101    "-Wno-unused-const-variable",
102    "-Wno-format",
103    "-Wno-pessimizing-move",
104    "-Wno-unknown-warning-option",
105    "-Wno-final-dtor-non-final-class",
106  ]
107
108  cflags_cc = [
109    "-std=c++17",
110  ]
111
112  defines = [
113    "HAS_NO_BDROID_BUILDCFG",
114    "OS_GENERIC",
115    "OS_LINUX_GENERIC",
116    "TARGET_FLOSS",
117    "USE_LINUX_HCI_SOCKET",
118    "EXPORT_SYMBOL=__attribute__((visibility(\"default\")))",
119    "FALLTHROUGH_INTENDED=[[clang::fallthrough]]",
120  ]
121
122  # If not configured as a dynamic library, default to static library
123  if (!(defined(use.bt_dynlib) && use.bt_dynlib)) {
124    defines += [
125      "STATIC_LIBBLUETOOTH",
126    ]
127  }
128
129  if (!(defined(use.bt_nonstandard_codecs) && use.bt_nonstandard_codecs)) {
130    defines += [ "EXCLUDE_NONSTANDARD_CODECS" ]
131  }
132
133  configs = [ ":external_libchrome" ]
134}
135
136group("libbt-platform-protos-lite") {
137  deps = [
138    "//external/proto_logging/stats/enums/bluetooth:libbt-platform-protos-lite",
139  ]
140}
141
142# Configurations to use as dependencies for GN build
143config("external_gtest") {
144  configs = [
145    ":pkg_gtest",
146    ":pkg_gmock",
147  ]
148}
149
150config("external_gtest_main") {
151  configs = [ ":pkg_gtest_main" ]
152}
153
154config("external_gmock_main") {
155  configs = [ ":pkg_gmock_main" ]
156}
157
158config("external_libchrome") {
159  configs = [ ":pkg_libchrome" ]
160}
161
162config("external_modp_b64") {
163  configs = [ ":pkg_modp_b64" ]
164}
165
166config("external_tinyxml2") {
167  configs = [ ":pkg_tinyxml2" ]
168}
169
170config("external_flatbuffers") {
171  lib_dirs = [ "${libdir}" ]
172
173  libs = [ "flatbuffers" ]
174}
175
176# Package configurations to extract dependencies from env
177pkg_config("pkg_gtest") {
178  pkg_deps = [ "gtest" ]
179}
180
181pkg_config("pkg_gtest_main") {
182  pkg_deps = [ "gtest_main" ]
183}
184
185pkg_config("pkg_gmock") {
186  pkg_deps = [ "gmock" ]
187}
188
189pkg_config("pkg_gmock_main") {
190  pkg_deps = [ "gmock_main" ]
191}
192
193pkg_config("pkg_libchrome") {
194  pkg_deps = [ "libchrome" ]
195}
196
197pkg_config("pkg_modp_b64") {
198  pkg_deps = [ "libmodp_b64" ]
199}
200
201pkg_config("pkg_tinyxml2") {
202  pkg_deps = [ "tinyxml2" ]
203}
204
205# To use non-standard codecs (i.e. ldac, aac, aptx), set this use flag when
206# building. These codecs may have licensing issues that need to be resolved
207# first.
208if (defined(use.bt_nonstandard_codecs) && use.bt_nonstandard_codecs) {
209  config("external_aac") {
210    configs = [ ":pkg_aac" ]
211  }
212
213  pkg_config("pkg_aac") {
214    pkg_deps = [ "fdk-aac" ]
215  }
216
217  config("external_libldac") {
218    configs = [
219      ":pkg_libldacBT_enc",
220      ":pkg_libldacBT_abr",
221    ]
222  }
223
224  pkg_config("pkg_libldacBT_enc") {
225    pkg_deps = [ "ldacBT-enc" ]
226  }
227
228  pkg_config("pkg_libldacBT_abr") {
229    pkg_deps = [ "ldacBT-abr" ]
230  }
231}
232