1# Copyright 2020 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14 15include($ENV{PW_ROOT}/pw_build/pigweed.cmake) 16include($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake) 17 18set(dir_pw_third_party_nanopb "" CACHE PATH "Path to the Nanopb installation.") 19option(pw_third_party_nanopb_ADD_SUBDIRECTORY 20 "Whether to add the dir_pw_third_party_nanopb subdirectory" OFF) 21 22if("${dir_pw_third_party_nanopb}" STREQUAL "") 23 pw_add_error_target(pw_third_party.nanopb 24 MESSAGE 25 "Attempted to use nanopb without configuring it, see " 26 "pigweed.dev/third_party/nanopb/" 27 ) 28 return() 29elseif(pw_third_party_nanopb_ADD_SUBDIRECTORY) 30 add_subdirectory("${dir_pw_third_party_nanopb}" third_party/nanopb) 31endif() 32 33set(nanopb_main_library 34 $<IF:$<TARGET_EXISTS:protobuf-nanopb-static>,protobuf-nanopb-static,protobuf-nanopb>) 35 36add_library(pw_third_party.nanopb INTERFACE) 37target_link_libraries(pw_third_party.nanopb INTERFACE "${nanopb_main_library}") 38target_include_directories(pw_third_party.nanopb 39 INTERFACE 40 "${dir_pw_third_party_nanopb}" 41) 42 43pw_proto_library(pw_third_party.nanopb.proto 44 SOURCES 45 "${dir_pw_third_party_nanopb}/generator/proto/nanopb.proto" 46 STRIP_PREFIX 47 "${dir_pw_third_party_nanopb}/generator/proto" 48) 49 50# Generates nanopb_pb2.py, which is needed to compile protobufs with Nanopb. 51add_custom_command( 52 COMMAND 53 python3 54 "${CMAKE_CURRENT_LIST_DIR}/generate_nanopb_proto.py" 55 --nanopb-root "${dir_pw_third_party_nanopb}" 56 --protoc-binary "$ENV{PW_PIGWEED_CIPD_INSTALL_DIR}/bin/protoc" 57 DEPENDS 58 "${CMAKE_CURRENT_LIST_DIR}/generate_nanopb_proto.py" 59 "${dir_pw_third_party_nanopb}/pb.h" 60 "${dir_pw_third_party_nanopb}/pb_common.h" 61 "${dir_pw_third_party_nanopb}/pb_decode.h" 62 "${dir_pw_third_party_nanopb}/pb_encode.h" 63 "${dir_pw_third_party_nanopb}/pb_common.c" 64 "${dir_pw_third_party_nanopb}/pb_decode.c" 65 "${dir_pw_third_party_nanopb}/pb_encode.c" 66 "${dir_pw_third_party_nanopb}/generator/nanopb_generator.py" 67 "${dir_pw_third_party_nanopb}/generator/proto/google/protobuf" 68 "${dir_pw_third_party_nanopb}/generator/proto/google/protobuf/descriptor.proto" 69 "${dir_pw_third_party_nanopb}/generator/proto/__init__.py" 70 "${dir_pw_third_party_nanopb}/generator/proto/nanopb.proto" 71 "${dir_pw_third_party_nanopb}/generator/proto/_utils.py" 72 "${dir_pw_third_party_nanopb}/generator/protoc-gen-nanopb" 73 "${dir_pw_third_party_nanopb}/generator/nanopb_generator.py2" 74 "${dir_pw_third_party_nanopb}/generator/protoc-gen-nanopb-py2" 75 "${dir_pw_third_party_nanopb}/generator/protoc" 76 "${dir_pw_third_party_nanopb}/generator/protoc-gen-nanopb.bat" 77 "${dir_pw_third_party_nanopb}/generator/protoc.bat" 78 "$ENV{PW_PIGWEED_CIPD_INSTALL_DIR}/bin/protoc" 79 OUTPUT 80 "${dir_pw_third_party_nanopb}/generator/proto/nanopb_pb2.py" 81) 82add_custom_target(pw_third_party.nanopb.generate_proto 83 DEPENDS 84 "${dir_pw_third_party_nanopb}/generator/proto/nanopb_pb2.py" 85) 86