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/python.gni") 18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.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("nanopb.gni") 22*61c4878aSAndroid Build Coastguard Worker 23*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") { 24*61c4878aSAndroid Build Coastguard Worker sources = [ "docs.rst" ] 25*61c4878aSAndroid Build Coastguard Worker} 26*61c4878aSAndroid Build Coastguard Worker 27*61c4878aSAndroid Build Coastguard Worker# This file defines a GN source_set for an external installation of nanopb. 28*61c4878aSAndroid Build Coastguard Worker# To use, checkout the nanopb source into a directory, then set the build arg 29*61c4878aSAndroid Build Coastguard Worker# dir_pw_third_party_nanopb to point to that directory. The nanopb library 30*61c4878aSAndroid Build Coastguard Worker# will be available in GN at "$dir_pw_third_party/nanopb". 31*61c4878aSAndroid Build Coastguard Workerif (dir_pw_third_party_nanopb != "") { 32*61c4878aSAndroid Build Coastguard Worker config("includes") { 33*61c4878aSAndroid Build Coastguard Worker include_dirs = [ dir_pw_third_party_nanopb ] 34*61c4878aSAndroid Build Coastguard Worker } 35*61c4878aSAndroid Build Coastguard Worker 36*61c4878aSAndroid Build Coastguard Worker pw_source_set("nanopb") { 37*61c4878aSAndroid Build Coastguard Worker public_configs = [ ":includes" ] 38*61c4878aSAndroid Build Coastguard Worker public = [ 39*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb.h", 40*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_common.h", 41*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_decode.h", 42*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_encode.h", 43*61c4878aSAndroid Build Coastguard Worker ] 44*61c4878aSAndroid Build Coastguard Worker public_deps = [ pw_third_party_nanopb_CONFIG ] 45*61c4878aSAndroid Build Coastguard Worker sources = [ 46*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_common.c", 47*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_decode.c", 48*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_encode.c", 49*61c4878aSAndroid Build Coastguard Worker ] 50*61c4878aSAndroid Build Coastguard Worker } 51*61c4878aSAndroid Build Coastguard Worker 52*61c4878aSAndroid Build Coastguard Worker pw_proto_library("proto") { 53*61c4878aSAndroid Build Coastguard Worker strip_prefix = "$dir_pw_third_party_nanopb/generator/proto" 54*61c4878aSAndroid Build Coastguard Worker sources = [ "$dir_pw_third_party_nanopb/generator/proto/nanopb.proto" ] 55*61c4878aSAndroid Build Coastguard Worker python_module_as_package = "nanopb_pb2" 56*61c4878aSAndroid Build Coastguard Worker } 57*61c4878aSAndroid Build Coastguard Worker 58*61c4878aSAndroid Build Coastguard Worker # Generates nanopb_pb2.py, which is needed to compile protobufs with Nanopb. 59*61c4878aSAndroid Build Coastguard Worker pw_python_script("generate_nanopb_proto") { 60*61c4878aSAndroid Build Coastguard Worker sources = [ "generate_nanopb_proto.py" ] 61*61c4878aSAndroid Build Coastguard Worker pylintrc = "$dir_pigweed/.pylintrc" 62*61c4878aSAndroid Build Coastguard Worker mypy_ini = "$dir_pigweed/.mypy.ini" 63*61c4878aSAndroid Build Coastguard Worker ruff_toml = "$dir_pigweed/.ruff.toml" 64*61c4878aSAndroid Build Coastguard Worker 65*61c4878aSAndroid Build Coastguard Worker # Path to protoc binary. This variable is relative to the build directory, 66*61c4878aSAndroid Build Coastguard Worker # so it must be rebased as a source-tree-absolute path. 67*61c4878aSAndroid Build Coastguard Worker _protoc_binary_path = 68*61c4878aSAndroid Build Coastguard Worker "//" + 69*61c4878aSAndroid Build Coastguard Worker rebase_path(pw_protobuf_compiler_PROTOC_BINARY, "//", root_build_dir) 70*61c4878aSAndroid Build Coastguard Worker 71*61c4878aSAndroid Build Coastguard Worker if (host_os == "win") { 72*61c4878aSAndroid Build Coastguard Worker if (get_path_info(_protoc_binary_path, "extension") != "exe" && 73*61c4878aSAndroid Build Coastguard Worker get_path_info(_protoc_binary_path, "extension") != "bat") { 74*61c4878aSAndroid Build Coastguard Worker _protoc_binary_path += ".exe" 75*61c4878aSAndroid Build Coastguard Worker } 76*61c4878aSAndroid Build Coastguard Worker } 77*61c4878aSAndroid Build Coastguard Worker 78*61c4878aSAndroid Build Coastguard Worker inputs = [ 79*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb.h", 80*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_common.h", 81*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_decode.h", 82*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_encode.h", 83*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_common.c", 84*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_decode.c", 85*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/pb_encode.c", 86*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/nanopb_generator.py", 87*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/proto/google/protobuf", 88*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/proto/google/protobuf/descriptor.proto", 89*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/proto/__init__.py", 90*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/proto/nanopb.proto", 91*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/proto/_utils.py", 92*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/protoc-gen-nanopb", 93*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/nanopb_generator.py2", 94*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/protoc-gen-nanopb-py2", 95*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/protoc", 96*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/protoc-gen-nanopb.bat", 97*61c4878aSAndroid Build Coastguard Worker "$dir_pw_third_party_nanopb/generator/protoc.bat", 98*61c4878aSAndroid Build Coastguard Worker _protoc_binary_path, 99*61c4878aSAndroid Build Coastguard Worker ] 100*61c4878aSAndroid Build Coastguard Worker action = { 101*61c4878aSAndroid Build Coastguard Worker args = [ 102*61c4878aSAndroid Build Coastguard Worker "--nanopb-root=" + 103*61c4878aSAndroid Build Coastguard Worker rebase_path(dir_pw_third_party_nanopb, root_build_dir), 104*61c4878aSAndroid Build Coastguard Worker "--protoc-binary=" + pw_protobuf_compiler_PROTOC_BINARY, 105*61c4878aSAndroid Build Coastguard Worker ] 106*61c4878aSAndroid Build Coastguard Worker if (pw_third_party_nanopb_AGGRESSIVE_NANOPB_PB2_REGEN) { 107*61c4878aSAndroid Build Coastguard Worker args += [ "--aggressive-regen" ] 108*61c4878aSAndroid Build Coastguard Worker } 109*61c4878aSAndroid Build Coastguard Worker 110*61c4878aSAndroid Build Coastguard Worker # Nanopb writes a file to: 111*61c4878aSAndroid Build Coastguard Worker # $dir_pw_third_party_nanopb/generator/proto/nanopb_pb2.py 112*61c4878aSAndroid Build Coastguard Worker # Since this is in the source tree, we can't track it as an output. 113*61c4878aSAndroid Build Coastguard Worker # Use a stamp instead. 114*61c4878aSAndroid Build Coastguard Worker stamp = true 115*61c4878aSAndroid Build Coastguard Worker } 116*61c4878aSAndroid Build Coastguard Worker } 117*61c4878aSAndroid Build Coastguard Worker} else { 118*61c4878aSAndroid Build Coastguard Worker group("nanopb") { 119*61c4878aSAndroid Build Coastguard Worker } 120*61c4878aSAndroid Build Coastguard Worker pw_python_group("generate_nanopb_proto") { 121*61c4878aSAndroid Build Coastguard Worker } 122*61c4878aSAndroid Build Coastguard Worker} 123*61c4878aSAndroid Build Coastguard Worker 124*61c4878aSAndroid Build Coastguard Workerconfig("disable_error_messages_config") { 125*61c4878aSAndroid Build Coastguard Worker defines = [ "PB_NO_ERRMSG=1" ] 126*61c4878aSAndroid Build Coastguard Worker} 127*61c4878aSAndroid Build Coastguard Worker 128*61c4878aSAndroid Build Coastguard Workerpw_source_set("disable_error_messages") { 129*61c4878aSAndroid Build Coastguard Worker public_configs = [ ":disable_error_messages_config" ] 130*61c4878aSAndroid Build Coastguard Worker} 131