xref: /aosp_15_r20/external/puffin/BUILD.gn (revision 07fb1d065b7cfb4729786fadd42a612532d2f466)
1# Copyright 2018 The ChromiumOS Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//common-mk/pkg_config.gni")
6import("//common-mk/proto_library.gni")
7
8group("all") {
9  deps = [
10    ":libpuffdiff",
11    ":libpuffin-proto",
12    ":libpuffpatch",
13    ":puffin",
14  ]
15  if (use.test) {
16    deps += [ ":puffin_test" ]
17  }
18  if (use.fuzzer) {
19    deps += [
20      ":puffin_huff_fuzzer",
21      ":puffin_puff_fuzzer",
22      ":puffin_puffpatch_fuzzer",
23    ]
24  }
25}
26
27pkg_config("target_defaults") {
28  pkg_deps = [ "libchrome" ]
29  if (use.fuzzer) {
30    # Link against protobuf for fuzzers so we can use libprotobuf-mutator.
31    pkg_deps += [ "protobuf" ]
32  } else {
33    pkg_deps += [ "protobuf-lite" ]
34  }
35  cflags = [ "-Wextra" ]
36  cflags_cc = [ "-Wnon-virtual-dtor" ]
37  include_dirs = [ "src/include" ]
38  defines = [
39    "USE_BRILLO",
40    "_FILE_OFFSET_BITS=64",
41  ]
42}
43
44proto_library("libpuffin-proto") {
45  proto_in_dir = "src"
46  proto_out_dir = "include/puffin/src"
47  sources = [ "src/puffin.proto" ]
48}
49
50pkg_config("libpuffpatch_config") {
51  pkg_deps = [ "libbspatch" ]
52}
53
54static_library("libpuffpatch") {
55  configs += [
56    "//common-mk:nouse_thin_archive",
57    ":target_defaults",
58    ":libpuffpatch_config",
59  ]
60  configs -= [ "//common-mk:use_thin_archive" ]
61  complete_static_lib = true
62  deps = [ ":libpuffin-proto" ]
63  sources = [
64    "src/bit_reader.cc",
65    "src/bit_writer.cc",
66    "src/huffer.cc",
67    "src/huffman_table.cc",
68    "src/puff_reader.cc",
69    "src/puff_writer.cc",
70    "src/puffer.cc",
71    "src/puffin_stream.cc",
72    "src/puffpatch.cc",
73  ]
74}
75
76pkg_config("libpuffdiff_config") {
77  pkg_deps = [ "libbsdiff" ]
78}
79static_library("libpuffdiff") {
80  configs += [
81    "//common-mk:nouse_thin_archive",
82    ":target_defaults",
83    ":libpuffdiff_config",
84  ]
85  configs -= [ "//common-mk:use_thin_archive" ]
86  deps = [ ":libpuffpatch" ]
87  sources = [
88    "src/file_stream.cc",
89    "src/memory_stream.cc",
90    "src/puffdiff.cc",
91    "src/utils.cc",
92  ]
93}
94
95pkg_config("libbrillo") {
96  pkg_deps = [ "libbrillo" ]
97}
98
99executable("puffin") {
100  configs += [
101    ":libbrillo",
102    ":target_defaults",
103  ]
104  deps = [ ":libpuffdiff" ]
105  sources = [
106    "src/extent_stream.cc",
107    "src/main.cc",
108  ]
109}
110
111if (use.test) {
112  executable("puffin_test") {
113    configs += [
114      "//common-mk:test",
115      ":libbrillo",
116      ":target_defaults",
117    ]
118    sources = [
119      "src/bit_io_unittest.cc",
120      "src/extent_stream.cc",
121      "src/patching_unittest.cc",
122      "src/puff_io_unittest.cc",
123      "src/puffin_unittest.cc",
124      "src/stream_unittest.cc",
125      "src/unittest_common.cc",
126      "src/utils_unittest.cc",
127    ]
128    deps = [
129      ":libpuffdiff",
130      "//common-mk/testrunner",
131    ]
132  }
133}
134
135if (use.fuzzer) {
136  executable("puffin_huff_fuzzer") {
137    configs += [
138      "//common-mk/common_fuzzer",
139      ":libbrillo",
140      ":target_defaults",
141    ]
142    deps = [ ":libpuffpatch" ]
143    sources = [ "src/fuzzer_huff.cc" ]
144  }
145  executable("puffin_puff_fuzzer") {
146    configs += [
147      "//common-mk/common_fuzzer",
148      ":libbrillo",
149      ":target_defaults",
150    ]
151    deps = [ ":libpuffpatch" ]
152    sources = [ "src/fuzzer_puff.cc" ]
153  }
154  executable("puffin_puffpatch_fuzzer") {
155    configs += [
156      "//common-mk/common_fuzzer",
157      ":libbrillo",
158      ":target_defaults",
159    ]
160    deps = [ ":libpuffdiff" ]
161    sources = [ "src/fuzzer_puffpatch.cc" ]
162  }
163}
164