blob: 6d0b2cc4a01f63fde98084732943e63746d4ed2e [file] [log] [blame]
Misha Efimov1770a1b2018-01-11 15:27:271# Copyright 2017 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
Misha Efimova0b0fe612018-10-02 14:23:445import("//build/buildflag_header.gni")
Misha Efimov0edcce32018-10-03 19:09:296import("//build/toolchain/toolchain.gni")
7import("//build/util/lastchange.gni")
Misha Efimov1770a1b2018-01-11 15:27:278import("//build/util/process_version.gni")
9import("//build/util/version.gni")
Misha Efimov0edcce32018-10-03 19:09:2910import("//components/cronet/native/include/headers.gni")
11import("//components/grpc_support/include/headers.gni")
Misha Efimov1770a1b2018-01-11 15:27:2712import("//testing/test.gni")
13
Misha Efimova0b0fe612018-10-02 14:23:4414declare_args() {
15 # If set to true, this will remove histogram manager to reduce binary size.
Misha Efimov0edcce32018-10-03 19:09:2916 disable_histogram_support = is_mac || is_win
Misha Efimova0b0fe612018-10-02 14:23:4417}
18
19# Disable histogram support is not allowed on Android.
20assert(!disable_histogram_support || !is_android)
21
22buildflag_header("cronet_buildflags") {
23 header = "cronet_buildflags.h"
24 flags = [ "DISABLE_HISTOGRAM_SUPPORT=$disable_histogram_support" ]
25}
26
Misha Efimov1770a1b2018-01-11 15:27:2727process_version("cronet_version_header") {
28 template_file = "//components/cronet/version.h.in"
29 sources = [
30 "//chrome/VERSION",
31 ]
32 output = "$target_gen_dir/version.h"
33 extra_args = [
34 "-e",
35 "VERSION_FULL=\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)",
36 ]
37}
38
39# Cronet common implementation.
40source_set("cronet_common") {
41 sources = [
42 "cronet_global_state.h",
43 "cronet_prefs_manager.cc",
44 "cronet_prefs_manager.h",
Misha Efimovd16a27a2018-05-29 15:03:4445 "cronet_upload_data_stream.cc",
46 "cronet_upload_data_stream.h",
Misha Efimovc1731b02018-01-16 21:46:5147 "cronet_url_request.cc",
48 "cronet_url_request.h",
Misha Efimov1770a1b2018-01-11 15:27:2749 "cronet_url_request_context.cc",
50 "cronet_url_request_context.h",
51 "histogram_manager.cc",
52 "histogram_manager.h",
53 "host_cache_persistence_manager.cc",
54 "host_cache_persistence_manager.h",
55 "stale_host_resolver.cc",
56 "stale_host_resolver.h",
57 "url_request_context_config.cc",
58 "url_request_context_config.h",
59 ]
60 deps = [
Misha Efimova0b0fe612018-10-02 14:23:4461 ":cronet_buildflags",
Misha Efimov1770a1b2018-01-11 15:27:2762 ":cronet_version_header",
63 "//base",
64 "//components/metrics:metrics",
65 "//components/prefs:prefs",
66 "//net",
67 "//third_party/metrics_proto",
68 ]
Misha Efimova0b0fe612018-10-02 14:23:4469
70 if (disable_histogram_support) {
71 sources -= [
72 "histogram_manager.cc",
73 "histogram_manager.h",
74 ]
75 deps -= [
76 "//components/metrics:metrics",
77 "//third_party/metrics_proto",
78 ]
79 }
Misha Efimov1770a1b2018-01-11 15:27:2780}
81
Caleb Raitto95c93c02019-01-23 17:49:1282source_set("metrics_util") {
83 sources = [
84 "metrics_util.cc",
85 "metrics_util.h",
86 ]
87 deps = [
88 "//base",
89 ]
90}
91
Misha Efimov1770a1b2018-01-11 15:27:2792# Unit tests for Cronet common implementation.
93source_set("cronet_common_unittests") {
94 testonly = true
95
96 deps = [
97 ":cronet_common",
98 "//components/prefs:test_support",
99 "//net:test_support",
100 ]
101
102 sources = [
103 "histogram_manager_unittest.cc",
104 "host_cache_persistence_manager_unittest.cc",
Misha Efimov1770a1b2018-01-11 15:27:27105 "stale_host_resolver_unittest.cc",
106 "url_request_context_config_unittest.cc",
107 ]
Misha Efimova0b0fe612018-10-02 14:23:44108
109 if (disable_histogram_support) {
110 sources -= [ "histogram_manager_unittest.cc" ]
111 }
Misha Efimov1770a1b2018-01-11 15:27:27112}
Wez115d4312018-02-17 04:05:19113
114# For platforms on which the native Cronet library is used, build the library,
115# a cronet_tests binary that exercises it, and a unit-tests binary.
116# Android and iOS have their own platform-specific rules to build Cronet.
John Budorickbc3571aa2019-04-25 02:20:06117if (is_android) {
118 group("cronet_package") {
119 testonly = true
120 deps = [
121 "//components/cronet/android:cronet_package_android",
122 ]
123 }
124} else if (is_ios) {
125 group("cronet_package") {
126 deps = [
127 "//components/cronet/ios:cronet_package_ios",
128 ]
129 }
130} else {
Misha Efimovc5cf88e62018-04-04 20:02:33131 config("shared_library_public_config") {
132 if (is_mac && !is_component_build) {
133 # Executable targets that depend on the shared libraries below need to have
134 # the rpath setup in non-component build configurations.
135 ldflags = [
136 "-rpath",
137 "@executable_path/",
138 ]
139 }
140 }
141
Misha Efimov5e6f91c2018-10-12 17:56:27142 _cronet_shared_lib_name = "cronet.$chrome_version_full"
143 _cronet_shared_lib_file_name =
144 "$shlib_prefix$_cronet_shared_lib_name$shlib_extension"
145
Wez115d4312018-02-17 04:05:19146 shared_library("cronet") {
Misha Efimov5e6f91c2018-10-12 17:56:27147 output_name = _cronet_shared_lib_name
148
Wez115d4312018-02-17 04:05:19149 deps = [
150 "//base",
Wez115d4312018-02-17 04:05:19151 "//components/cronet:cronet_common",
152 "//components/cronet/native:cronet_native_impl",
153 "//net",
154 ]
155
156 sources = [
157 "cronet_global_state_stubs.cc",
158 ]
Misha Efimovc5cf88e62018-04-04 20:02:33159
160 if (is_mac && !is_component_build) {
161 ldflags = [
162 "-install_name",
Misha Efimovc79080372018-10-27 19:36:50163 "@executable_path/$_cronet_shared_lib_file_name",
Misha Efimovc5cf88e62018-04-04 20:02:33164 ]
165 public_configs = [ ":shared_library_public_config" ]
166 }
Wez115d4312018-02-17 04:05:19167 }
168
169 test("cronet_tests") {
Wez115d4312018-02-17 04:05:19170 deps = [
Misha Efimov41fba7252018-09-05 17:02:58171 ":cronet_common",
Wez087612362018-02-26 21:37:41172 "//base",
173 "//base/test:test_support",
Misha Efimov41fba7252018-09-05 17:02:58174 "//components/cronet/native:cronet_native_impl",
Wez115d4312018-02-17 04:05:19175 "//components/cronet/native/test:cronet_native_tests",
Misha Efimov41fba7252018-09-05 17:02:58176 "//net",
Wez087612362018-02-26 21:37:41177 ]
178
179 sources = [
Misha Efimov41fba7252018-09-05 17:02:58180 "cronet_global_state_stubs.cc",
Wez087612362018-02-26 21:37:41181 "run_all_unittests.cc",
Wez115d4312018-02-17 04:05:19182 ]
Misha Efimov91c17342018-04-02 21:31:07183
Wez318901082018-08-24 23:57:42184 defines = [ "CRONET_TESTS_IMPLEMENTATION" ]
185
Misha Efimov91c17342018-04-02 21:31:07186 if (is_linux && !is_component_build) {
187 public_configs = [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
188 }
Wez115d4312018-02-17 04:05:19189 }
190
191 test("cronet_unittests") {
Wez115d4312018-02-17 04:05:19192 deps = [
193 ":cronet_common",
194 ":cronet_common_unittests",
195 "//base",
Wez8b25664a2018-08-28 23:51:10196 "//base/test:test_support",
Wez115d4312018-02-17 04:05:19197 "//components/cronet/native:cronet_native_unittests",
198 "//net",
199 ]
200
201 sources = [
202 "cronet_global_state_stubs.cc",
Wez8b25664a2018-08-28 23:51:10203 "run_all_unittests.cc",
Wez115d4312018-02-17 04:05:19204 ]
205 }
Misha Efimov0edcce32018-10-03 19:09:29206
207 _package_dir = "$root_out_dir/cronet"
208
209 # Generate LICENSE file by recursively joining all dependent licenses.
210 action("generate_license") {
211 _license_path = "$_package_dir/LICENSE"
212
213 script = "//tools/licenses.py"
214 inputs = [
215 lastchange_file,
216 ]
217 outputs = [
218 _license_path,
219 ]
220 args = [
221 "license_file",
222 rebase_path(_license_path, root_build_dir),
223 "--gn-target",
224 "//components/cronet:cronet",
225 "--gn-out-dir",
226 ".",
227 ]
228 }
229
230 # Copy boiler-plate files into the package.
231 copy("cronet_package_copy") {
232 sources = [
Michael Spang8803d942019-01-29 03:33:47233 "${root_out_dir}${shlib_subdir}/${_cronet_shared_lib_file_name}",
Misha Efimov0edcce32018-10-03 19:09:29234 "//AUTHORS",
235 "//chrome/VERSION",
236 ]
Misha Efimov0edcce32018-10-03 19:09:29237 deps = [
238 ":cronet",
239 ]
Misha Efimov5e6f91c2018-10-12 17:56:27240 outputs = [
241 "$_package_dir/{{source_file_part}}",
242 ]
Misha Efimov0edcce32018-10-03 19:09:29243 }
244
245 # Copy headers.
246 copy("cronet_package_headers") {
247 sources = cronet_native_public_headers + grpc_public_headers
248
249 outputs = [
250 "$_package_dir/include/{{source_file_part}}",
251 ]
252 }
253
254 group("cronet_package") {
255 deps = [
256 ":cronet_package_copy",
257 ":cronet_package_headers",
Misha Efimov0edcce32018-10-03 19:09:29258 ":generate_license",
259 ]
260 }
Paul Jensen608d3512018-10-05 14:54:38261
262 executable("cronet_native_perf_test") {
263 testonly = true
264 sources = [
265 "native/perftest/main.cc",
266 "native/perftest/perf_test.cc",
267 ]
268 deps = [
269 "//base",
270 "//components/cronet",
271 "//components/cronet/native:cronet_native_headers",
272 "//components/cronet/native/test:cronet_native_tests",
273 "//components/cronet/native/test:cronet_native_testutil",
274 "//net:test_support",
275 ]
276 }
Misha Efimova7332e272018-10-18 13:21:26277
278 executable("cronet_sample") {
279 testonly = true
280 sources = [
281 "native/sample/main.cc",
282 "native/sample/sample_executor.cc",
283 "native/sample/sample_executor.h",
284 "native/sample/sample_url_request_callback.cc",
285 "native/sample/sample_url_request_callback.h",
286 ]
287 deps = [
288 "//components/cronet",
289 "//components/cronet/native:cronet_native_headers",
290 ]
291 if (is_linux && !is_component_build) {
292 public_configs = [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
293 }
294 }
295
296 test("cronet_sample_test") {
297 sources = [
298 "native/sample/test/sample_test.cc",
299 ]
300 deps = [
301 ":cronet_sample",
302 "//testing/gtest:gtest",
303 ]
304 }
Wez115d4312018-02-17 04:05:19305}