if(NOT CMAKE_SCRIPT_MODE_FILE) set(PROTOBUF_DIR ${CMAKE_CURRENT_LIST_DIR}/protobuf) set(PROTOBUF_BUILD ${PROJECT_BINARY_DIR}/protobuf-build) set(PROTOBUF_BINARY ${PROJECT_BINARY_DIR}/protobuf-binary) set(PROTOBUF_SRC ${PROJECT_BINARY_DIR}/protobuf-src) configure_file(${CMAKE_CURRENT_LIST_DIR}/protobuf-CMakeLists.cmake ${PROTOBUF_BUILD}/CMakeLists.txt) if(NOT CMAKE_GENERATOR) set(CMAKE_GENERATOR "Ninja") endif() execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . RESULT_VARIABLE result WORKING_DIRECTORY ${PROTOBUF_BUILD} ) if(result) message(FATAL_ERROR "CMake step for protobuf failed: ${result}") endif() # execute_process(COMMAND ${CMAKE_COMMAND} --build . # RESULT_VARIABLE result # WORKING_DIRECTORY ${PROTOBUF_BUILD}) # if(result) # message(FATAL_ERROR "Build step for protobuf failed: ${result}") # endif() set(PROTOC ${PROTOBUF_BINARY}/protoc) add_custom_command(OUTPUT ${PROTOC} COMMENT "Building protoc binary" COMMAND ${CMAKE_COMMAND} --build . USES_TERMINAL WORKING_DIRECTORY ${PROTOBUF_BUILD}) endif() # find_program(PROTOC protoc PATHS ${CMAKE_CURRENT_LIST_DIR}/protobuf/cmake/build/) function(proto_generate_cpp PROTO_FILE PB_OUT HDR_VAR SRC_VAR) get_filename_component(PROTO_FILE_NAME ${PROTO_FILE} NAME_WE) get_filename_component(PROTO_FILE_PATH ${PROTO_FILE} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) get_filename_component(PROTO_FILE_DIR ${PROTO_FILE_PATH} DIRECTORY) set(PROTO_HDR "${PB_OUT}/${PROTO_FILE_NAME}.pb.h") set(PROTO_SRC "${PB_OUT}/${PROTO_FILE_NAME}.pb.cc") set(${HDR_VAR} ${${HDR_VAR}} ${PROTO_HDR} PARENT_SCOPE) set(${SRC_VAR} ${${SRC_VAR}} ${PROTO_SRC} PARENT_SCOPE) if(NOT CMAKE_SCRIPT_MODE_FILE) add_custom_command(OUTPUT ${PROTO_HDR} ${PROTO_SRC} COMMAND ${PROTOC} --cpp_out=${PB_OUT} --proto_path ${PROTO_FILE_DIR} ${PROTO_FILE_PATH} DEPENDS ${PROTO_FILE_PATH} ${PROTOC} COMMENT "Generating nanopb sources for ${PROTO_FILE}") set_property(SOURCE ${PROTO_HDR} ${PROTO_SRC} PROPERTY GENERATED TRUE) set_property(DIRECTORY . APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${PROTO_HDR} ${PROTO_SRC}) endif() endfunction()