xref: /aosp_15_r20/system/chre/build/nanopb.mk (revision 84e339476a462649f82315436d70fd732297a399)
1*84e33947SAndroid Build Coastguard Worker#
2*84e33947SAndroid Build Coastguard Worker# Nanoapp/CHRE NanoPB and Pigweed RPC Makefile
3*84e33947SAndroid Build Coastguard Worker#
4*84e33947SAndroid Build Coastguard Worker# Include this file in your nanoapp Makefile to generate .c source and .h header
5*84e33947SAndroid Build Coastguard Worker# files. ($NANOPB_EXTENSION.c and $NANOPB_EXTENSION.h if $NANOPB_EXTENSION
6*84e33947SAndroid Build Coastguard Worker# is defined) for .proto files specified in the NANOPB_SRCS and PW_RPC_SRCS
7*84e33947SAndroid Build Coastguard Worker# variables.
8*84e33947SAndroid Build Coastguard Worker#
9*84e33947SAndroid Build Coastguard Worker# The generated source files are automatically added to the COMMON_SRCS variable
10*84e33947SAndroid Build Coastguard Worker# for the nanoapp build.
11*84e33947SAndroid Build Coastguard Worker#
12*84e33947SAndroid Build Coastguard Worker# The path to the generated header files is similarly added to the COMMON_CFLAGS.
13*84e33947SAndroid Build Coastguard Worker#
14*84e33947SAndroid Build Coastguard Worker# The NANOPB_OPTIONS variable can be used to supply an .options file to use when
15*84e33947SAndroid Build Coastguard Worker# generating code for all .proto files. Alternatively, if an .options file has
16*84e33947SAndroid Build Coastguard Worker# the same name as a .proto file, it'll be automatically picked up when generating
17*84e33947SAndroid Build Coastguard Worker# code **only** for that .proto file.
18*84e33947SAndroid Build Coastguard Worker#
19*84e33947SAndroid Build Coastguard Worker# NANOPB_FLAGS can be used to supply additional command line arguments to the
20*84e33947SAndroid Build Coastguard Worker# nanopb compiler. Note that this is global and applies to all protobuf
21*84e33947SAndroid Build Coastguard Worker# generated source.
22*84e33947SAndroid Build Coastguard Worker#
23*84e33947SAndroid Build Coastguard Worker# NANOPB_INCLUDES may optionally be used to automatically add one or more
24*84e33947SAndroid Build Coastguard Worker# include path prefixes for C/C++ source and .proto files. For example, if the
25*84e33947SAndroid Build Coastguard Worker# file myprefix/proto/foo.proto is added to NANOPB_SRCS, but you'd like to use
26*84e33947SAndroid Build Coastguard Worker# #include "proto/foo.pb.h" in your source (rather than myprefix/proto/foo.pb.h)
27*84e33947SAndroid Build Coastguard Worker# and/or import "proto/foo.proto" in your .proto files, then set NANOPB_INCLUDES
28*84e33947SAndroid Build Coastguard Worker# to myprefix.
29*84e33947SAndroid Build Coastguard Worker
30*84e33947SAndroid Build Coastguard Worker# Environment Checks ###########################################################
31*84e33947SAndroid Build Coastguard Worker
32*84e33947SAndroid Build Coastguard WorkerHAS_PROTO_SRC = false
33*84e33947SAndroid Build Coastguard Worker
34*84e33947SAndroid Build Coastguard Workerifneq ($(NANOPB_SRCS),)
35*84e33947SAndroid Build Coastguard Workerifeq ($(NANOPB_PREFIX),)
36*84e33947SAndroid Build Coastguard Worker$(error "NANOPB_SRCS is non-empty. You must supply a NANOPB_PREFIX environment \
37*84e33947SAndroid Build Coastguard Worker         variable containing a path to the nanopb project. Example: \
38*84e33947SAndroid Build Coastguard Worker         export NANOPB_PREFIX=$$HOME/path/to/nanopb/nanopb-c")
39*84e33947SAndroid Build Coastguard Workerendif
40*84e33947SAndroid Build Coastguard WorkerHAS_PROTO_SRC = true
41*84e33947SAndroid Build Coastguard Workerendif
42*84e33947SAndroid Build Coastguard Worker
43*84e33947SAndroid Build Coastguard Workerifneq ($(PW_RPC_SRCS),)
44*84e33947SAndroid Build Coastguard Workerifeq ($(NANOPB_PREFIX),)
45*84e33947SAndroid Build Coastguard Worker$(error "PW_RPC_SRCS is non-empty. You must supply a NANOPB_PREFIX environment \
46*84e33947SAndroid Build Coastguard Worker         variable containing a path to the nanopb project. Example: \
47*84e33947SAndroid Build Coastguard Worker         export NANOPB_PREFIX=$$HOME/path/to/nanopb/nanopb-c")
48*84e33947SAndroid Build Coastguard Workerendif
49*84e33947SAndroid Build Coastguard WorkerHAS_PROTO_SRC = true
50*84e33947SAndroid Build Coastguard Workerendif
51*84e33947SAndroid Build Coastguard Worker
52*84e33947SAndroid Build Coastguard Worker################################################################################
53*84e33947SAndroid Build Coastguard Worker# Common #######################################################################
54*84e33947SAndroid Build Coastguard Worker################################################################################
55*84e33947SAndroid Build Coastguard Worker
56*84e33947SAndroid Build Coastguard Workerifeq ($(PROTOC),)
57*84e33947SAndroid Build Coastguard WorkerPROTOC=protoc
58*84e33947SAndroid Build Coastguard Workerendif
59*84e33947SAndroid Build Coastguard Worker
60*84e33947SAndroid Build Coastguard WorkerNANOPB_GEN_PATH = $(OUT)/nanopb_gen
61*84e33947SAndroid Build Coastguard Worker
62*84e33947SAndroid Build Coastguard Workerifeq ($(NANOPB_EXTENSION),)
63*84e33947SAndroid Build Coastguard WorkerNANOPB_EXTENSION = pb
64*84e33947SAndroid Build Coastguard Workerelse
65*84e33947SAndroid Build Coastguard WorkerNANOPB_GENERATOR_FLAGS = --extension=.$(NANOPB_EXTENSION)
66*84e33947SAndroid Build Coastguard Workerendif
67*84e33947SAndroid Build Coastguard Worker
68*84e33947SAndroid Build Coastguard WorkerNANOPB_GEN_SRCS += $(patsubst %.proto, \
69*84e33947SAndroid Build Coastguard Worker                              $(NANOPB_GEN_PATH)/%.$(NANOPB_EXTENSION).c, \
70*84e33947SAndroid Build Coastguard Worker                              $(NANOPB_SRCS))
71*84e33947SAndroid Build Coastguard Worker
72*84e33947SAndroid Build Coastguard Worker# Add Google proto well-known types. See https://protobuf.dev/reference/protobuf/google.protobuf/.
73*84e33947SAndroid Build Coastguard WorkerPROTOBUF_DIR = $(ANDROID_BUILD_TOP)/external/protobuf
74*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(NANOPB_GEN_PATH)/$(PROTOBUF_DIR)/src
75*84e33947SAndroid Build Coastguard Worker
76*84e33947SAndroid Build Coastguard Worker################################################################################
77*84e33947SAndroid Build Coastguard Worker# Common to nanopb & rpc #######################################################
78*84e33947SAndroid Build Coastguard Worker################################################################################
79*84e33947SAndroid Build Coastguard Worker
80*84e33947SAndroid Build Coastguard Workerifeq ($(HAS_PROTO_SRC),true)
81*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(NANOPB_PREFIX)
82*84e33947SAndroid Build Coastguard Worker
83*84e33947SAndroid Build Coastguard Workerifneq ($(NANOPB_INCLUDE_LIBRARY),false)
84*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(NANOPB_PREFIX)/pb_common.c
85*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(NANOPB_PREFIX)/pb_decode.c
86*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(NANOPB_PREFIX)/pb_encode.c
87*84e33947SAndroid Build Coastguard Workerendif
88*84e33947SAndroid Build Coastguard Worker
89*84e33947SAndroid Build Coastguard Worker# NanoPB Compiler Flags
90*84e33947SAndroid Build Coastguard Workerifneq ($(NANOPB_INCLUDE_LIBRARY),false)
91*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -DPB_NO_PACKED_STRUCTS=1
92*84e33947SAndroid Build Coastguard Workerendif
93*84e33947SAndroid Build Coastguard Worker
94*84e33947SAndroid Build Coastguard WorkerNANOPB_PROTOC = $(NANOPB_PREFIX)/generator/protoc-gen-nanopb
95*84e33947SAndroid Build Coastguard Worker
96*84e33947SAndroid Build Coastguard Workerendif # ifeq ($(HAS_PROTO_SRC),true)
97*84e33947SAndroid Build Coastguard Worker
98*84e33947SAndroid Build Coastguard Worker################################################################################
99*84e33947SAndroid Build Coastguard Worker# nanopb #######################################################################
100*84e33947SAndroid Build Coastguard Worker################################################################################
101*84e33947SAndroid Build Coastguard Worker
102*84e33947SAndroid Build Coastguard Workerifneq ($(NANOPB_GEN_SRCS),)
103*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(NANOPB_GEN_PATH)
104*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += $(addprefix -I$(NANOPB_GEN_PATH)/, $(NANOPB_INCLUDES))
105*84e33947SAndroid Build Coastguard Workerendif
106*84e33947SAndroid Build Coastguard Worker
107*84e33947SAndroid Build Coastguard Worker# NanoPB Generator Setup #######################################################
108*84e33947SAndroid Build Coastguard Worker
109*84e33947SAndroid Build Coastguard WorkerNANOPB_GENERATOR_SRCS = $(NANOPB_PREFIX)/generator/proto/nanopb_pb2.py
110*84e33947SAndroid Build Coastguard WorkerNANOPB_GENERATOR_SRCS += $(NANOPB_PREFIX)/generator/proto/plugin_pb2.py
111*84e33947SAndroid Build Coastguard Worker
112*84e33947SAndroid Build Coastguard Worker$(NANOPB_GENERATOR_SRCS):
113*84e33947SAndroid Build Coastguard Worker	cd $(NANOPB_PREFIX)/generator/proto && $(MAKE)
114*84e33947SAndroid Build Coastguard Worker
115*84e33947SAndroid Build Coastguard Workerifneq ($(NANOPB_OPTIONS),)
116*84e33947SAndroid Build Coastguard WorkerNANOPB_OPTIONS_FLAG = --options-file=$(NANOPB_OPTIONS)
117*84e33947SAndroid Build Coastguard Workerelse
118*84e33947SAndroid Build Coastguard WorkerNANOPB_OPTIONS_FLAG =
119*84e33947SAndroid Build Coastguard Workerendif
120*84e33947SAndroid Build Coastguard Worker
121*84e33947SAndroid Build Coastguard WorkerNANOPB_FLAGS += $(addprefix --proto_path=, $(abspath $(NANOPB_INCLUDES)))
122*84e33947SAndroid Build Coastguard Worker
123*84e33947SAndroid Build Coastguard Worker# Generate NanoPB Sources ######################################################
124*84e33947SAndroid Build Coastguard Worker
125*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(NANOPB_GEN_SRCS)
126*84e33947SAndroid Build Coastguard Worker
127*84e33947SAndroid Build Coastguard WorkerNANOPB_PROTOC = $(NANOPB_PREFIX)/generator/protoc-gen-nanopb
128*84e33947SAndroid Build Coastguard Worker
129*84e33947SAndroid Build Coastguard Worker$(NANOPB_GEN_PATH)/%.$(NANOPB_EXTENSION).c \
130*84e33947SAndroid Build Coastguard Worker        $(NANOPB_GEN_PATH)/%.$(NANOPB_EXTENSION).h: %.proto \
131*84e33947SAndroid Build Coastguard Worker                                                    %.options \
132*84e33947SAndroid Build Coastguard Worker                                                    $(NANOPB_GENERATOR_SRCS)
133*84e33947SAndroid Build Coastguard Worker	@echo " [NANOPB] $<"
134*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $(dir $@)
135*84e33947SAndroid Build Coastguard Worker	$(V)PYTHONPATH=$(PYTHONPATH) $(PROTOC) \
136*84e33947SAndroid Build Coastguard Worker	  --plugin=protoc-gen-nanopb=$(NANOPB_PROTOC) \
137*84e33947SAndroid Build Coastguard Worker	  --proto_path=$(abspath $(dir $<)) \
138*84e33947SAndroid Build Coastguard Worker	  $(NANOPB_FLAGS) \
139*84e33947SAndroid Build Coastguard Worker	  --nanopb_out="$(NANOPB_GENERATOR_FLAGS) \
140*84e33947SAndroid Build Coastguard Worker	  --options-file=$(basename $<).options:$(dir $@)" \
141*84e33947SAndroid Build Coastguard Worker	  $(abspath $<)
142*84e33947SAndroid Build Coastguard Worker
143*84e33947SAndroid Build Coastguard Worker$(NANOPB_GEN_PATH)/%.$(NANOPB_EXTENSION).c \
144*84e33947SAndroid Build Coastguard Worker        $(NANOPB_GEN_PATH)/%.$(NANOPB_EXTENSION).h: %.proto \
145*84e33947SAndroid Build Coastguard Worker                                                    $(NANOPB_OPTIONS) \
146*84e33947SAndroid Build Coastguard Worker                                                    $(NANOPB_GENERATOR_SRCS)
147*84e33947SAndroid Build Coastguard Worker	@echo " [NANOPB] $<"
148*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $(dir $@)
149*84e33947SAndroid Build Coastguard Worker	$(V)PYTHONPATH=$(PYTHONPATH) $(PROTOC) \
150*84e33947SAndroid Build Coastguard Worker	  --plugin=protoc-gen-nanopb=$(NANOPB_PROTOC) \
151*84e33947SAndroid Build Coastguard Worker	  --proto_path=$(abspath $(dir $<)) \
152*84e33947SAndroid Build Coastguard Worker	  $(NANOPB_FLAGS) \
153*84e33947SAndroid Build Coastguard Worker	  --nanopb_out="$(NANOPB_GENERATOR_FLAGS) $(NANOPB_OPTIONS_FLAG):$(dir $@)" \
154*84e33947SAndroid Build Coastguard Worker	  $(abspath $<)
155*84e33947SAndroid Build Coastguard Worker
156*84e33947SAndroid Build Coastguard Worker################################################################################
157*84e33947SAndroid Build Coastguard Worker# Specific to pigweed RPC ######################################################
158*84e33947SAndroid Build Coastguard Worker################################################################################
159*84e33947SAndroid Build Coastguard Workerifneq ($(PW_RPC_SRCS),)
160*84e33947SAndroid Build Coastguard Worker
161*84e33947SAndroid Build Coastguard Worker# Location of various Pigweed modules
162*84e33947SAndroid Build Coastguard WorkerPIGWEED_DIR = $(ANDROID_BUILD_TOP)/external/pigweed
163*84e33947SAndroid Build Coastguard WorkerPROTOBUF_DIR = $(ANDROID_BUILD_TOP)/external/protobuf
164*84e33947SAndroid Build Coastguard WorkerCHRE_PREFIX = $(ANDROID_BUILD_TOP)/system/chre
165*84e33947SAndroid Build Coastguard WorkerCHRE_UTIL_DIR = $(CHRE_PREFIX)/util
166*84e33947SAndroid Build Coastguard WorkerCHRE_API_DIR = $(CHRE_PREFIX)/chre_api
167*84e33947SAndroid Build Coastguard WorkerPIGWEED_CHRE_DIR=$(CHRE_PREFIX)/external/pigweed
168*84e33947SAndroid Build Coastguard WorkerPIGWEED_CHRE_UTIL_DIR = $(CHRE_UTIL_DIR)/pigweed
169*84e33947SAndroid Build Coastguard Worker
170*84e33947SAndroid Build Coastguard WorkerPW_RPC_GEN_PATH = $(OUT)/pw_rpc_gen
171*84e33947SAndroid Build Coastguard Worker
172*84e33947SAndroid Build Coastguard Worker# Create proto used for header generation ######################################
173*84e33947SAndroid Build Coastguard Worker
174*84e33947SAndroid Build Coastguard WorkerPW_RPC_PROTO_GENERATOR = $(PIGWEED_DIR)/pw_protobuf_compiler/py/pw_protobuf_compiler/generate_protos.py
175*84e33947SAndroid Build Coastguard WorkerPW_RPC_GENERATOR_PROTO = $(PIGWEED_DIR)/pw_rpc/internal/packet.proto
176*84e33947SAndroid Build Coastguard WorkerPW_RPC_GENERATOR_COMPILED_PROTO = $(PW_RPC_GEN_PATH)/py/pw_rpc/internal/packet_pb2.py
177*84e33947SAndroid Build Coastguard WorkerPW_PROTOBUF_PROTOS = $(PIGWEED_DIR)/pw_protobuf/pw_protobuf_protos/common.proto \
178*84e33947SAndroid Build Coastguard Worker	  $(PIGWEED_DIR)/pw_protobuf/pw_protobuf_protos/field_options.proto \
179*84e33947SAndroid Build Coastguard Worker	  $(PIGWEED_DIR)/pw_protobuf/pw_protobuf_protos/status.proto
180*84e33947SAndroid Build Coastguard Worker
181*84e33947SAndroid Build Coastguard Worker# Modifies PYTHONPATH so that python can see all of pigweed's modules used by
182*84e33947SAndroid Build Coastguard Worker# their protoc plugins
183*84e33947SAndroid Build Coastguard WorkerPW_RPC_GENERATOR_CMD = PYTHONPATH=$$PYTHONPATH:$(PW_RPC_GEN_PATH)/py:$\
184*84e33947SAndroid Build Coastguard Worker  $(PIGWEED_DIR)/pw_status/py:$(PIGWEED_DIR)/pw_protobuf/py:$\
185*84e33947SAndroid Build Coastguard Worker  $(PIGWEED_DIR)/pw_protobuf_compiler/py $(PYTHON)
186*84e33947SAndroid Build Coastguard Worker
187*84e33947SAndroid Build Coastguard Worker$(PW_RPC_GENERATOR_COMPILED_PROTO): $(PW_RPC_GENERATOR_PROTO)
188*84e33947SAndroid Build Coastguard Worker	@echo " [PW_RPC] $<"
189*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $(PW_RPC_GEN_PATH)/py/pw_rpc/internal
190*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $(PW_RPC_GEN_PATH)/py/pw_protobuf_codegen_protos
191*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $(PW_RPC_GEN_PATH)/py/pw_protobuf_protos
192*84e33947SAndroid Build Coastguard Worker	$(V)cp -R $(PIGWEED_DIR)/pw_rpc/py/pw_rpc $(PW_RPC_GEN_PATH)/py/
193*84e33947SAndroid Build Coastguard Worker
194*84e33947SAndroid Build Coastguard Worker	$(PROTOC) -I$(PIGWEED_DIR)/pw_protobuf/pw_protobuf_protos \
195*84e33947SAndroid Build Coastguard Worker	  --experimental_allow_proto3_optional \
196*84e33947SAndroid Build Coastguard Worker	  --python_out=$(PW_RPC_GEN_PATH)/py/pw_protobuf_protos \
197*84e33947SAndroid Build Coastguard Worker	  $(PW_PROTOBUF_PROTOS)
198*84e33947SAndroid Build Coastguard Worker
199*84e33947SAndroid Build Coastguard Worker	$(PROTOC) -I$(PIGWEED_DIR)/pw_protobuf/pw_protobuf_codegen_protos \
200*84e33947SAndroid Build Coastguard Worker	  --experimental_allow_proto3_optional \
201*84e33947SAndroid Build Coastguard Worker	  --python_out=$(PW_RPC_GEN_PATH)/py/pw_protobuf_codegen_protos \
202*84e33947SAndroid Build Coastguard Worker	  $(PIGWEED_DIR)/pw_protobuf/pw_protobuf_codegen_protos/codegen_options.proto
203*84e33947SAndroid Build Coastguard Worker
204*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
205*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/py/pw_rpc/internal \
206*84e33947SAndroid Build Coastguard Worker	  --compile-dir=$(dir $<) --sources $(PW_RPC_GENERATOR_PROTO) \
207*84e33947SAndroid Build Coastguard Worker	  --language python \
208*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions
209*84e33947SAndroid Build Coastguard Worker
210*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
211*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) \
212*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(PIGWEED_DIR)/pw_protobuf/py/pw_protobuf/plugin.py \
213*84e33947SAndroid Build Coastguard Worker	  --compile-dir=$(dir $<) --sources $(PW_RPC_GENERATOR_PROTO) \
214*84e33947SAndroid Build Coastguard Worker	  --language pwpb \
215*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions
216*84e33947SAndroid Build Coastguard Worker
217*84e33947SAndroid Build Coastguard Worker# Generated PW RPC Files #######################################################
218*84e33947SAndroid Build Coastguard Worker
219*84e33947SAndroid Build Coastguard WorkerPW_RPC_GEN_SRCS = $(patsubst %.proto, \
220*84e33947SAndroid Build Coastguard Worker                             $(PW_RPC_GEN_PATH)/%.pb.c, \
221*84e33947SAndroid Build Coastguard Worker                             $(PW_RPC_SRCS))
222*84e33947SAndroid Build Coastguard Worker
223*84e33947SAndroid Build Coastguard Worker# Include to-be-generated files
224*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PW_RPC_GEN_PATH)
225*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PW_RPC_GEN_PATH)/$(PIGWEED_DIR)
226*84e33947SAndroid Build Coastguard Worker
227*84e33947SAndroid Build Coastguard Worker# Add include paths to reference protos directly
228*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += $(addprefix -I$(PW_RPC_GEN_PATH)/, $(abspath $(dir $(PW_RPC_SRCS))))
229*84e33947SAndroid Build Coastguard Worker
230*84e33947SAndroid Build Coastguard Worker# Add include paths to import protos
231*84e33947SAndroid Build Coastguard Workerifneq ($(PW_RPC_INCLUDE_DIRS),)
232*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += $(addprefix -I$(PW_RPC_GEN_PATH)/, $(abspath $(PW_RPC_INCLUDE_DIRS)))
233*84e33947SAndroid Build Coastguard Workerendif
234*84e33947SAndroid Build Coastguard Worker
235*84e33947SAndroid Build Coastguard Worker# Add Google proto well-known types. See https://protobuf.dev/reference/protobuf/google.protobuf/.
236*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PW_RPC_GEN_PATH)/$(PROTOBUF_DIR)/src
237*84e33947SAndroid Build Coastguard Worker
238*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PW_RPC_GEN_SRCS)
239*84e33947SAndroid Build Coastguard Worker
240*84e33947SAndroid Build Coastguard Worker# PW RPC library ###############################################################
241*84e33947SAndroid Build Coastguard Worker
242*84e33947SAndroid Build Coastguard Worker# Pigweed RPC include paths
243*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_assert/public
244*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_bytes/public
245*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_containers/public
246*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_function/public
247*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_log/public
248*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_polyfill/public
249*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_polyfill/public_overrides
250*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_polyfill/standard_library_public
251*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_preprocessor/public
252*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_protobuf/public
253*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_result/public
254*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_rpc/nanopb/public
255*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_rpc/public
256*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_rpc/pwpb/public
257*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_rpc/raw/public
258*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_span/public
259*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_span/public_overrides
260*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_status/public
261*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_stream/public
262*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_string/public
263*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_sync/public
264*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_toolchain/public
265*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_varint/public
266*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/third_party/fuchsia/repo/sdk/lib/fit/include
267*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_DIR)/third_party/fuchsia/repo/sdk/lib/stdcompat/include
268*84e33947SAndroid Build Coastguard Worker
269*84e33947SAndroid Build Coastguard Worker# Pigweed RPC sources
270*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_assert_log/assert_log.cc
271*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_containers/intrusive_item.cc
272*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_protobuf/decoder.cc
273*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_protobuf/encoder.cc
274*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_protobuf/stream_decoder.cc
275*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/call.cc
276*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/channel.cc
277*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/channel_list.cc
278*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/client.cc
279*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/client_call.cc
280*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/endpoint.cc
281*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/packet.cc
282*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/server.cc
283*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/server_call.cc
284*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/service.cc
285*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/nanopb/common.cc
286*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/nanopb/method.cc
287*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/nanopb/server_reader_writer.cc
288*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/pwpb/server_reader_writer.cc
289*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_status/status.cc
290*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_stream/memory_stream.cc
291*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_varint/stream.cc
292*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_varint/varint_c.c
293*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_DIR)/pw_varint/varint.cc
294*84e33947SAndroid Build Coastguard Worker# Pigweed configuration
295*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -DPW_RPC_USE_GLOBAL_MUTEX=0
296*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -DPW_RPC_YIELD_MODE=PW_RPC_YIELD_MODE_BUSY_LOOP
297*84e33947SAndroid Build Coastguard Worker
298*84e33947SAndroid Build Coastguard Worker# Enable closing a client stream.
299*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -DPW_RPC_COMPLETION_REQUEST_CALLBACK
300*84e33947SAndroid Build Coastguard Worker
301*84e33947SAndroid Build Coastguard Worker# Use dynamic channel allocation
302*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -DPW_RPC_DYNAMIC_ALLOCATION
303*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -DPW_RPC_DYNAMIC_CONTAINER\(type\)="chre::DynamicVector<type>"
304*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -DPW_RPC_DYNAMIC_CONTAINER_INCLUDE='"chre/util/dynamic_vector.h"'
305*84e33947SAndroid Build Coastguard Worker
306*84e33947SAndroid Build Coastguard Worker# Add CHRE Pigweed util sources since nanoapps should always use these
307*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_CHRE_UTIL_DIR)/chre_channel_output.cc
308*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_CHRE_UTIL_DIR)/rpc_client.cc
309*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_CHRE_UTIL_DIR)/rpc_helper.cc
310*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(PIGWEED_CHRE_UTIL_DIR)/rpc_server.cc
311*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(CHRE_UTIL_DIR)/nanoapp/callbacks.cc
312*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS += $(CHRE_UTIL_DIR)/dynamic_vector_base.cc
313*84e33947SAndroid Build Coastguard Worker
314*84e33947SAndroid Build Coastguard Worker# CHRE Pigweed overrides
315*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_CHRE_DIR)/pw_log_nanoapp/public_overrides
316*84e33947SAndroid Build Coastguard WorkerCOMMON_CFLAGS += -I$(PIGWEED_CHRE_DIR)/pw_assert_nanoapp/public_overrides
317*84e33947SAndroid Build Coastguard Worker
318*84e33947SAndroid Build Coastguard Worker# Generate PW RPC headers ######################################################
319*84e33947SAndroid Build Coastguard Worker
320*84e33947SAndroid Build Coastguard Worker$(PW_RPC_GEN_PATH)/%.pb.c \
321*84e33947SAndroid Build Coastguard Worker        $(PW_RPC_GEN_PATH)/%.pb.h \
322*84e33947SAndroid Build Coastguard Worker        $(PW_RPC_GEN_PATH)/%.rpc.pb.h \
323*84e33947SAndroid Build Coastguard Worker        $(PW_RPC_GEN_PATH)/%.raw_rpc.pb.h: %.proto \
324*84e33947SAndroid Build Coastguard Worker                                           %.options \
325*84e33947SAndroid Build Coastguard Worker                                           $(NANOPB_GENERATOR_SRCS) \
326*84e33947SAndroid Build Coastguard Worker                                           $(PW_RPC_GENERATOR_COMPILED_PROTO)
327*84e33947SAndroid Build Coastguard Worker	@echo " [PW_RPC] $<"
328*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
329*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(NANOPB_PROTOC) \
330*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language nanopb \
331*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions \
332*84e33947SAndroid Build Coastguard Worker	  --sources $<
333*84e33947SAndroid Build Coastguard Worker
334*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
335*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(PIGWEED_DIR)/pw_protobuf/py/pw_protobuf/plugin.py \
336*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language pwpb \
337*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions \
338*84e33947SAndroid Build Coastguard Worker	  --sources $<
339*84e33947SAndroid Build Coastguard Worker
340*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
341*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(PIGWEED_DIR)/pw_rpc/py/pw_rpc/plugin_nanopb.py \
342*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language nanopb_rpc \
343*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions \
344*84e33947SAndroid Build Coastguard Worker	  --sources $<
345*84e33947SAndroid Build Coastguard Worker
346*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
347*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(PIGWEED_DIR)/pw_rpc/py/pw_rpc/plugin_raw.py \
348*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language raw_rpc \
349*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions \
350*84e33947SAndroid Build Coastguard Worker	  --sources $<
351*84e33947SAndroid Build Coastguard Worker
352*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
353*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(PIGWEED_DIR)/pw_rpc/py/pw_rpc/plugin_pwpb.py \
354*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language pwpb_rpc \
355*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions \
356*84e33947SAndroid Build Coastguard Worker	  --sources $<
357*84e33947SAndroid Build Coastguard Worker
358*84e33947SAndroid Build Coastguard Worker$(PW_RPC_GEN_PATH)/%.pb.c \
359*84e33947SAndroid Build Coastguard Worker        $(PW_RPC_GEN_PATH)/%.pb.h \
360*84e33947SAndroid Build Coastguard Worker        $(PW_RPC_GEN_PATH)/%.rpc.pb.h \
361*84e33947SAndroid Build Coastguard Worker        $(PW_RPC_GEN_PATH)/%.raw_rpc.pb.h: %.proto \
362*84e33947SAndroid Build Coastguard Worker                                           $(NANOPB_OPTIONS) \
363*84e33947SAndroid Build Coastguard Worker                                           $(NANOPB_GENERATOR_SRCS) \
364*84e33947SAndroid Build Coastguard Worker                                           $(PW_RPC_GENERATOR_COMPILED_PROTO)
365*84e33947SAndroid Build Coastguard Worker	@echo " [PW_RPC] $<"
366*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
367*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(NANOPB_PROTOC) \
368*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language nanopb \
369*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions \
370*84e33947SAndroid Build Coastguard Worker	  --sources $<
371*84e33947SAndroid Build Coastguard Worker
372*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
373*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(PIGWEED_DIR)/pw_protobuf/py/pw_protobuf/plugin.py \
374*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language pwpb \
375*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions \
376*84e33947SAndroid Build Coastguard Worker	  --sources $<
377*84e33947SAndroid Build Coastguard Worker
378*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
379*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(PIGWEED_DIR)/pw_rpc/py/pw_rpc/plugin_nanopb.py \
380*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language nanopb_rpc \
381*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions \
382*84e33947SAndroid Build Coastguard Worker	  --sources $<
383*84e33947SAndroid Build Coastguard Worker
384*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
385*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(PIGWEED_DIR)/pw_rpc/py/pw_rpc/plugin_raw.py \
386*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language raw_rpc \
387*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions \
388*84e33947SAndroid Build Coastguard Worker	  --sources $<
389*84e33947SAndroid Build Coastguard Worker
390*84e33947SAndroid Build Coastguard Worker	$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
391*84e33947SAndroid Build Coastguard Worker	  --plugin-path=$(PIGWEED_DIR)/pw_rpc/py/pw_rpc/plugin_pwpb.py \
392*84e33947SAndroid Build Coastguard Worker	  --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language pwpb_rpc \
393*84e33947SAndroid Build Coastguard Worker	  --no-experimental-editions \
394*84e33947SAndroid Build Coastguard Worker	  --sources $<
395*84e33947SAndroid Build Coastguard Worker
396*84e33947SAndroid Build Coastguard Workerendif # ifneq ($(PW_RPC_SRCS),)
397