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