diff options
Diffstat (limited to 'extra')
-rw-r--r-- | extra/FindNanopb.cmake | 211 | ||||
-rw-r--r-- | extra/nanopb-config-version.cmake.in | 11 | ||||
-rw-r--r-- | extra/nanopb-config.cmake | 1 | ||||
-rw-r--r-- | extra/nanopb.mk | 2 | ||||
-rw-r--r-- | extra/pb_syshdr.h | 8 |
5 files changed, 49 insertions, 184 deletions
diff --git a/extra/FindNanopb.cmake b/extra/FindNanopb.cmake index bba341d..c804e70 100644 --- a/extra/FindNanopb.cmake +++ b/extra/FindNanopb.cmake @@ -1,6 +1,10 @@ # This is an example script for use with CMake projects for locating and configuring # the nanopb library. # +# The following varialbes have to be set: +# +# NANOPB_SRC_ROOT_FOLDER - Path to nanopb source folder +# # The following variables can be set and are optional: # # @@ -12,13 +16,6 @@ # NANOPB_IMPORT_DIRS - List of additional directories to be searched for # imported .proto files. # -# NANOPB_OPTIONS - List of options passed to nanopb. -# -# NANOPB_DEPENDS - List of files to be used as dependencies -# for the generated source and header files. These -# files are not directly passed as options to -# nanopb but rather their directories. -# # NANOPB_GENERATE_CPP_APPEND_PATH - By default -I will be passed to protoc # for each directory where a proto file is referenced. # Set to FALSE if you want to disable this behaviour. @@ -29,28 +26,23 @@ # 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 # # ==================================================================== # # NANOPB_GENERATE_CPP (public function) -# NANOPB_GENERATE_CPP(SRCS HDRS [RELPATH <root-path-of-proto-files>] -# <proto-files>...) -# SRCS = Variable to define with autogenerated source files -# HDRS = Variable to define with autogenerated header files -# If you want to use relative paths in your import statements use the RELPATH -# option. The argument to RELPATH should be the directory that all the -# imports will be relative to. -# When RELPATH is not specified then all proto files can be imported without -# a path. -# +# SRCS = Variable to define with autogenerated +# source files +# HDRS = Variable to define with autogenerated +# header files +# ARGN = proto files # # ==================================================================== # Example: # # set(NANOPB_SRC_ROOT_FOLDER "/path/to/nanopb") -# set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${NANOPB_SRC_ROOT_FOLDER}/extra) +# set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${NANOPB_SRC_ROOT_FOLDER}/cmake) # find_package( Nanopb REQUIRED ) # include_directories(${NANOPB_INCLUDE_DIRS}) # @@ -59,19 +51,6 @@ # include_directories(${CMAKE_CURRENT_BINARY_DIR}) # add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS}) # -# Example with RELPATH: -# Assume we have a layout like: -# .../CMakeLists.txt -# .../bar.cc -# .../proto/ -# .../proto/foo.proto (Which contains: import "sub/bar.proto"; ) -# .../proto/sub/bar.proto -# Everything would be the same as the previous example, but the call to -# NANOPB_GENERATE_CPP would change to: -# -# NANOPB_GENERATE_CPP(PROTO_SRCS PROTO_HDRS RELPATH proto -# proto/foo.proto proto/sub/bar.proto) -# # ==================================================================== #============================================================================= @@ -117,148 +96,62 @@ function(NANOPB_GENERATE_CPP SRCS HDRS) - cmake_parse_arguments(NANOPB_GENERATE_CPP "" "RELPATH" "" ${ARGN}) - if(NOT NANOPB_GENERATE_CPP_UNPARSED_ARGUMENTS) + if(NOT ARGN) return() endif() if(NANOPB_GENERATE_CPP_APPEND_PATH) # Create an include path for each file specified - foreach(FIL ${NANOPB_GENERATE_CPP_UNPARSED_ARGUMENTS}) + foreach(FIL ${ARGN}) get_filename_component(ABS_FIL ${FIL} ABSOLUTE) get_filename_component(ABS_PATH ${ABS_FIL} PATH) - list(APPEND _nanopb_include_path "-I${ABS_PATH}") + + list(FIND _nanobp_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _nanobp_include_path -I ${ABS_PATH}) + endif() endforeach() else() - set(_nanopb_include_path "-I${CMAKE_CURRENT_SOURCE_DIR}") - endif() - - if(NANOPB_GENERATE_CPP_RELPATH) - list(APPEND _nanopb_include_path "-I${NANOPB_GENERATE_CPP_RELPATH}") + set(_nanobp_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) endif() if(DEFINED NANOPB_IMPORT_DIRS) foreach(DIR ${NANOPB_IMPORT_DIRS}) get_filename_component(ABS_PATH ${DIR} ABSOLUTE) - list(APPEND _nanopb_include_path "-I${ABS_PATH}") + list(FIND _nanobp_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _nanobp_include_path -I ${ABS_PATH}) + endif() endforeach() endif() - list(REMOVE_DUPLICATES _nanopb_include_path) - - set(GENERATOR_PATH ${CMAKE_BINARY_DIR}/nanopb/generator) - - set(NANOPB_GENERATOR_EXECUTABLE ${GENERATOR_PATH}/nanopb_generator.py) - set(NANOPB_GENERATOR_PLUGIN ${GENERATOR_PATH}/protoc-gen-nanopb) - - 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) - get_filename_component(FIL_WE ${FIL} NAME_WE) + set(${SRCS}) + set(${HDRS}) + get_filename_component(GENERATOR_PATH ${NANOPB_GENERATOR_EXECUTABLE} PATH) - 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() - - if(NANOPB_GENERATE_CPP_RELPATH) - get_filename_component(ABS_ROOT ${NANOPB_GENERATE_CPP_RELPATH} ABSOLUTE) - endif() - foreach(FIL ${NANOPB_GENERATE_CPP_UNPARSED_ARGUMENTS}) + 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(FIL_PATH_REL) - if(ABS_ROOT) - # Check that the file is under the given "RELPATH" - string(FIND ${ABS_FIL} ${ABS_ROOT} LOC) - if (${LOC} EQUAL 0) - string(REPLACE "${ABS_ROOT}/" "" FIL_REL ${ABS_FIL}) - get_filename_component(FIL_PATH_REL ${FIL_REL} PATH) - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${FIL_PATH_REL}) - endif() - endif() - if(NOT FIL_PATH_REL) - set(FIL_PATH_REL ".") - endif() - - list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_PATH_REL}/${FIL_WE}.pb.c") - list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_PATH_REL}/${FIL_WE}.pb.h") - - set(NANOPB_PLUGIN_OPTIONS) - set(NANOPB_OPTIONS_DIRS) - - # If there an options file in the same working directory, set it as a dependency - set(NANOPB_OPTIONS_FILE ${FIL_DIR}/${FIL_WE}.options) - if(EXISTS ${NANOPB_OPTIONS_FILE}) - # Get directory as lookups for dependency options fail if an options - # file is used. The options is still set as a dependency of the - # generated source and header. - get_filename_component(options_dir ${NANOPB_OPTIONS_FILE} DIRECTORY) - list(APPEND NANOPB_OPTIONS_DIRS ${options_dir}) - else() - set(NANOPB_OPTIONS_FILE) - endif() - - # If the dependencies are options files, we need to pass the directories - # as arguments to nanopb - foreach(depends_file ${NANOPB_DEPENDS}) - get_filename_component(ext ${depends_file} EXT) - if(ext STREQUAL ".options") - get_filename_component(depends_dir ${depends_file} DIRECTORY) - list(APPEND NANOPB_OPTIONS_DIRS ${depends_dir}) - endif() - endforeach() - if(NANOPB_OPTIONS_DIRS) - list(REMOVE_DUPLICATES NANOPB_OPTIONS_DIRS) - endif() - - foreach(options_path ${NANOPB_OPTIONS_DIRS}) - set(NANOPB_PLUGIN_OPTIONS "${NANOPB_PLUGIN_OPTIONS} -I${options_path}") - endforeach() - - if(NANOPB_OPTIONS) - set(NANOPB_PLUGIN_OPTIONS "${NANOPB_PLUGIN_OPTIONS} ${NANOPB_OPTIONS}") - endif() + list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.c") + list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h") add_custom_command( - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_PATH_REL}/${FIL_WE}.pb.c" - "${CMAKE_CURRENT_BINARY_DIR}/${FIL_PATH_REL}/${FIL_WE}.pb.h" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb" COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} - ARGS -I${GENERATOR_PATH} -I${GENERATOR_CORE_DIR} - -I${CMAKE_CURRENT_BINARY_DIR} ${_nanopb_include_path} - --plugin=protoc-gen-nanopb=${NANOPB_GENERATOR_PLUGIN} - "--nanopb_out=${NANOPB_PLUGIN_OPTIONS}:${CMAKE_CURRENT_BINARY_DIR}" ${ABS_FIL} - DEPENDS ${ABS_FIL} ${GENERATOR_CORE_PYTHON_SRC} - ${NANOPB_OPTIONS_FILE} ${NANOPB_DEPENDS} - COMMENT "Running C++ protocol buffer compiler using nanopb plugin on ${FIL}" + ARGS -I${GENERATOR_PATH} -I${CMAKE_CURRENT_BINARY_DIR} ${_nanobp_include_path} -o${FIL_WE}.pb ${ABS_FIL} + DEPENDS ${ABS_FIL} + 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 + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb" + COMMENT "Running nanopb generator on ${FIL_WE}.pb" + VERBATIM ) endforeach() set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE) @@ -279,12 +172,6 @@ if(NOT DEFINED NANOPB_GENERATE_CPP_APPEND_PATH) set(NANOPB_GENERATE_CPP_APPEND_PATH TRUE) endif() -# Make a really good guess regarding location of NANOPB_SRC_ROOT_FOLDER -if(NOT DEFINED NANOPB_SRC_ROOT_FOLDER) - get_filename_component(NANOPB_SRC_ROOT_FOLDER - ${CMAKE_CURRENT_LIST_DIR}/.. ABSOLUTE) -endif() - # Find the include directory find_path(NANOPB_INCLUDE_DIRS pb.h @@ -295,8 +182,8 @@ mark_as_advanced(NANOPB_INCLUDE_DIRS) # Find nanopb source files set(NANOPB_SRCS) set(NANOPB_HDRS) -list(APPEND _nanopb_srcs pb_decode.c pb_encode.c pb_common.c) -list(APPEND _nanopb_hdrs pb_decode.h pb_encode.h pb_common.h pb.h) +list(APPEND _nanopb_srcs pb_decode.c pb_encode.c) +list(APPEND _nanopb_hdrs pb_decode.h pb_encode.h pb.h) foreach(FIL ${_nanopb_srcs}) find_file(${FIL}__nano_pb_file NAMES ${FIL} PATHS ${NANOPB_SRC_ROOT_FOLDER} ${NANOPB_INCLUDE_DIRS}) @@ -320,21 +207,19 @@ find_program(PROTOBUF_PROTOC_EXECUTABLE ) mark_as_advanced(PROTOBUF_PROTOC_EXECUTABLE) -# Find nanopb generator source dir -find_path(NANOPB_GENERATOR_SOURCE_DIR +# Find nanopb generator +find_file(NANOPB_GENERATOR_EXECUTABLE NAMES nanopb_generator.py - DOC "nanopb generator source" + DOC "nanopb generator" PATHS ${NANOPB_SRC_ROOT_FOLDER}/generator ) -mark_as_advanced(NANOPB_GENERATOR_SOURCE_DIR) - -find_package(PythonInterp REQUIRED) +mark_as_advanced(NANOPB_GENERATOR_EXECUTABLE) include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(NANOPB DEFAULT_MSG NANOPB_INCLUDE_DIRS NANOPB_SRCS NANOPB_HDRS - NANOPB_GENERATOR_SOURCE_DIR + NANOPB_GENERATOR_EXECUTABLE PROTOBUF_PROTOC_EXECUTABLE ) diff --git a/extra/nanopb-config-version.cmake.in b/extra/nanopb-config-version.cmake.in deleted file mode 100644 index 1b51027..0000000 --- a/extra/nanopb-config-version.cmake.in +++ /dev/null @@ -1,11 +0,0 @@ -set(PACKAGE_VERSION "@nanopb_VERSION@") - -# Check whether the requested PACKAGE_FIND_VERSION is compatible -if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_COMPATIBLE FALSE) -else() - set(PACKAGE_VERSION_COMPATIBLE TRUE) - if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_EXACT TRUE) - endif() -endif() diff --git a/extra/nanopb-config.cmake b/extra/nanopb-config.cmake deleted file mode 100644 index 42d977a..0000000 --- a/extra/nanopb-config.cmake +++ /dev/null @@ -1 +0,0 @@ -include(${CMAKE_CURRENT_LIST_DIR}/nanopb-targets.cmake) diff --git a/extra/nanopb.mk b/extra/nanopb.mk index 5c2cff5..7576bae 100644 --- a/extra/nanopb.mk +++ b/extra/nanopb.mk @@ -5,7 +5,7 @@ NANOPB_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))../) # Files for the nanopb core -NANOPB_CORE = $(NANOPB_DIR)/pb_encode.c $(NANOPB_DIR)/pb_decode.c $(NANOPB_DIR)/pb_common.c +NANOPB_CORE = $(NANOPB_DIR)/pb_encode.c $(NANOPB_DIR)/pb_decode.c # Check if we are running on Windows ifdef windir diff --git a/extra/pb_syshdr.h b/extra/pb_syshdr.h index 55d06a3..1ff4823 100644 --- a/extra/pb_syshdr.h +++ b/extra/pb_syshdr.h @@ -24,14 +24,6 @@ typedef signed int int32_t; typedef unsigned int uint32_t; typedef signed long long int64_t; typedef unsigned long long uint64_t; - -/* These are ok for most platforms, unless uint8_t is actually not available, - * in which case you should give the smallest available type. */ -typedef int8_t int_least8_t; -typedef uint8_t uint_least8_t; -typedef uint8_t uint_fast8_t; -typedef int16_t int_least16_t; -typedef uint16_t uint_least16_t; #endif /* stddef.h subset */ |