• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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