1*61c4878aSAndroid Build Coastguard Worker# Copyright 2021 The Pigweed Authors 2*61c4878aSAndroid Build Coastguard Worker# 3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of 5*61c4878aSAndroid Build Coastguard Worker# the License at 6*61c4878aSAndroid Build Coastguard Worker# 7*61c4878aSAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 8*61c4878aSAndroid Build Coastguard Worker# 9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under 13*61c4878aSAndroid Build Coastguard Worker# the License. 14*61c4878aSAndroid Build Coastguard Worker 15*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni") 16*61c4878aSAndroid Build Coastguard Worker 17*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/module_config.gni") 18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_crypto/backend.gni") 19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni") 20*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_protobuf_compiler/proto.gni") 21*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_third_party/nanopb/nanopb.gni") 22*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_third_party/protobuf/protobuf.gni") 23*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_thread/backend.gni") 24*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_unit_test/test.gni") 25*61c4878aSAndroid Build Coastguard Worker 26*61c4878aSAndroid Build Coastguard Workerdeclare_args() { 27*61c4878aSAndroid Build Coastguard Worker # The build target that overrides the default configuration options for this 28*61c4878aSAndroid Build Coastguard Worker # module. This should point to a source set that provides defines through a 29*61c4878aSAndroid Build Coastguard Worker # public config (which may -include a file or add defines directly). 30*61c4878aSAndroid Build Coastguard Worker pw_software_update_CONFIG = pw_build_DEFAULT_MODULE_CONFIG 31*61c4878aSAndroid Build Coastguard Worker} 32*61c4878aSAndroid Build Coastguard Worker 33*61c4878aSAndroid Build Coastguard Workerconfig("public_include_path") { 34*61c4878aSAndroid Build Coastguard Worker include_dirs = [ "public" ] 35*61c4878aSAndroid Build Coastguard Worker visibility = [ ":*" ] 36*61c4878aSAndroid Build Coastguard Worker} 37*61c4878aSAndroid Build Coastguard Worker 38*61c4878aSAndroid Build Coastguard Workerpw_source_set("config") { 39*61c4878aSAndroid Build Coastguard Worker public = [ "public/pw_software_update/config.h" ] 40*61c4878aSAndroid Build Coastguard Worker public_configs = [ ":public_include_path" ] 41*61c4878aSAndroid Build Coastguard Worker public_deps = [ pw_software_update_CONFIG ] 42*61c4878aSAndroid Build Coastguard Worker} 43*61c4878aSAndroid Build Coastguard Worker 44*61c4878aSAndroid Build Coastguard Workerpw_proto_library("protos") { 45*61c4878aSAndroid Build Coastguard Worker deps = [ 46*61c4878aSAndroid Build Coastguard Worker "$dir_pw_protobuf:common_protos", 47*61c4878aSAndroid Build Coastguard Worker "$dir_pw_tokenizer:proto", 48*61c4878aSAndroid Build Coastguard Worker ] 49*61c4878aSAndroid Build Coastguard Worker 50*61c4878aSAndroid Build Coastguard Worker if (dir_pw_third_party_protobuf != "") { 51*61c4878aSAndroid Build Coastguard Worker # nanopb does not automatically generate the well-known types. If we have 52*61c4878aSAndroid Build Coastguard Worker # a checkout of the protobuf repo, add it here so we can enable the nanopb 53*61c4878aSAndroid Build Coastguard Worker # targets. 54*61c4878aSAndroid Build Coastguard Worker deps += [ "$dir_pw_third_party/protobuf:wellknown_types" ] 55*61c4878aSAndroid Build Coastguard Worker } 56*61c4878aSAndroid Build Coastguard Worker 57*61c4878aSAndroid Build Coastguard Worker sources = [ 58*61c4878aSAndroid Build Coastguard Worker "bundled_update.proto", 59*61c4878aSAndroid Build Coastguard Worker "tuf.proto", 60*61c4878aSAndroid Build Coastguard Worker "update_bundle.proto", 61*61c4878aSAndroid Build Coastguard Worker ] 62*61c4878aSAndroid Build Coastguard Worker inputs = [ 63*61c4878aSAndroid Build Coastguard Worker "bundled_update.pwpb_options", 64*61c4878aSAndroid Build Coastguard Worker "bundled_update.options", 65*61c4878aSAndroid Build Coastguard Worker ] 66*61c4878aSAndroid Build Coastguard Worker prefix = "pw_software_update" 67*61c4878aSAndroid Build Coastguard Worker python_package = "py" 68*61c4878aSAndroid Build Coastguard Worker} 69*61c4878aSAndroid Build Coastguard Worker 70*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") { 71*61c4878aSAndroid Build Coastguard Worker sources = [ 72*61c4878aSAndroid Build Coastguard Worker "cli.rst", 73*61c4878aSAndroid Build Coastguard Worker "design.rst", 74*61c4878aSAndroid Build Coastguard Worker "docs.rst", 75*61c4878aSAndroid Build Coastguard Worker "get_started.rst", 76*61c4878aSAndroid Build Coastguard Worker "guides.rst", 77*61c4878aSAndroid Build Coastguard Worker ] 78*61c4878aSAndroid Build Coastguard Worker} 79*61c4878aSAndroid Build Coastguard Worker 80*61c4878aSAndroid Build Coastguard Workerif (pw_crypto_SHA256_BACKEND != "" && pw_crypto_ECDSA_BACKEND != "") { 81*61c4878aSAndroid Build Coastguard Worker pw_source_set("openable_reader") { 82*61c4878aSAndroid Build Coastguard Worker public_configs = [ ":public_include_path" ] 83*61c4878aSAndroid Build Coastguard Worker public_deps = [ dir_pw_stream ] 84*61c4878aSAndroid Build Coastguard Worker public = [ "public/pw_software_update/openable_reader.h" ] 85*61c4878aSAndroid Build Coastguard Worker } 86*61c4878aSAndroid Build Coastguard Worker 87*61c4878aSAndroid Build Coastguard Worker pw_source_set("blob_store_openable_reader") { 88*61c4878aSAndroid Build Coastguard Worker public_configs = [ ":public_include_path" ] 89*61c4878aSAndroid Build Coastguard Worker public_deps = [ 90*61c4878aSAndroid Build Coastguard Worker ":openable_reader", 91*61c4878aSAndroid Build Coastguard Worker dir_pw_blob_store, 92*61c4878aSAndroid Build Coastguard Worker ] 93*61c4878aSAndroid Build Coastguard Worker public = [ "public/pw_software_update/blob_store_openable_reader.h" ] 94*61c4878aSAndroid Build Coastguard Worker } 95*61c4878aSAndroid Build Coastguard Worker 96*61c4878aSAndroid Build Coastguard Worker pw_source_set("update_bundle") { 97*61c4878aSAndroid Build Coastguard Worker public_configs = [ ":public_include_path" ] 98*61c4878aSAndroid Build Coastguard Worker public_deps = [ 99*61c4878aSAndroid Build Coastguard Worker ":blob_store_openable_reader", 100*61c4878aSAndroid Build Coastguard Worker ":openable_reader", 101*61c4878aSAndroid Build Coastguard Worker "$dir_pw_stream:interval_reader", 102*61c4878aSAndroid Build Coastguard Worker dir_pw_protobuf, 103*61c4878aSAndroid Build Coastguard Worker dir_pw_result, 104*61c4878aSAndroid Build Coastguard Worker dir_pw_status, 105*61c4878aSAndroid Build Coastguard Worker dir_pw_stream, 106*61c4878aSAndroid Build Coastguard Worker ] 107*61c4878aSAndroid Build Coastguard Worker public = [ 108*61c4878aSAndroid Build Coastguard Worker "public/pw_software_update/bundled_update_backend.h", 109*61c4878aSAndroid Build Coastguard Worker "public/pw_software_update/manifest_accessor.h", 110*61c4878aSAndroid Build Coastguard Worker "public/pw_software_update/update_bundle_accessor.h", 111*61c4878aSAndroid Build Coastguard Worker ] 112*61c4878aSAndroid Build Coastguard Worker deps = [ 113*61c4878aSAndroid Build Coastguard Worker ":config", 114*61c4878aSAndroid Build Coastguard Worker ":protos.pwpb", 115*61c4878aSAndroid Build Coastguard Worker "$dir_pw_crypto:ecdsa", 116*61c4878aSAndroid Build Coastguard Worker "$dir_pw_crypto:sha256", 117*61c4878aSAndroid Build Coastguard Worker dir_pw_log, 118*61c4878aSAndroid Build Coastguard Worker dir_pw_string, 119*61c4878aSAndroid Build Coastguard Worker ] 120*61c4878aSAndroid Build Coastguard Worker sources = [ 121*61c4878aSAndroid Build Coastguard Worker "manifest_accessor.cc", 122*61c4878aSAndroid Build Coastguard Worker "update_bundle_accessor.cc", 123*61c4878aSAndroid Build Coastguard Worker ] 124*61c4878aSAndroid Build Coastguard Worker } 125*61c4878aSAndroid Build Coastguard Worker} else { 126*61c4878aSAndroid Build Coastguard Worker group("openable_reader") { 127*61c4878aSAndroid Build Coastguard Worker } 128*61c4878aSAndroid Build Coastguard Worker group("blob_store_openable_reader") { 129*61c4878aSAndroid Build Coastguard Worker } 130*61c4878aSAndroid Build Coastguard Worker group("update_bundle") { 131*61c4878aSAndroid Build Coastguard Worker } 132*61c4878aSAndroid Build Coastguard Worker} 133*61c4878aSAndroid Build Coastguard Worker 134*61c4878aSAndroid Build Coastguard Workerif (dir_pw_third_party_nanopb != "" && dir_pw_third_party_protobuf != "") { 135*61c4878aSAndroid Build Coastguard Worker pw_source_set("bundled_update_service") { 136*61c4878aSAndroid Build Coastguard Worker public_configs = [ ":public_include_path" ] 137*61c4878aSAndroid Build Coastguard Worker public_deps = [ 138*61c4878aSAndroid Build Coastguard Worker ":protos.nanopb_rpc", 139*61c4878aSAndroid Build Coastguard Worker ":update_bundle", 140*61c4878aSAndroid Build Coastguard Worker dir_pw_result, 141*61c4878aSAndroid Build Coastguard Worker dir_pw_status, 142*61c4878aSAndroid Build Coastguard Worker dir_pw_work_queue, 143*61c4878aSAndroid Build Coastguard Worker ] 144*61c4878aSAndroid Build Coastguard Worker deps = [ 145*61c4878aSAndroid Build Coastguard Worker ":config", 146*61c4878aSAndroid Build Coastguard Worker ":protos.pwpb", 147*61c4878aSAndroid Build Coastguard Worker "$dir_pw_sync:borrow", 148*61c4878aSAndroid Build Coastguard Worker "$dir_pw_sync:lock_annotations", 149*61c4878aSAndroid Build Coastguard Worker "$dir_pw_sync:mutex", 150*61c4878aSAndroid Build Coastguard Worker dir_pw_log, 151*61c4878aSAndroid Build Coastguard Worker dir_pw_string, 152*61c4878aSAndroid Build Coastguard Worker dir_pw_tokenizer, 153*61c4878aSAndroid Build Coastguard Worker ] 154*61c4878aSAndroid Build Coastguard Worker public = [ "public/pw_software_update/bundled_update_service.h" ] 155*61c4878aSAndroid Build Coastguard Worker sources = [ "bundled_update_service.cc" ] 156*61c4878aSAndroid Build Coastguard Worker } 157*61c4878aSAndroid Build Coastguard Worker} else { 158*61c4878aSAndroid Build Coastguard Worker group("bundled_update_service") { 159*61c4878aSAndroid Build Coastguard Worker } 160*61c4878aSAndroid Build Coastguard Worker} 161*61c4878aSAndroid Build Coastguard Worker 162*61c4878aSAndroid Build Coastguard Workerpw_source_set("bundled_update_service_pwpb") { 163*61c4878aSAndroid Build Coastguard Worker public_configs = [ ":public_include_path" ] 164*61c4878aSAndroid Build Coastguard Worker public_deps = [ 165*61c4878aSAndroid Build Coastguard Worker ":protos.pwpb_rpc", 166*61c4878aSAndroid Build Coastguard Worker ":update_bundle", 167*61c4878aSAndroid Build Coastguard Worker dir_pw_result, 168*61c4878aSAndroid Build Coastguard Worker dir_pw_status, 169*61c4878aSAndroid Build Coastguard Worker dir_pw_work_queue, 170*61c4878aSAndroid Build Coastguard Worker ] 171*61c4878aSAndroid Build Coastguard Worker deps = [ 172*61c4878aSAndroid Build Coastguard Worker ":config", 173*61c4878aSAndroid Build Coastguard Worker ":protos.pwpb", 174*61c4878aSAndroid Build Coastguard Worker "$dir_pw_sync:borrow", 175*61c4878aSAndroid Build Coastguard Worker "$dir_pw_sync:lock_annotations", 176*61c4878aSAndroid Build Coastguard Worker "$dir_pw_sync:mutex", 177*61c4878aSAndroid Build Coastguard Worker dir_pw_log, 178*61c4878aSAndroid Build Coastguard Worker dir_pw_string, 179*61c4878aSAndroid Build Coastguard Worker dir_pw_tokenizer, 180*61c4878aSAndroid Build Coastguard Worker ] 181*61c4878aSAndroid Build Coastguard Worker public = [ "public/pw_software_update/bundled_update_service_pwpb.h" ] 182*61c4878aSAndroid Build Coastguard Worker sources = [ "bundled_update_service_pwpb.cc" ] 183*61c4878aSAndroid Build Coastguard Worker} 184*61c4878aSAndroid Build Coastguard Worker 185*61c4878aSAndroid Build Coastguard Workerpw_python_action("generate_test_bundle") { 186*61c4878aSAndroid Build Coastguard Worker header_output = "$target_gen_dir/$target_name/test_bundles.h" 187*61c4878aSAndroid Build Coastguard Worker script = "py/pw_software_update/generate_test_bundle.py" 188*61c4878aSAndroid Build Coastguard Worker python_deps = [ 189*61c4878aSAndroid Build Coastguard Worker ":protos.python", 190*61c4878aSAndroid Build Coastguard Worker "py", 191*61c4878aSAndroid Build Coastguard Worker ] 192*61c4878aSAndroid Build Coastguard Worker outputs = [ header_output ] 193*61c4878aSAndroid Build Coastguard Worker args = [ rebase_path(header_output) ] 194*61c4878aSAndroid Build Coastguard Worker} 195*61c4878aSAndroid Build Coastguard Worker 196*61c4878aSAndroid Build Coastguard Workerconfig("generated_test_bundle_include") { 197*61c4878aSAndroid Build Coastguard Worker _generated_outputs = get_target_outputs(":generate_test_bundle") 198*61c4878aSAndroid Build Coastguard Worker include_dirs = [ get_path_info(_generated_outputs[0], "dir") ] 199*61c4878aSAndroid Build Coastguard Worker} 200*61c4878aSAndroid Build Coastguard Worker 201*61c4878aSAndroid Build Coastguard Workerall_dependency_met = 202*61c4878aSAndroid Build Coastguard Worker dir_pw_third_party_nanopb != "" && dir_pw_third_party_protobuf != "" && 203*61c4878aSAndroid Build Coastguard Worker pw_thread_THREAD_BACKEND != "" && pw_crypto_SHA256_BACKEND != "" && 204*61c4878aSAndroid Build Coastguard Worker pw_crypto_ECDSA_BACKEND != "" 205*61c4878aSAndroid Build Coastguard Worker 206*61c4878aSAndroid Build Coastguard Workerpw_test("update_bundle_test") { 207*61c4878aSAndroid Build Coastguard Worker enable_if = all_dependency_met 208*61c4878aSAndroid Build Coastguard Worker sources = [ "update_bundle_test.cc" ] 209*61c4878aSAndroid Build Coastguard Worker public_deps = [ 210*61c4878aSAndroid Build Coastguard Worker ":blob_store_openable_reader", 211*61c4878aSAndroid Build Coastguard Worker ":bundled_update_service", 212*61c4878aSAndroid Build Coastguard Worker ":generate_test_bundle", 213*61c4878aSAndroid Build Coastguard Worker ":update_bundle", 214*61c4878aSAndroid Build Coastguard Worker "$dir_pw_kvs:fake_flash", 215*61c4878aSAndroid Build Coastguard Worker "$dir_pw_kvs:fake_flash_test_key_value_store", 216*61c4878aSAndroid Build Coastguard Worker dir_pw_blob_store, 217*61c4878aSAndroid Build Coastguard Worker ] 218*61c4878aSAndroid Build Coastguard Worker configs = [ ":generated_test_bundle_include" ] 219*61c4878aSAndroid Build Coastguard Worker} 220*61c4878aSAndroid Build Coastguard Worker 221*61c4878aSAndroid Build Coastguard Workerpw_test_group("tests") { 222*61c4878aSAndroid Build Coastguard Worker tests = [ 223*61c4878aSAndroid Build Coastguard Worker ":bundled_update_service_pwpb_test", 224*61c4878aSAndroid Build Coastguard Worker ":bundled_update_service_test", 225*61c4878aSAndroid Build Coastguard Worker ":update_bundle_test", 226*61c4878aSAndroid Build Coastguard Worker ] 227*61c4878aSAndroid Build Coastguard Worker} 228*61c4878aSAndroid Build Coastguard Worker 229*61c4878aSAndroid Build Coastguard Workerpw_test("bundled_update_service_test") { 230*61c4878aSAndroid Build Coastguard Worker enable_if = all_dependency_met 231*61c4878aSAndroid Build Coastguard Worker sources = [ "bundled_update_service_test.cc" ] 232*61c4878aSAndroid Build Coastguard Worker public_deps = [ ":bundled_update_service" ] 233*61c4878aSAndroid Build Coastguard Worker} 234*61c4878aSAndroid Build Coastguard Worker 235*61c4878aSAndroid Build Coastguard Workerpw_test("bundled_update_service_pwpb_test") { 236*61c4878aSAndroid Build Coastguard Worker enable_if = pw_thread_THREAD_BACKEND != "" && 237*61c4878aSAndroid Build Coastguard Worker pw_crypto_SHA256_BACKEND != "" && pw_crypto_ECDSA_BACKEND != "" 238*61c4878aSAndroid Build Coastguard Worker sources = [ "bundled_update_service_pwpb_test.cc" ] 239*61c4878aSAndroid Build Coastguard Worker public_deps = [ ":bundled_update_service_pwpb" ] 240*61c4878aSAndroid Build Coastguard Worker} 241