• 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 "${CMAKE_CURRENT_LIST_DIR}/generate_nanopb_proto.py" "${dir_pw_third_party_nanopb}"
54  OUTPUT
55    "${dir_pw_third_party_nanopb}/generator/proto/nanopb_pb2.py"
56)
57add_custom_target(pw_third_party.nanopb.generate_proto
58  DEPENDS
59    "${dir_pw_third_party_nanopb}/generator/proto/nanopb_pb2.py"
60)
61