Skip to content
Snippets Groups Projects
Commit a97617bb authored by Kyle Manna's avatar Kyle Manna
Browse files

cmake: Build generator files in build directory

Treat the source directory as immutable.  Copy the generator directory
which previously generated files in-tree to the build directory and
then generate files.

Many emerging continuous integration build systems test builds across
multiple versions of dependencies protobuf and python versions in
particular.  The previous source tree builds resulted in stale files
from the last build breaking the current build.  By placing the build
files in the build directory, the build system automatically removes
stale files (removes output build directory) and regenerates them as
necessary.
parent 6b63b264
No related branches found
No related tags found
No related merge requests found
......@@ -26,8 +26,8 @@
# NANOPB_INCLUDE_DIRS - Include directories for Google Protocol Buffers
#
# The following cache variables are also available to set or use:
# NANOPB_GENERATOR_EXECUTABLE - The nanopb generator
# PROTOBUF_PROTOC_EXECUTABLE - The protoc compiler
# NANOPB_GENERATOR_SOURCE_DIR - The nanopb generator source
#
# ====================================================================
#
......@@ -127,12 +127,29 @@ function(NANOPB_GENERATE_CPP SRCS HDRS)
set(${SRCS})
set(${HDRS})
get_filename_component(GENERATOR_PATH ${NANOPB_GENERATOR_EXECUTABLE} PATH)
set(GENERATOR_PATH ${CMAKE_BINARY_DIR}/nanopb/generator)
set(NANOPB_GENERATOR_EXECUTABLE ${GENERATOR_PATH}/nanopb_generator.py)
set(GENERATOR_CORE_DIR ${GENERATOR_PATH}/proto)
set(GENERATOR_CORE_SRC
${GENERATOR_CORE_DIR}/nanopb.proto
${GENERATOR_CORE_DIR}/plugin.proto)
# Treat the source diretory as immutable.
#
# Copy the generator directory to the build directory before
# compiling python and proto files. Fixes issues when using the
# same build directory with different python/protobuf versions
# as the binary build directory is discarded across builds.
#
add_custom_command(
OUTPUT ${NANOPB_GENERATOR_EXECUTABLE} ${GENERATOR_CORE_SRC}
COMMAND ${CMAKE_COMMAND} -E copy_directory
ARGS ${NANOPB_GENERATOR_SOURCE_DIR} ${GENERATOR_PATH}
VERBATIM)
set(GENERATOR_CORE_PYTHON_SRC)
foreach(FIL ${GENERATOR_CORE_SRC})
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
......@@ -235,14 +252,14 @@ find_program(PROTOBUF_PROTOC_EXECUTABLE
)
mark_as_advanced(PROTOBUF_PROTOC_EXECUTABLE)
# Find nanopb generator
find_file(NANOPB_GENERATOR_EXECUTABLE
# Find nanopb generator source dir
find_path(NANOPB_GENERATOR_SOURCE_DIR
NAMES nanopb_generator.py
DOC "nanopb generator"
DOC "nanopb generator source"
PATHS
${NANOPB_SRC_ROOT_FOLDER}/generator
)
mark_as_advanced(NANOPB_GENERATOR_EXECUTABLE)
mark_as_advanced(NANOPB_GENERATOR_SOURCE_DIR)
find_package(PythonInterp REQUIRED)
......@@ -250,6 +267,6 @@ include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(NANOPB DEFAULT_MSG
NANOPB_INCLUDE_DIRS
NANOPB_SRCS NANOPB_HDRS
NANOPB_GENERATOR_EXECUTABLE
NANOPB_GENERATOR_SOURCE_DIR
PROTOBUF_PROTOC_EXECUTABLE
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment