xref: /aosp_15_r20/external/libbrillo/BUILD.gn (revision 1a96fba65179ea7d3f56207137718607415c5953)
1*1a96fba6SXin Li# Copyright 2019 The Chromium OS Authors. All rights reserved.
2*1a96fba6SXin Li# Use of this source code is governed by a BSD-style license that can be
3*1a96fba6SXin Li# found in the LICENSE file.
4*1a96fba6SXin Li
5*1a96fba6SXin Liimport("//common-mk/deps.gni")
6*1a96fba6SXin Liimport("//common-mk/pkg_config.gni")
7*1a96fba6SXin Liimport("//common-mk/proto_library.gni")
8*1a96fba6SXin Li
9*1a96fba6SXin Ligroup("all") {
10*1a96fba6SXin Li  deps = [
11*1a96fba6SXin Li    ":libbrillo",
12*1a96fba6SXin Li    ":libbrillo-glib",
13*1a96fba6SXin Li    ":libbrillo-test",
14*1a96fba6SXin Li    ":libinstallattributes",
15*1a96fba6SXin Li    ":libpolicy",
16*1a96fba6SXin Li  ]
17*1a96fba6SXin Li  if (use.test) {
18*1a96fba6SXin Li    deps += [
19*1a96fba6SXin Li      ":libbrillo_tests",
20*1a96fba6SXin Li      ":libinstallattributes_tests",
21*1a96fba6SXin Li      ":libpolicy_tests",
22*1a96fba6SXin Li    ]
23*1a96fba6SXin Li  }
24*1a96fba6SXin Li  if (use.fuzzer) {
25*1a96fba6SXin Li    deps += [
26*1a96fba6SXin Li      ":libbrillo_data_encoding_fuzzer",
27*1a96fba6SXin Li      ":libbrillo_dbus_data_serialization_fuzzer",
28*1a96fba6SXin Li      ":libbrillo_http_form_data_fuzzer",
29*1a96fba6SXin Li    ]
30*1a96fba6SXin Li  }
31*1a96fba6SXin Li}
32*1a96fba6SXin Li
33*1a96fba6SXin Lidefault_pkg_deps = [ "libchrome-${libbase_ver}" ]
34*1a96fba6SXin Lipkg_config("target_defaults_pkg_deps") {
35*1a96fba6SXin Li  pkg_deps = default_pkg_deps
36*1a96fba6SXin Li}
37*1a96fba6SXin Li
38*1a96fba6SXin Liconfig("target_defaults") {
39*1a96fba6SXin Li  configs = [ ":target_defaults_pkg_deps" ]
40*1a96fba6SXin Li  include_dirs = [ "../libbrillo" ]
41*1a96fba6SXin Li  defines = [
42*1a96fba6SXin Li    "USE_DBUS=${use.dbus}",
43*1a96fba6SXin Li    "USE_RTTI_FOR_TYPE_TAGS",
44*1a96fba6SXin Li  ]
45*1a96fba6SXin Li}
46*1a96fba6SXin Li
47*1a96fba6SXin Liconfig("libbrillo_configs") {
48*1a96fba6SXin Li  include_dirs = [ "../libbrillo" ]
49*1a96fba6SXin Li}
50*1a96fba6SXin Li
51*1a96fba6SXin Li# Properties of shared libraries which libbrillo consists of.
52*1a96fba6SXin Li# Stored to variables once before actually declaring the targets, so that
53*1a96fba6SXin Li# another target can collect information for making the .pc and .so files.
54*1a96fba6SXin Lilibbrillo_sublibs = [
55*1a96fba6SXin Li  {
56*1a96fba6SXin Li    # |library_name| is library file name without "lib" prefix. This is needed
57*1a96fba6SXin Li    # for composing -l*** flags in libbrillo-${libbasever}.so.
58*1a96fba6SXin Li    # (Current version of GN deployed to ChromeOS doesn't have string_replace.)
59*1a96fba6SXin Li    library_name = "brillo-core"
60*1a96fba6SXin Li    if (use.dbus) {
61*1a96fba6SXin Li      all_dependent_pkg_deps = [ "dbus-1" ]
62*1a96fba6SXin Li    }
63*1a96fba6SXin Li    libs = [ "modp_b64" ]
64*1a96fba6SXin Li    sources = [
65*1a96fba6SXin Li      "brillo/asynchronous_signal_handler.cc",
66*1a96fba6SXin Li      "brillo/backoff_entry.cc",
67*1a96fba6SXin Li      "brillo/daemons/daemon.cc",
68*1a96fba6SXin Li      "brillo/data_encoding.cc",
69*1a96fba6SXin Li      "brillo/errors/error.cc",
70*1a96fba6SXin Li      "brillo/errors/error_codes.cc",
71*1a96fba6SXin Li      "brillo/file_utils.cc",
72*1a96fba6SXin Li      "brillo/files/file_util.cc",
73*1a96fba6SXin Li      "brillo/files/safe_fd.cc",
74*1a96fba6SXin Li      "brillo/flag_helper.cc",
75*1a96fba6SXin Li      "brillo/key_value_store.cc",
76*1a96fba6SXin Li      "brillo/message_loops/base_message_loop.cc",
77*1a96fba6SXin Li      "brillo/message_loops/message_loop.cc",
78*1a96fba6SXin Li      "brillo/message_loops/message_loop_utils.cc",
79*1a96fba6SXin Li      "brillo/mime_utils.cc",
80*1a96fba6SXin Li      "brillo/osrelease_reader.cc",
81*1a96fba6SXin Li      "brillo/process.cc",
82*1a96fba6SXin Li      "brillo/process_information.cc",
83*1a96fba6SXin Li      "brillo/process_reaper.cc",
84*1a96fba6SXin Li      "brillo/scoped_umask.cc",
85*1a96fba6SXin Li      "brillo/secure_blob.cc",
86*1a96fba6SXin Li      "brillo/strings/string_utils.cc",
87*1a96fba6SXin Li      "brillo/syslog_logging.cc",
88*1a96fba6SXin Li      "brillo/timezone/tzif_parser.cc",
89*1a96fba6SXin Li      "brillo/type_name_undecorate.cc",
90*1a96fba6SXin Li      "brillo/url_utils.cc",
91*1a96fba6SXin Li      "brillo/userdb_utils.cc",
92*1a96fba6SXin Li      "brillo/value_conversion.cc",
93*1a96fba6SXin Li    ]
94*1a96fba6SXin Li    if (use.dbus) {
95*1a96fba6SXin Li      sources += [
96*1a96fba6SXin Li        "brillo/any.cc",
97*1a96fba6SXin Li        "brillo/daemons/dbus_daemon.cc",
98*1a96fba6SXin Li        "brillo/dbus/async_event_sequencer.cc",
99*1a96fba6SXin Li        "brillo/dbus/data_serialization.cc",
100*1a96fba6SXin Li        "brillo/dbus/dbus_connection.cc",
101*1a96fba6SXin Li        "brillo/dbus/dbus_method_invoker.cc",
102*1a96fba6SXin Li        "brillo/dbus/dbus_method_response.cc",
103*1a96fba6SXin Li        "brillo/dbus/dbus_object.cc",
104*1a96fba6SXin Li        "brillo/dbus/dbus_service_watcher.cc",
105*1a96fba6SXin Li        "brillo/dbus/dbus_signal.cc",
106*1a96fba6SXin Li        "brillo/dbus/exported_object_manager.cc",
107*1a96fba6SXin Li        "brillo/dbus/exported_property_set.cc",
108*1a96fba6SXin Li        "brillo/dbus/introspectable_helper.cc",
109*1a96fba6SXin Li        "brillo/dbus/utils.cc",
110*1a96fba6SXin Li      ]
111*1a96fba6SXin Li    }
112*1a96fba6SXin Li  },
113*1a96fba6SXin Li
114*1a96fba6SXin Li  {
115*1a96fba6SXin Li    library_name = "brillo-blockdeviceutils"
116*1a96fba6SXin Li    deps = [ ":libbrillo-core" ]
117*1a96fba6SXin Li    sources = [ "brillo/blkdev_utils/loop_device.cc" ]
118*1a96fba6SXin Li    if (use.device_mapper) {
119*1a96fba6SXin Li      pkg_deps = [ "devmapper" ]
120*1a96fba6SXin Li      sources += [
121*1a96fba6SXin Li        "brillo/blkdev_utils/device_mapper.cc",
122*1a96fba6SXin Li        "brillo/blkdev_utils/device_mapper_task.cc",
123*1a96fba6SXin Li      ]
124*1a96fba6SXin Li    }
125*1a96fba6SXin Li  },
126*1a96fba6SXin Li
127*1a96fba6SXin Li  {
128*1a96fba6SXin Li    library_name = "brillo-http"
129*1a96fba6SXin Li    deps = [
130*1a96fba6SXin Li      ":libbrillo-core",
131*1a96fba6SXin Li      ":libbrillo-streams",
132*1a96fba6SXin Li    ]
133*1a96fba6SXin Li    all_dependent_pkg_deps = [ "libcurl" ]
134*1a96fba6SXin Li    sources = [
135*1a96fba6SXin Li      "brillo/http/curl_api.cc",
136*1a96fba6SXin Li      "brillo/http/http_connection_curl.cc",
137*1a96fba6SXin Li      "brillo/http/http_form_data.cc",
138*1a96fba6SXin Li      "brillo/http/http_request.cc",
139*1a96fba6SXin Li      "brillo/http/http_transport.cc",
140*1a96fba6SXin Li      "brillo/http/http_transport_curl.cc",
141*1a96fba6SXin Li      "brillo/http/http_utils.cc",
142*1a96fba6SXin Li    ]
143*1a96fba6SXin Li    if (use.dbus) {
144*1a96fba6SXin Li      sources += [ "brillo/http/http_proxy.cc" ]
145*1a96fba6SXin Li    }
146*1a96fba6SXin Li  },
147*1a96fba6SXin Li
148*1a96fba6SXin Li  {
149*1a96fba6SXin Li    library_name = "brillo-streams"
150*1a96fba6SXin Li    deps = [ ":libbrillo-core" ]
151*1a96fba6SXin Li    all_dependent_pkg_deps = [ "openssl" ]
152*1a96fba6SXin Li    sources = [
153*1a96fba6SXin Li      "brillo/streams/file_stream.cc",
154*1a96fba6SXin Li      "brillo/streams/input_stream_set.cc",
155*1a96fba6SXin Li      "brillo/streams/memory_containers.cc",
156*1a96fba6SXin Li      "brillo/streams/memory_stream.cc",
157*1a96fba6SXin Li      "brillo/streams/openssl_stream_bio.cc",
158*1a96fba6SXin Li      "brillo/streams/stream.cc",
159*1a96fba6SXin Li      "brillo/streams/stream_errors.cc",
160*1a96fba6SXin Li      "brillo/streams/stream_utils.cc",
161*1a96fba6SXin Li      "brillo/streams/tls_stream.cc",
162*1a96fba6SXin Li    ]
163*1a96fba6SXin Li  },
164*1a96fba6SXin Li
165*1a96fba6SXin Li  {
166*1a96fba6SXin Li    library_name = "brillo-cryptohome"
167*1a96fba6SXin Li    all_dependent_pkg_deps = [ "openssl" ]
168*1a96fba6SXin Li    sources = [ "brillo/cryptohome.cc" ]
169*1a96fba6SXin Li  },
170*1a96fba6SXin Li
171*1a96fba6SXin Li  {
172*1a96fba6SXin Li    library_name = "brillo-namespaces"
173*1a96fba6SXin Li    deps = [ ":libbrillo-core" ]
174*1a96fba6SXin Li    sources = [
175*1a96fba6SXin Li      "brillo/namespaces/mount_namespace.cc",
176*1a96fba6SXin Li      "brillo/namespaces/platform.cc",
177*1a96fba6SXin Li      "brillo/scoped_mount_namespace.cc",
178*1a96fba6SXin Li    ]
179*1a96fba6SXin Li  },
180*1a96fba6SXin Li
181*1a96fba6SXin Li  {
182*1a96fba6SXin Li    library_name = "brillo-minijail"
183*1a96fba6SXin Li    all_dependent_pkg_deps = [ "libminijail" ]
184*1a96fba6SXin Li    sources = [ "brillo/minijail/minijail.cc" ]
185*1a96fba6SXin Li  },
186*1a96fba6SXin Li
187*1a96fba6SXin Li  {
188*1a96fba6SXin Li    library_name = "brillo-protobuf"
189*1a96fba6SXin Li    all_dependent_pkg_deps = [ "protobuf" ]
190*1a96fba6SXin Li    sources = [ "brillo/proto_file_io.cc" ]
191*1a96fba6SXin Li  },
192*1a96fba6SXin Li]
193*1a96fba6SXin Li
194*1a96fba6SXin Liif (use.udev) {
195*1a96fba6SXin Li  libbrillo_sublibs += [
196*1a96fba6SXin Li    {
197*1a96fba6SXin Li      library_name = "brillo-udev"
198*1a96fba6SXin Li      all_dependent_pkg_deps = [ "libudev" ]
199*1a96fba6SXin Li      sources = [
200*1a96fba6SXin Li        "brillo/udev/udev.cc",
201*1a96fba6SXin Li        "brillo/udev/udev_device.cc",
202*1a96fba6SXin Li        "brillo/udev/udev_enumerate.cc",
203*1a96fba6SXin Li        "brillo/udev/udev_list_entry.cc",
204*1a96fba6SXin Li        "brillo/udev/udev_monitor.cc",
205*1a96fba6SXin Li      ]
206*1a96fba6SXin Li    },
207*1a96fba6SXin Li  ]
208*1a96fba6SXin Li}
209*1a96fba6SXin Li
210*1a96fba6SXin Li# Generate shared libraries.
211*1a96fba6SXin Liforeach(attr, libbrillo_sublibs) {
212*1a96fba6SXin Li  shared_library("lib" + attr.library_name) {
213*1a96fba6SXin Li    sources = attr.sources
214*1a96fba6SXin Li    if (defined(attr.deps)) {
215*1a96fba6SXin Li      deps = attr.deps
216*1a96fba6SXin Li    }
217*1a96fba6SXin Li    if (defined(attr.libs)) {
218*1a96fba6SXin Li      libs = attr.libs
219*1a96fba6SXin Li    }
220*1a96fba6SXin Li    if (defined(attr.pkg_deps)) {
221*1a96fba6SXin Li      pkg_deps = attr.pkg_deps
222*1a96fba6SXin Li    }
223*1a96fba6SXin Li    if (defined(attr.public_pkg_deps)) {
224*1a96fba6SXin Li      public_pkg_deps = attr.public_pkg_deps
225*1a96fba6SXin Li    }
226*1a96fba6SXin Li    if (defined(attr.all_dependent_pkg_deps)) {
227*1a96fba6SXin Li      all_dependent_pkg_deps = attr.all_dependent_pkg_deps
228*1a96fba6SXin Li    }
229*1a96fba6SXin Li    if (defined(attr.cflags)) {
230*1a96fba6SXin Li      cflags = attr.cflags
231*1a96fba6SXin Li    }
232*1a96fba6SXin Li    if (defined(attr.configs)) {
233*1a96fba6SXin Li      configs += attr.configs
234*1a96fba6SXin Li    }
235*1a96fba6SXin Li    configs += [ ":target_defaults" ]
236*1a96fba6SXin Li  }
237*1a96fba6SXin Li}
238*1a96fba6SXin Li
239*1a96fba6SXin Ligenerate_pkg_config("libbrillo-${libbase_ver}_pc") {
240*1a96fba6SXin Li  name = "libbrillo"
241*1a96fba6SXin Li  output_name = "libbrillo-${libbase_ver}"
242*1a96fba6SXin Li  description = "brillo base library"
243*1a96fba6SXin Li  version = libbase_ver
244*1a96fba6SXin Li  requires_private = default_pkg_deps
245*1a96fba6SXin Li  foreach(sublib, libbrillo_sublibs) {
246*1a96fba6SXin Li    if (defined(sublib.pkg_deps)) {
247*1a96fba6SXin Li      requires_private += sublib.pkg_deps
248*1a96fba6SXin Li    }
249*1a96fba6SXin Li    if (defined(sublib.public_pkg_deps)) {
250*1a96fba6SXin Li      requires_private += sublib.public_pkg_deps
251*1a96fba6SXin Li    }
252*1a96fba6SXin Li    if (defined(sublib.all_dependent_pkg_deps)) {
253*1a96fba6SXin Li      requires_private += sublib.all_dependent_pkg_deps
254*1a96fba6SXin Li    }
255*1a96fba6SXin Li  }
256*1a96fba6SXin Li  defines = [ "USE_RTTI_FOR_TYPE_TAGS" ]
257*1a96fba6SXin Li  libs = [ "-lbrillo" ]
258*1a96fba6SXin Li}
259*1a96fba6SXin Li
260*1a96fba6SXin Ligenerate_pkg_config("libbrillo_pc") {
261*1a96fba6SXin Li  name = "libbrillo"
262*1a96fba6SXin Li  output_name = "libbrillo"
263*1a96fba6SXin Li  description = "brillo base library"
264*1a96fba6SXin Li  version = libbase_ver
265*1a96fba6SXin Li  requires_private = default_pkg_deps
266*1a96fba6SXin Li  foreach(sublib, libbrillo_sublibs) {
267*1a96fba6SXin Li    if (defined(sublib.pkg_deps)) {
268*1a96fba6SXin Li      requires_private += sublib.pkg_deps
269*1a96fba6SXin Li    }
270*1a96fba6SXin Li    if (defined(sublib.public_pkg_deps)) {
271*1a96fba6SXin Li      requires_private += sublib.public_pkg_deps
272*1a96fba6SXin Li    }
273*1a96fba6SXin Li    if (defined(sublib.all_dependent_pkg_deps)) {
274*1a96fba6SXin Li      requires_private += sublib.all_dependent_pkg_deps
275*1a96fba6SXin Li    }
276*1a96fba6SXin Li  }
277*1a96fba6SXin Li  defines = [ "USE_RTTI_FOR_TYPE_TAGS" ]
278*1a96fba6SXin Li  libs = [ "-lbrillo" ]
279*1a96fba6SXin Li}
280*1a96fba6SXin Li
281*1a96fba6SXin Liaction("libbrillo") {
282*1a96fba6SXin Li  deps = [
283*1a96fba6SXin Li    ":libbrillo-${libbase_ver}_pc",
284*1a96fba6SXin Li    ":libbrillo_pc",
285*1a96fba6SXin Li  ]
286*1a96fba6SXin Li  foreach(sublib, libbrillo_sublibs) {
287*1a96fba6SXin Li    deps += [ ":lib" + sublib.library_name ]
288*1a96fba6SXin Li  }
289*1a96fba6SXin Li  script = "//common-mk/write_args.py"
290*1a96fba6SXin Li  outputs = [ "${root_out_dir}/lib/libbrillo.so" ]
291*1a96fba6SXin Li  args = [ "--output" ] + outputs + [ "--" ] + [
292*1a96fba6SXin Li           "GROUP",
293*1a96fba6SXin Li           "(",
294*1a96fba6SXin Li           "AS_NEEDED",
295*1a96fba6SXin Li           "(",
296*1a96fba6SXin Li         ]
297*1a96fba6SXin Li  foreach(sublib, libbrillo_sublibs) {
298*1a96fba6SXin Li    args += [ "-l" + sublib.library_name ]
299*1a96fba6SXin Li  }
300*1a96fba6SXin Li  args += [
301*1a96fba6SXin Li    ")",
302*1a96fba6SXin Li    ")",
303*1a96fba6SXin Li  ]
304*1a96fba6SXin Li}
305*1a96fba6SXin Li
306*1a96fba6SXin Lilibbrillo_test_deps = [ "libbrillo-http" ]
307*1a96fba6SXin Li
308*1a96fba6SXin Ligenerate_pkg_config("libbrillo-test-${libbase_ver}_pc") {
309*1a96fba6SXin Li  name = "libbrillo-test"
310*1a96fba6SXin Li  output_name = "libbrillo-test-${libbase_ver}"
311*1a96fba6SXin Li  description = "brillo test library"
312*1a96fba6SXin Li  version = libbase_ver
313*1a96fba6SXin Li
314*1a96fba6SXin Li  # Because libbrillo-test is static, we have to depend directly on everything.
315*1a96fba6SXin Li  requires = [ "libbrillo" ] + default_pkg_deps
316*1a96fba6SXin Li  foreach(name, libbrillo_test_deps) {
317*1a96fba6SXin Li    foreach(t, libbrillo_sublibs) {
318*1a96fba6SXin Li      if ("lib" + t.library_name == name) {
319*1a96fba6SXin Li        if (defined(t.pkg_deps)) {
320*1a96fba6SXin Li          requires += t.pkg_deps
321*1a96fba6SXin Li        }
322*1a96fba6SXin Li        if (defined(t.public_pkg_deps)) {
323*1a96fba6SXin Li          requires += t.public_pkg_deps
324*1a96fba6SXin Li        }
325*1a96fba6SXin Li        if (defined(t.all_dependent_pkg_deps)) {
326*1a96fba6SXin Li          requires += t.all_dependent_pkg_deps
327*1a96fba6SXin Li        }
328*1a96fba6SXin Li      }
329*1a96fba6SXin Li    }
330*1a96fba6SXin Li  }
331*1a96fba6SXin Li  libs = [ "-lbrillo-test" ]
332*1a96fba6SXin Li}
333*1a96fba6SXin Li
334*1a96fba6SXin Ligenerate_pkg_config("libbrillo-test_pc") {
335*1a96fba6SXin Li  name = "libbrillo-test"
336*1a96fba6SXin Li  output_name = "libbrillo-test"
337*1a96fba6SXin Li  description = "brillo test library"
338*1a96fba6SXin Li  version = libbase_ver
339*1a96fba6SXin Li
340*1a96fba6SXin Li  # Because libbrillo-test is static, we have to depend directly on everything.
341*1a96fba6SXin Li  requires = [ "libbrillo" ] + default_pkg_deps
342*1a96fba6SXin Li  foreach(name, libbrillo_test_deps) {
343*1a96fba6SXin Li    foreach(t, libbrillo_sublibs) {
344*1a96fba6SXin Li      if ("lib" + t.library_name == name) {
345*1a96fba6SXin Li        if (defined(t.pkg_deps)) {
346*1a96fba6SXin Li          requires += t.pkg_deps
347*1a96fba6SXin Li        }
348*1a96fba6SXin Li        if (defined(t.public_pkg_deps)) {
349*1a96fba6SXin Li          requires += t.public_pkg_deps
350*1a96fba6SXin Li        }
351*1a96fba6SXin Li        if (defined(t.all_dependent_pkg_deps)) {
352*1a96fba6SXin Li          requires += t.all_dependent_pkg_deps
353*1a96fba6SXin Li        }
354*1a96fba6SXin Li      }
355*1a96fba6SXin Li    }
356*1a96fba6SXin Li  }
357*1a96fba6SXin Li  libs = [ "-lbrillo-test" ]
358*1a96fba6SXin Li}
359*1a96fba6SXin Li
360*1a96fba6SXin Listatic_library("libbrillo-test") {
361*1a96fba6SXin Li  configs -= [ "//common-mk:use_thin_archive" ]
362*1a96fba6SXin Li  configs += [
363*1a96fba6SXin Li    "//common-mk:nouse_thin_archive",
364*1a96fba6SXin Li    ":target_defaults",
365*1a96fba6SXin Li  ]
366*1a96fba6SXin Li  deps = [
367*1a96fba6SXin Li    ":libbrillo-http",
368*1a96fba6SXin Li    ":libbrillo-test-${libbase_ver}_pc",
369*1a96fba6SXin Li    ":libbrillo-test_pc",
370*1a96fba6SXin Li  ]
371*1a96fba6SXin Li  foreach(name, libbrillo_test_deps) {
372*1a96fba6SXin Li    deps += [ ":" + name ]
373*1a96fba6SXin Li  }
374*1a96fba6SXin Li  sources = [
375*1a96fba6SXin Li    "brillo/blkdev_utils/loop_device_fake.cc",
376*1a96fba6SXin Li    "brillo/http/http_connection_fake.cc",
377*1a96fba6SXin Li    "brillo/http/http_transport_fake.cc",
378*1a96fba6SXin Li    "brillo/message_loops/fake_message_loop.cc",
379*1a96fba6SXin Li    "brillo/streams/fake_stream.cc",
380*1a96fba6SXin Li    "brillo/unittest_utils.cc",
381*1a96fba6SXin Li  ]
382*1a96fba6SXin Li  if (use.device_mapper) {
383*1a96fba6SXin Li    sources += [ "brillo/blkdev_utils/device_mapper_fake.cc" ]
384*1a96fba6SXin Li  }
385*1a96fba6SXin Li}
386*1a96fba6SXin Li
387*1a96fba6SXin Lishared_library("libinstallattributes") {
388*1a96fba6SXin Li  configs += [ ":target_defaults" ]
389*1a96fba6SXin Li  deps = [
390*1a96fba6SXin Li    ":libinstallattributes-includes",
391*1a96fba6SXin Li    "../common-mk/external_dependencies:install_attributes-proto",
392*1a96fba6SXin Li  ]
393*1a96fba6SXin Li  all_dependent_pkg_deps = [ "protobuf-lite" ]
394*1a96fba6SXin Li  sources = [ "install_attributes/libinstallattributes.cc" ]
395*1a96fba6SXin Li}
396*1a96fba6SXin Li
397*1a96fba6SXin Lishared_library("libpolicy") {
398*1a96fba6SXin Li  configs += [ ":target_defaults" ]
399*1a96fba6SXin Li  deps = [
400*1a96fba6SXin Li    ":libinstallattributes",
401*1a96fba6SXin Li    ":libpolicy-includes",
402*1a96fba6SXin Li    "../common-mk/external_dependencies:policy-protos",
403*1a96fba6SXin Li  ]
404*1a96fba6SXin Li  all_dependent_pkg_deps = [
405*1a96fba6SXin Li    "openssl",
406*1a96fba6SXin Li    "protobuf-lite",
407*1a96fba6SXin Li  ]
408*1a96fba6SXin Li  ldflags = [ "-Wl,--version-script,${platform2_root}/libbrillo/libpolicy.ver" ]
409*1a96fba6SXin Li  sources = [
410*1a96fba6SXin Li    "policy/device_policy.cc",
411*1a96fba6SXin Li    "policy/device_policy_impl.cc",
412*1a96fba6SXin Li    "policy/libpolicy.cc",
413*1a96fba6SXin Li    "policy/policy_util.cc",
414*1a96fba6SXin Li    "policy/resilient_policy_util.cc",
415*1a96fba6SXin Li  ]
416*1a96fba6SXin Li}
417*1a96fba6SXin Li
418*1a96fba6SXin Lilibbrillo_glib_pkg_deps = [
419*1a96fba6SXin Li  "glib-2.0",
420*1a96fba6SXin Li  "gobject-2.0",
421*1a96fba6SXin Li]
422*1a96fba6SXin Liif (use.dbus) {
423*1a96fba6SXin Li  libbrillo_glib_pkg_deps += [
424*1a96fba6SXin Li    "dbus-1",
425*1a96fba6SXin Li    "dbus-glib-1",
426*1a96fba6SXin Li  ]
427*1a96fba6SXin Li}
428*1a96fba6SXin Li
429*1a96fba6SXin Ligenerate_pkg_config("libbrillo-glib-${libbase_ver}_pc") {
430*1a96fba6SXin Li  name = "libbrillo-glib"
431*1a96fba6SXin Li  output_name = "libbrillo-glib-${libbase_ver}"
432*1a96fba6SXin Li  description = "brillo glib wrapper library"
433*1a96fba6SXin Li  version = libbase_ver
434*1a96fba6SXin Li  requires_private = libbrillo_glib_pkg_deps
435*1a96fba6SXin Li  libs = [ "-lbrillo-glib" ]
436*1a96fba6SXin Li}
437*1a96fba6SXin Li
438*1a96fba6SXin Ligenerate_pkg_config("libbrillo-glib_pc") {
439*1a96fba6SXin Li  name = "libbrillo-glib"
440*1a96fba6SXin Li  output_name = "libbrillo-glib"
441*1a96fba6SXin Li  description = "brillo glib wrapper library"
442*1a96fba6SXin Li  version = libbase_ver
443*1a96fba6SXin Li  requires_private = libbrillo_glib_pkg_deps
444*1a96fba6SXin Li  libs = [ "-lbrillo-glib" ]
445*1a96fba6SXin Li}
446*1a96fba6SXin Li
447*1a96fba6SXin Lishared_library("libbrillo-glib") {
448*1a96fba6SXin Li  configs += [ ":target_defaults" ]
449*1a96fba6SXin Li  deps = [
450*1a96fba6SXin Li    ":libbrillo",
451*1a96fba6SXin Li    ":libbrillo-glib-${libbase_ver}_pc",
452*1a96fba6SXin Li    ":libbrillo-glib_pc",
453*1a96fba6SXin Li  ]
454*1a96fba6SXin Li  all_dependent_pkg_deps = libbrillo_glib_pkg_deps
455*1a96fba6SXin Li  if (use.dbus) {
456*1a96fba6SXin Li    sources = [
457*1a96fba6SXin Li      "brillo/glib/abstract_dbus_service.cc",
458*1a96fba6SXin Li      "brillo/glib/dbus.cc",
459*1a96fba6SXin Li    ]
460*1a96fba6SXin Li  }
461*1a96fba6SXin Li  cflags = [
462*1a96fba6SXin Li    # glib uses the deprecated "register" attribute in some header files.
463*1a96fba6SXin Li    "-Wno-deprecated-register",
464*1a96fba6SXin Li  ]
465*1a96fba6SXin Li}
466*1a96fba6SXin Li
467*1a96fba6SXin Liif (use.test) {
468*1a96fba6SXin Li  static_library("libbrillo_static") {
469*1a96fba6SXin Li    configs += [ ":target_defaults" ]
470*1a96fba6SXin Li    deps = [
471*1a96fba6SXin Li      ":libbrillo-${libbase_ver}_pc",
472*1a96fba6SXin Li      ":libbrillo_pc",
473*1a96fba6SXin Li      ":libinstallattributes",
474*1a96fba6SXin Li      ":libpolicy",
475*1a96fba6SXin Li    ]
476*1a96fba6SXin Li    foreach(sublib, libbrillo_sublibs) {
477*1a96fba6SXin Li      deps += [ ":lib" + sublib.library_name ]
478*1a96fba6SXin Li    }
479*1a96fba6SXin Li    public_configs = [ ":libbrillo_configs" ]
480*1a96fba6SXin Li  }
481*1a96fba6SXin Li  proto_library("libbrillo_tests_proto") {
482*1a96fba6SXin Li    proto_in_dir = "brillo/dbus"
483*1a96fba6SXin Li    proto_out_dir = "include/brillo/dbus"
484*1a96fba6SXin Li    sources = [ "${proto_in_dir}/test.proto" ]
485*1a96fba6SXin Li  }
486*1a96fba6SXin Li  executable("libbrillo_tests") {
487*1a96fba6SXin Li    configs += [
488*1a96fba6SXin Li      "//common-mk:test",
489*1a96fba6SXin Li      ":target_defaults",
490*1a96fba6SXin Li    ]
491*1a96fba6SXin Li    deps = [
492*1a96fba6SXin Li      ":libbrillo-glib",
493*1a96fba6SXin Li      ":libbrillo-test",
494*1a96fba6SXin Li      ":libbrillo_static",
495*1a96fba6SXin Li      ":libbrillo_tests_proto",
496*1a96fba6SXin Li    ]
497*1a96fba6SXin Li    pkg_deps = [ "libchrome-test-${libbase_ver}" ]
498*1a96fba6SXin Li    cflags = [ "-Wno-format-zero-length" ]
499*1a96fba6SXin Li
500*1a96fba6SXin Li    if (is_debug) {
501*1a96fba6SXin Li      cflags += [
502*1a96fba6SXin Li        "-fprofile-arcs",
503*1a96fba6SXin Li        "-ftest-coverage",
504*1a96fba6SXin Li        "-fno-inline",
505*1a96fba6SXin Li      ]
506*1a96fba6SXin Li      libs = [ "gcov" ]
507*1a96fba6SXin Li    }
508*1a96fba6SXin Li    sources = [
509*1a96fba6SXin Li      "brillo/asynchronous_signal_handler_test.cc",
510*1a96fba6SXin Li      "brillo/backoff_entry_test.cc",
511*1a96fba6SXin Li      "brillo/blkdev_utils/loop_device_test.cc",
512*1a96fba6SXin Li      "brillo/data_encoding_test.cc",
513*1a96fba6SXin Li      "brillo/enum_flags_test.cc",
514*1a96fba6SXin Li      "brillo/errors/error_codes_test.cc",
515*1a96fba6SXin Li      "brillo/errors/error_test.cc",
516*1a96fba6SXin Li      "brillo/file_utils_test.cc",
517*1a96fba6SXin Li      "brillo/files/file_util_test.cc",
518*1a96fba6SXin Li      "brillo/files/safe_fd_test.cc",
519*1a96fba6SXin Li      "brillo/flag_helper_test.cc",
520*1a96fba6SXin Li      "brillo/glib/object_test.cc",
521*1a96fba6SXin Li      "brillo/http/http_connection_curl_test.cc",
522*1a96fba6SXin Li      "brillo/http/http_form_data_test.cc",
523*1a96fba6SXin Li      "brillo/http/http_request_test.cc",
524*1a96fba6SXin Li      "brillo/http/http_transport_curl_test.cc",
525*1a96fba6SXin Li      "brillo/http/http_utils_test.cc",
526*1a96fba6SXin Li      "brillo/key_value_store_test.cc",
527*1a96fba6SXin Li      "brillo/map_utils_test.cc",
528*1a96fba6SXin Li      "brillo/message_loops/base_message_loop_test.cc",
529*1a96fba6SXin Li      "brillo/message_loops/fake_message_loop_test.cc",
530*1a96fba6SXin Li      "brillo/message_loops/message_loop_test.cc",
531*1a96fba6SXin Li      "brillo/mime_utils_test.cc",
532*1a96fba6SXin Li      "brillo/namespaces/mount_namespace_test.cc",
533*1a96fba6SXin Li      "brillo/osrelease_reader_test.cc",
534*1a96fba6SXin Li      "brillo/process_reaper_test.cc",
535*1a96fba6SXin Li      "brillo/process_test.cc",
536*1a96fba6SXin Li      "brillo/scoped_umask_test.cc",
537*1a96fba6SXin Li      "brillo/secure_blob_test.cc",
538*1a96fba6SXin Li      "brillo/streams/fake_stream_test.cc",
539*1a96fba6SXin Li      "brillo/streams/file_stream_test.cc",
540*1a96fba6SXin Li      "brillo/streams/input_stream_set_test.cc",
541*1a96fba6SXin Li      "brillo/streams/memory_containers_test.cc",
542*1a96fba6SXin Li      "brillo/streams/memory_stream_test.cc",
543*1a96fba6SXin Li      "brillo/streams/openssl_stream_bio_test.cc",
544*1a96fba6SXin Li      "brillo/streams/stream_test.cc",
545*1a96fba6SXin Li      "brillo/streams/stream_utils_test.cc",
546*1a96fba6SXin Li      "brillo/strings/string_utils_test.cc",
547*1a96fba6SXin Li      "brillo/timezone/tzif_parser_test.cc",
548*1a96fba6SXin Li      "brillo/unittest_utils.cc",
549*1a96fba6SXin Li      "brillo/url_utils_test.cc",
550*1a96fba6SXin Li      "brillo/value_conversion_test.cc",
551*1a96fba6SXin Li      "testrunner.cc",
552*1a96fba6SXin Li    ]
553*1a96fba6SXin Li    if (use.dbus) {
554*1a96fba6SXin Li      sources += [
555*1a96fba6SXin Li        "brillo/any_internal_impl_test.cc",
556*1a96fba6SXin Li        "brillo/any_test.cc",
557*1a96fba6SXin Li        "brillo/dbus/async_event_sequencer_test.cc",
558*1a96fba6SXin Li        "brillo/dbus/data_serialization_test.cc",
559*1a96fba6SXin Li        "brillo/dbus/dbus_method_invoker_test.cc",
560*1a96fba6SXin Li        "brillo/dbus/dbus_object_test.cc",
561*1a96fba6SXin Li        "brillo/dbus/dbus_param_reader_test.cc",
562*1a96fba6SXin Li        "brillo/dbus/dbus_param_writer_test.cc",
563*1a96fba6SXin Li        "brillo/dbus/dbus_signal_handler_test.cc",
564*1a96fba6SXin Li        "brillo/dbus/exported_object_manager_test.cc",
565*1a96fba6SXin Li        "brillo/dbus/exported_property_set_test.cc",
566*1a96fba6SXin Li        "brillo/http/http_proxy_test.cc",
567*1a96fba6SXin Li        "brillo/type_name_undecorate_test.cc",
568*1a96fba6SXin Li        "brillo/variant_dictionary_test.cc",
569*1a96fba6SXin Li      ]
570*1a96fba6SXin Li    }
571*1a96fba6SXin Li    if (use.device_mapper) {
572*1a96fba6SXin Li      sources += [ "brillo/blkdev_utils/device_mapper_test.cc" ]
573*1a96fba6SXin Li    }
574*1a96fba6SXin Li  }
575*1a96fba6SXin Li
576*1a96fba6SXin Li  executable("libinstallattributes_tests") {
577*1a96fba6SXin Li    configs += [
578*1a96fba6SXin Li      "//common-mk:test",
579*1a96fba6SXin Li      ":target_defaults",
580*1a96fba6SXin Li    ]
581*1a96fba6SXin Li    deps = [
582*1a96fba6SXin Li      ":libinstallattributes",
583*1a96fba6SXin Li      "../common-mk/external_dependencies:install_attributes-proto",
584*1a96fba6SXin Li      "../common-mk/testrunner:testrunner",
585*1a96fba6SXin Li    ]
586*1a96fba6SXin Li    sources = [ "install_attributes/tests/libinstallattributes_test.cc" ]
587*1a96fba6SXin Li  }
588*1a96fba6SXin Li
589*1a96fba6SXin Li  executable("libpolicy_tests") {
590*1a96fba6SXin Li    configs += [
591*1a96fba6SXin Li      "//common-mk:test",
592*1a96fba6SXin Li      ":target_defaults",
593*1a96fba6SXin Li    ]
594*1a96fba6SXin Li    deps = [
595*1a96fba6SXin Li      ":libinstallattributes",
596*1a96fba6SXin Li      ":libpolicy",
597*1a96fba6SXin Li      "../common-mk/external_dependencies:install_attributes-proto",
598*1a96fba6SXin Li      "../common-mk/external_dependencies:policy-protos",
599*1a96fba6SXin Li      "../common-mk/testrunner:testrunner",
600*1a96fba6SXin Li    ]
601*1a96fba6SXin Li    sources = [
602*1a96fba6SXin Li      "install_attributes/mock_install_attributes_reader.cc",
603*1a96fba6SXin Li      "policy/tests/device_policy_impl_test.cc",
604*1a96fba6SXin Li      "policy/tests/libpolicy_test.cc",
605*1a96fba6SXin Li      "policy/tests/policy_util_test.cc",
606*1a96fba6SXin Li      "policy/tests/resilient_policy_util_test.cc",
607*1a96fba6SXin Li    ]
608*1a96fba6SXin Li  }
609*1a96fba6SXin Li}
610*1a96fba6SXin Li
611*1a96fba6SXin Liif (use.fuzzer) {
612*1a96fba6SXin Li  executable("libbrillo_data_encoding_fuzzer") {
613*1a96fba6SXin Li    sources = [ "brillo/data_encoding_fuzzer.cc" ]
614*1a96fba6SXin Li
615*1a96fba6SXin Li    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
616*1a96fba6SXin Li
617*1a96fba6SXin Li    pkg_deps = [ "libchrome-${libbase_ver}" ]
618*1a96fba6SXin Li
619*1a96fba6SXin Li    include_dirs = [ "../libbrillo" ]
620*1a96fba6SXin Li
621*1a96fba6SXin Li    deps = [ ":libbrillo-core" ]
622*1a96fba6SXin Li  }
623*1a96fba6SXin Li
624*1a96fba6SXin Li  executable("libbrillo_dbus_data_serialization_fuzzer") {
625*1a96fba6SXin Li    sources = [ "brillo/dbus/data_serialization_fuzzer.cc" ]
626*1a96fba6SXin Li
627*1a96fba6SXin Li    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
628*1a96fba6SXin Li
629*1a96fba6SXin Li    pkg_deps = [ "libchrome-${libbase_ver}" ]
630*1a96fba6SXin Li
631*1a96fba6SXin Li    include_dirs = [ "../libbrillo" ]
632*1a96fba6SXin Li
633*1a96fba6SXin Li    deps = [ ":libbrillo-core" ]
634*1a96fba6SXin Li  }
635*1a96fba6SXin Li
636*1a96fba6SXin Li  executable("libbrillo_http_form_data_fuzzer") {
637*1a96fba6SXin Li    sources = [ "brillo/http/http_form_data_fuzzer.cc" ]
638*1a96fba6SXin Li
639*1a96fba6SXin Li    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
640*1a96fba6SXin Li
641*1a96fba6SXin Li    pkg_deps = [ "libchrome-${libbase_ver}" ]
642*1a96fba6SXin Li
643*1a96fba6SXin Li    include_dirs = [ "../libbrillo" ]
644*1a96fba6SXin Li
645*1a96fba6SXin Li    deps = [
646*1a96fba6SXin Li      ":libbrillo-http",
647*1a96fba6SXin Li      ":libbrillo-streams",
648*1a96fba6SXin Li    ]
649*1a96fba6SXin Li  }
650*1a96fba6SXin Li}
651*1a96fba6SXin Li
652*1a96fba6SXin Licopy("libinstallattributes-includes") {
653*1a96fba6SXin Li  sources = [ "install_attributes/libinstallattributes.h" ]
654*1a96fba6SXin Li  outputs =
655*1a96fba6SXin Li      [ "${root_gen_dir}/include/install_attributes/{{source_file_part}}" ]
656*1a96fba6SXin Li}
657*1a96fba6SXin Li
658*1a96fba6SXin Licopy("libpolicy-includes") {
659*1a96fba6SXin Li  sources = [
660*1a96fba6SXin Li    "policy/device_policy.h",
661*1a96fba6SXin Li    "policy/device_policy_impl.h",
662*1a96fba6SXin Li    "policy/libpolicy.h",
663*1a96fba6SXin Li    "policy/mock_device_policy.h",
664*1a96fba6SXin Li    "policy/mock_libpolicy.h",
665*1a96fba6SXin Li    "policy/policy_util.h",
666*1a96fba6SXin Li    "policy/resilient_policy_util.h",
667*1a96fba6SXin Li  ]
668*1a96fba6SXin Li  outputs = [ "${root_gen_dir}/include/policy/{{source_file_part}}" ]
669*1a96fba6SXin Li}
670