diff options
author | Oliver Lee <oliverzlee@gmail.com> | 2015-02-13 10:26:31 +0100 |
---|---|---|
committer | Petteri Aimonen <jpa@git.mail.kapsi.fi> | 2015-02-13 17:31:12 +0200 |
commit | d8d3b75e2e3b348d016f48cebc1be764061975d2 (patch) | |
tree | f8605c8719807d4fae91ba71e5796413a0ff1336 /extra | |
parent | 25b92c5b4e154130bf0787009046ea60175d28e8 (diff) |
Updates for the CMake rule file.
1) Search explicitly for python2.7
In systems where python3 is default or in build cases where the user has
already searched for and found python3 in CMake, store the python3
executable and search for python2.7.
2) Generate nanopb core protobuf files with CMake
Generate python output files used in turn by the nanopb generator
script. This removes the requirement of manually calling 'make' in the
nanopb/generator/proto directory.
3) Use nanopb options file if it exists
Look for nanopb options file and use in protobuf source and header
generation if it exists. The options file must have the same name and
path as the proto file, excluding the extension.
Diffstat (limited to 'extra')
-rw-r--r-- | extra/FindNanopb.cmake | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/extra/FindNanopb.cmake b/extra/FindNanopb.cmake index 65ab5884..513182d8 100644 --- a/extra/FindNanopb.cmake +++ b/extra/FindNanopb.cmake @@ -128,10 +128,36 @@ function(NANOPB_GENERATE_CPP SRCS HDRS) set(${SRCS}) set(${HDRS}) get_filename_component(GENERATOR_PATH ${NANOPB_GENERATOR_EXECUTABLE} PATH) + set(GENERATOR_CORE_DIR ${GENERATOR_PATH}/proto) + set(GENERATOR_CORE_SRC + ${GENERATOR_CORE_DIR}/nanopb.proto + ${GENERATOR_CORE_DIR}/plugin.proto) + + set(GENERATOR_CORE_PYTHON_SRC) + foreach(FIL ${GENERATOR_CORE_SRC}) + get_filename_component(ABS_FIL ${FIL} ABSOLUTE) + get_filename_component(FIL_WE ${FIL} NAME_WE) + + set(output "${GENERATOR_CORE_DIR}/${FIL_WE}_pb2.py") + set(GENERATOR_CORE_PYTHON_SRC ${GENERATOR_CORE_PYTHON_SRC} ${output}) + add_custom_command( + OUTPUT ${output} + COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} + ARGS -I${GENERATOR_PATH}/proto + --python_out=${GENERATOR_CORE_DIR} ${ABS_FIL} + DEPENDS ${ABS_FIL} + VERBATIM) + endforeach() foreach(FIL ${ARGN}) get_filename_component(ABS_FIL ${FIL} ABSOLUTE) get_filename_component(FIL_WE ${FIL} NAME_WE) + get_filename_component(FIL_DIR ${FIL} PATH) + set(NANOPB_OPTIONS_FILE ${FIL_DIR}/${FIL_WE}.options) + set(NANOPB_OPTIONS) + if(EXISTS ${NANOPB_OPTIONS_FILE}) + set(NANOPB_OPTIONS -f ${NANOPB_OPTIONS_FILE}) + endif() list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.c") list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h") @@ -139,16 +165,18 @@ function(NANOPB_GENERATE_CPP SRCS HDRS) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb" COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} - ARGS -I${GENERATOR_PATH} -I${CMAKE_CURRENT_BINARY_DIR} ${_nanobp_include_path} -o${FIL_WE}.pb ${ABS_FIL} - DEPENDS ${ABS_FIL} + ARGS -I${GENERATOR_PATH} -I${GENERATOR_CORE_DIR} + -I${CMAKE_CURRENT_BINARY_DIR} ${_nanobp_include_path} + -o${FIL_WE}.pb ${ABS_FIL} + DEPENDS ${ABS_FIL} ${GENERATOR_CORE_PYTHON_SRC} COMMENT "Running C++ protocol buffer compiler on ${FIL}" VERBATIM ) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.c" "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h" - COMMAND python - ARGS ${NANOPB_GENERATOR_EXECUTABLE} ${FIL_WE}.pb + COMMAND ${PYTHON2_EXECUTABLE} + ARGS ${NANOPB_GENERATOR_EXECUTABLE} ${FIL_WE}.pb ${NANOPB_OPTIONS} DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb" COMMENT "Running nanopb generator on ${FIL_WE}.pb" VERBATIM ) @@ -216,6 +244,19 @@ find_file(NANOPB_GENERATOR_EXECUTABLE ) mark_as_advanced(NANOPB_GENERATOR_EXECUTABLE) +# If python3 has already been found, save it and look for python2.7 +if(${PYTHON_VERSION_MAJOR} EQUAL 3) + set(PYTHON3_EXECUTABLE ${PYTHON_EXECUTABLE}) + set(PYTHON_EXECUTABLE PYTHON_EXECUTABLE-NOTFOUND) +endif() + +find_package(PythonInterp 2.7 REQUIRED) +set(PYTHON2_EXECUTABLE ${PYTHON_EXECUTABLE}) + +if(${PYTHON_VERSION_MAJOR} EQUAL 3) + set(PYTHON_EXECUTABLE ${PYTHON3_EXECUTABLE}) +endif() + include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(NANOPB DEFAULT_MSG NANOPB_INCLUDE_DIRS |