diff options
author | Kyle Manna <kyle@kylemanna.com> | 2015-10-15 13:04:23 -0700 |
---|---|---|
committer | Kyle Manna <kyle@kylemanna.com> | 2015-10-15 13:04:23 -0700 |
commit | a97617bb41d2e03c670467a0d053b4d2eaae8dad (patch) | |
tree | b4d980088ebd411c5ae570a7d0d576123ac7d27a /extra | |
parent | 6b63b26404064272394740f6b7354e75c5805cec (diff) |
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.
Diffstat (limited to 'extra')
-rw-r--r-- | extra/FindNanopb.cmake | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/extra/FindNanopb.cmake b/extra/FindNanopb.cmake index 1fd25334..7734a937 100644 --- a/extra/FindNanopb.cmake +++ b/extra/FindNanopb.cmake @@ -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 ) |