aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmake
diff options
context:
space:
mode:
authorGravatar Rich Gowman <rgowman@google.com>2018-01-31 14:00:26 -0500
committerGravatar Rich Gowman <rgowman@google.com>2018-02-06 10:02:30 -0500
commitace2ed15fe078008986226ef31c122dd6c21745d (patch)
treeb84935b4b292d1bc2dce3433a9bd73f6b5ea2f60 /cmake
parent15206e8df2d3fff84ba897e57def7271e5733dcf (diff)
Add ability to build nanopb and protobuf
Diffstat (limited to 'cmake')
-rw-r--r--cmake/external/nanopb.cmake61
-rw-r--r--cmake/external/protobuf.cmake35
2 files changed, 96 insertions, 0 deletions
diff --git a/cmake/external/nanopb.cmake b/cmake/external/nanopb.cmake
new file mode 100644
index 0000000..d602d9a
--- /dev/null
+++ b/cmake/external/nanopb.cmake
@@ -0,0 +1,61 @@
+# Copyright 2018 Google
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+include(ExternalProject)
+include(ExternalProjectFlags)
+
+ExternalProject_GitSource(
+ NANOPB_GIT
+ GIT_REPOSITORY "https://github.com/nanopb/nanopb.git"
+ GIT_TAG "master" # Needs the most recent. 0.3.9 doesn't fully support cmake.
+)
+
+ExternalProject_Add(
+ nanopb
+ DEPENDS
+ protobuf
+
+ ${NANOPB_GIT}
+
+ PREFIX ${PROJECT_BINARY_DIR}/external/nanopb
+
+ CMAKE_ARGS
+ -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+ -DBUILD_SHARED_LIBS:BOOL=OFF
+ -Dnanopb_BUILD_GENERATOR:BOOL=ON
+ -Dnanopb_PROTOC_PATH:STRING=${FIREBASE_INSTALL_DIR}/external/protobuf/src/protobuf-build/src/protoc
+
+ BUILD_COMMAND
+ ${CMAKE_COMMAND} --build .
+ # NB: The following additional build commands are only necessary to
+ # regenerate the nanopb proto files.
+ COMMAND
+ ${CMAKE_COMMAND} -E make_directory <BINARY_DIR>/generator/proto
+ COMMAND
+ ${CMAKE_COMMAND} -E copy <SOURCE_DIR>/generator/proto/__init__.py <BINARY_DIR>/generator/proto/
+ COMMAND
+ ${CMAKE_COMMAND} -E copy <SOURCE_DIR>/generator/protoc-gen-nanopb <BINARY_DIR>/generator/
+ COMMAND
+ ${CMAKE_COMMAND} -E copy <SOURCE_DIR>/generator/nanopb_generator.py <BINARY_DIR>/generator/
+ COMMAND
+ ${CMAKE_COMMAND} -E copy <BINARY_DIR>/nanopb_pb2.py <BINARY_DIR>/generator/proto/
+ COMMAND
+ ${CMAKE_COMMAND} -E copy <BINARY_DIR>/plugin_pb2.py <BINARY_DIR>/generator/proto/
+
+ # TODO: once we clone via a tag (rather than the master branch) we should
+ # disable updates; i.e.:
+ # UPDATE_COMMAND ""
+
+ INSTALL_COMMAND ""
+)
diff --git a/cmake/external/protobuf.cmake b/cmake/external/protobuf.cmake
new file mode 100644
index 0000000..da5f11d
--- /dev/null
+++ b/cmake/external/protobuf.cmake
@@ -0,0 +1,35 @@
+# Copyright 2018 Google
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+include(ExternalProject)
+include(ExternalProjectFlags)
+
+ExternalProject_GitSource(
+ PROTOBUF_GIT
+ GIT_REPOSITORY "https://github.com/google/protobuf.git"
+ GIT_TAG "v3.5.1.1"
+)
+
+ExternalProject_Add(
+ protobuf
+
+ ${PROTOBUF_GIT}
+
+ PREFIX ${PROJECT_BINARY_DIR}/external/protobuf
+
+ UPDATE_COMMAND ""
+ CONFIGURE_COMMAND cd <SOURCE_DIR> && ./autogen.sh
+ COMMAND <SOURCE_DIR>/configure --prefix=${PREFIX}
+ INSTALL_COMMAND ""
+)