xref: /aosp_15_r20/external/zucchini/BUILD.gn (revision a03ca8b91e029cd15055c20c78c2e087c84792e4)
1# 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
5import("//build/buildflag_header.gni")
6import("//chrome/process_version_rc_template.gni")
7import("//testing/test.gni")
8
9buildflag_header("buildflags") {
10  header = "buildflags.h"
11
12  # Disable DEX on Windows Official Builds.
13  _enable_dex = !(is_win && is_official_build)
14  _enable_elf = true
15  _enable_win = true
16
17  # Disable ZTF (Zucchini Text Format) on official builds it is for testing only.
18  _enable_ztf = !is_official_build
19  flags = [
20    "ENABLE_DEX=$_enable_dex",
21    "ENABLE_ELF=$_enable_elf",
22    "ENABLE_WIN=$_enable_win",
23    "ENABLE_ZTF=$_enable_ztf",
24  ]
25}
26
27static_library("zucchini_lib") {
28  sources = [
29    "abs32_utils.cc",
30    "abs32_utils.h",
31    "address_translator.cc",
32    "address_translator.h",
33    "algorithm.h",
34    "arm_utils.cc",
35    "arm_utils.h",
36    "binary_data_histogram.cc",
37    "binary_data_histogram.h",
38    "buffer_sink.cc",
39    "buffer_sink.h",
40    "buffer_source.cc",
41    "buffer_source.h",
42    "buffer_view.h",
43    "crc32.cc",
44    "crc32.h",
45    "disassembler.cc",
46    "disassembler.h",
47    "disassembler_dex.cc",
48    "disassembler_dex.h",
49    "disassembler_elf.cc",
50    "disassembler_elf.h",
51    "disassembler_no_op.cc",
52    "disassembler_no_op.h",
53    "disassembler_win32.cc",
54    "disassembler_win32.h",
55    "disassembler_ztf.cc",
56    "disassembler_ztf.h",
57    "element_detection.cc",
58    "element_detection.h",
59    "encoded_view.cc",
60    "encoded_view.h",
61    "ensemble_matcher.cc",
62    "ensemble_matcher.h",
63    "equivalence_map.cc",
64    "equivalence_map.h",
65    "heuristic_ensemble_matcher.cc",
66    "heuristic_ensemble_matcher.h",
67    "image_index.cc",
68    "image_index.h",
69    "image_utils.h",
70    "imposed_ensemble_matcher.cc",
71    "imposed_ensemble_matcher.h",
72    "io_utils.cc",
73    "io_utils.h",
74    "patch_reader.cc",
75    "patch_reader.h",
76    "patch_utils.h",
77    "patch_writer.cc",
78    "patch_writer.h",
79    "reference_bytes_mixer.cc",
80    "reference_bytes_mixer.h",
81    "reference_set.cc",
82    "reference_set.h",
83    "rel32_finder.cc",
84    "rel32_finder.h",
85    "rel32_utils.cc",
86    "rel32_utils.h",
87    "reloc_elf.cc",
88    "reloc_elf.h",
89    "reloc_win32.cc",
90    "reloc_win32.h",
91    "suffix_array.h",
92    "target_pool.cc",
93    "target_pool.h",
94    "targets_affinity.cc",
95    "targets_affinity.h",
96    "type_dex.h",
97    "type_elf.h",
98    "type_win_pe.h",
99    "typed_value.h",
100    "version_info.h",
101    "zucchini.h",
102    "zucchini_apply.cc",
103    "zucchini_apply.h",
104    "zucchini_gen.cc",
105    "zucchini_gen.h",
106    "zucchini_tools.cc",
107    "zucchini_tools.h",
108  ]
109
110  deps = [
111    ":buildflags",
112    "//base",
113  ]
114}
115
116static_library("zucchini_io") {
117  sources = [
118    "mapped_file.cc",
119    "mapped_file.h",
120    "zucchini_integration.cc",
121    "zucchini_integration.h",
122  ]
123
124  deps = [
125    ":zucchini_lib",
126    "//base",
127  ]
128}
129
130executable("zucchini") {
131  sources = [
132    "main_utils.cc",
133    "main_utils.h",
134    "zucchini_commands.cc",
135    "zucchini_commands.h",
136    "zucchini_main.cc",
137  ]
138
139  deps = [
140    ":zucchini_io",
141    ":zucchini_lib",
142    "//base",
143  ]
144
145  if (is_win) {
146    deps += [ ":zucchini_exe_version" ]
147  }
148}
149
150if (is_win) {
151  process_version_rc_template("zucchini_exe_version") {
152    template_file = "zucchini_exe_version.rc.version"
153    output = "$target_gen_dir/zucchini_exe_version.rc"
154  }
155}
156
157test("zucchini_unittests") {
158  sources = [
159    "abs32_utils_unittest.cc",
160    "address_translator_unittest.cc",
161    "algorithm_unittest.cc",
162    "arm_utils_unittest.cc",
163    "binary_data_histogram_unittest.cc",
164    "buffer_sink_unittest.cc",
165    "buffer_source_unittest.cc",
166    "buffer_view_unittest.cc",
167    "crc32_unittest.cc",
168    "disassembler_dex_unittest.cc",
169    "disassembler_elf_unittest.cc",
170    "disassembler_ztf_unittest.cc",
171    "element_detection_unittest.cc",
172    "encoded_view_unittest.cc",
173    "equivalence_map_unittest.cc",
174    "image_index_unittest.cc",
175    "image_utils_unittest.cc",
176    "imposed_ensemble_matcher_unittest.cc",
177    "io_utils_unittest.cc",
178    "mapped_file_unittest.cc",
179    "patch_read_write_unittest.cc",
180    "patch_utils_unittest.cc",
181    "reference_set_unittest.cc",
182    "rel32_finder_unittest.cc",
183    "rel32_utils_unittest.cc",
184    "reloc_elf_unittest.cc",
185    "reloc_win32_unittest.cc",
186    "suffix_array_unittest.cc",
187    "target_pool_unittest.cc",
188    "targets_affinity_unittest.cc",
189    "test_disassembler.cc",
190    "test_disassembler.h",
191    "test_reference_reader.cc",
192    "test_reference_reader.h",
193    "test_utils.cc",
194    "test_utils.h",
195    "typed_value_unittest.cc",
196    "zucchini_apply_unittest.cc",
197    "zucchini_gen_unittest.cc",
198  ]
199
200  deps = [
201    ":zucchini_io",
202    ":zucchini_lib",
203    "//base",
204    "//base/test:run_all_unittests",
205    "//base/test:test_support",
206    "//testing/gtest",
207  ]
208}
209
210test("zucchini_integration_test") {
211  sources = [ "integration_test.cc" ]
212
213  deps = [
214    ":zucchini_lib",
215    "//base",
216    "//base/test:run_all_unittests",
217    "//base/test:test_support",
218    "//testing/gtest",
219  ]
220
221  data = [ "testdata" ]
222}
223
224# Group to build and depend on all the Zucchini related fuzzers.
225group("zucchini_fuzzers") {
226  testonly = true
227  deps = [
228    "//components/zucchini/fuzzers:zucchini_disassembler_dex_fuzzer",
229    "//components/zucchini/fuzzers:zucchini_disassembler_win32_fuzzer",
230    "//components/zucchini/fuzzers:zucchini_patch_fuzzer",
231  ]
232
233  # Ensure protoc is available.
234  # Disabled on Windows due to crbug/844826.
235  if (current_toolchain == host_toolchain && !is_win) {
236    deps += [
237      "//components/zucchini/fuzzers:zucchini_apply_fuzzer",
238      "//components/zucchini/fuzzers:zucchini_imposed_ensemble_matcher_fuzzer",
239      "//components/zucchini/fuzzers:zucchini_raw_gen_fuzzer",
240      "//components/zucchini/fuzzers:zucchini_ztf_gen_fuzzer",
241    ]
242  }
243}
244