153 lines
6.5 KiB
Makefile
153 lines
6.5 KiB
Makefile
#
|
|
# Makefile for Pigweed's RPC module
|
|
#
|
|
# NOTE: In order to use this, you *must* have the following:
|
|
# - Installed mypy-protobuf and protoc
|
|
# - nanopb-c git repo checked out
|
|
#
|
|
|
|
ifneq ($(PW_RPC_SRCS),)
|
|
|
|
# Environment Checks ###########################################################
|
|
|
|
# Location of various Pigweed modules
|
|
PIGWEED_DIR = $(ANDROID_BUILD_TOP)/external/pigweed
|
|
CHRE_UTIL_DIR = $(ANDROID_BUILD_TOP)/system/chre/util
|
|
PIGWEED_CHRE_UTIL_DIR = $(CHRE_UTIL_DIR)/pigweed
|
|
|
|
ifeq ($(NANOPB_PREFIX),)
|
|
$(error "PW_RPC_SRCS is non-empty. You must supply a NANOPB_PREFIX environment \
|
|
variable containing a path to the nanopb project. Example: \
|
|
export NANOPB_PREFIX=$$HOME/path/to/nanopb/nanopb-c")
|
|
endif
|
|
|
|
ifeq ($(PROTOC),)
|
|
PROTOC=protoc
|
|
endif
|
|
|
|
PW_RPC_GEN_PATH = $(OUT)/pw_rpc_gen
|
|
|
|
# Create proto used for header generation ######################################
|
|
|
|
PW_RPC_PROTO_GENERATOR = $(PIGWEED_DIR)/pw_protobuf_compiler/py/pw_protobuf_compiler/generate_protos.py
|
|
PW_RPC_GENERATOR_PROTO_SRCS = $(PIGWEED_DIR)/pw_rpc/internal/packet.proto
|
|
PW_RPC_GENERATOR_COMPILED_PROTO = $(PW_RPC_GEN_PATH)/py/pw_rpc/internal/packet_pb2.py
|
|
|
|
# Modifies PYTHONPATH so that python can see all of pigweed's modules used by
|
|
# their protoc plugins
|
|
PW_RPC_GENERATOR_CMD = PYTHONPATH=$$PYTHONPATH:$(PW_RPC_GEN_PATH)/py:$\
|
|
$(PIGWEED_DIR)/pw_status/py:$(PIGWEED_DIR)/pw_protobuf/py:$\
|
|
$(PIGWEED_DIR)/pw_protobuf_compiler/py python3
|
|
|
|
$(PW_RPC_GENERATOR_COMPILED_PROTO): $(PW_RPC_GENERATOR_PROTO_SRCS)
|
|
@echo " [PW_RPC] $<"
|
|
$(V)mkdir -p $(PW_RPC_GEN_PATH)/py/
|
|
$(V)cp -R $(PIGWEED_DIR)/pw_rpc/py/pw_rpc $(PW_RPC_GEN_PATH)/py/
|
|
$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) --out-dir=$(PW_RPC_GEN_PATH)/py/pw_rpc/internal \
|
|
--compile-dir=$(dir $<) --sources $(PW_RPC_GENERATOR_PROTO_SRCS) \
|
|
--language python
|
|
$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) --out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) \
|
|
--plugin-path=$(PIGWEED_DIR)/pw_protobuf/py/pw_protobuf/plugin.py \
|
|
--compile-dir=$(dir $<) --sources $(PW_RPC_GENERATOR_PROTO_SRCS) \
|
|
--language pwpb
|
|
|
|
# Generated PW RPC Files #######################################################
|
|
|
|
PW_RPC_GEN_SRCS = $(patsubst %.proto, \
|
|
$(PW_RPC_GEN_PATH)/%.pb.c, \
|
|
$(PW_RPC_SRCS))
|
|
|
|
# Include to-be-generated files
|
|
COMMON_CFLAGS += -I$(PW_RPC_GEN_PATH)
|
|
COMMON_CFLAGS += -I$(PW_RPC_GEN_PATH)/$(PIGWEED_DIR)
|
|
COMMON_CFLAGS += $(addprefix -I$(PW_RPC_GEN_PATH)/, $(PW_RPC_INCLUDES))
|
|
|
|
COMMON_SRCS += $(PW_RPC_GEN_SRCS)
|
|
|
|
# PW RPC library ###############################################################
|
|
|
|
# Pigweed RPC include paths
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_assert/assert_lite_public_overrides
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_assert/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_assert_log/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_assert_log/public_overrides
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_bytes/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_containers/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_function/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_log/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_log_null/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_log_null/public_overrides
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_polyfill/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_polyfill/public_overrides
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_polyfill/standard_library_public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_preprocessor/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_protobuf/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_result/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_rpc/
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_rpc/nanopb/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_rpc/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_rpc/raw/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_span/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_span/public_overrides
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_status/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_stream/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_sync/public
|
|
COMMON_CFLAGS += -I$(PIGWEED_DIR)/pw_varint/public
|
|
|
|
# Pigweed RPC sources
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_assert_log/assert_log.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_containers/intrusive_list.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_protobuf/decoder.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_protobuf/encoder.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/call.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/channel.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/client.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/client_call.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/client_server.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/endpoint.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/packet.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/server.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/server_call.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/service.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/nanopb/common.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/nanopb/method.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_rpc/nanopb/server_reader_writer.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_stream/memory_stream.cc
|
|
COMMON_SRCS += $(PIGWEED_DIR)/pw_varint/varint.cc
|
|
|
|
# NanoPB header includes
|
|
COMMON_CFLAGS += -I$(NANOPB_PREFIX)
|
|
|
|
# NanoPB sources
|
|
COMMON_SRCS += $(NANOPB_PREFIX)/pb_common.c
|
|
COMMON_SRCS += $(NANOPB_PREFIX)/pb_decode.c
|
|
COMMON_SRCS += $(NANOPB_PREFIX)/pb_encode.c
|
|
|
|
# Add CHRE Pigweed util sources since nanoapps should always use these
|
|
COMMON_SRCS += $(PIGWEED_CHRE_UTIL_DIR)/chre_channel_output.cc
|
|
COMMON_SRCS += $(CHRE_UTIL_DIR)/nanoapp/callbacks.cc
|
|
|
|
# Generate PW RPC headers ######################################################
|
|
|
|
$(PW_RPC_GEN_PATH)/%.pb.c \
|
|
$(PW_RPC_GEN_PATH)/%.pb.h \
|
|
$(PW_RPC_GEN_PATH)/%.rpc.pb.h \
|
|
$(PW_RPC_GEN_PATH)/%.raw_rpc.pb.h: %.proto \
|
|
%.options \
|
|
$(NANOPB_GENERATOR_SRCS) \
|
|
$(PW_RPC_GENERATOR_COMPILED_PROTO)
|
|
@echo " [PW_RPC] $<"
|
|
$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
|
|
--plugin-path=$(NANOPB_PROTOC) \
|
|
--out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language nanopb \
|
|
--sources $<
|
|
$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
|
|
--plugin-path=$(PIGWEED_DIR)/pw_rpc/py/pw_rpc/plugin_nanopb.py \
|
|
--out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language nanopb_rpc \
|
|
--sources $<
|
|
$(V)$(PW_RPC_GENERATOR_CMD) $(PW_RPC_PROTO_GENERATOR) \
|
|
--plugin-path=$(PIGWEED_DIR)/pw_rpc/py/pw_rpc/plugin_raw.py \
|
|
--out-dir=$(PW_RPC_GEN_PATH)/$(dir $<) --compile-dir=$(dir $<) --language raw_rpc \
|
|
--sources $<
|
|
|
|
endif |