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