cdk/cmake/DepFindProtobuf.cmake (108 lines of code) (raw):

# Copyright (c) 2009, 2024, Oracle and/or its affiliates. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License, version 2.0, as # published by the Free Software Foundation. # # This program is designed to work with certain software (including # but not limited to OpenSSL) that is licensed under separate terms, as # designated in a particular file or component or in included license # documentation. The authors of MySQL hereby grant you an additional # permission to link the program and your derivative works with the # separately licensed software that they have either included with # the program or referenced in the documentation. # # Without limiting anything contained in the foregoing, this file, # which is part of Connector/C++, is also subject to the # Universal FOSS Exception, version 1.0, a copy of which can be found at # https://oss.oracle.com/licenses/universal-foss-exception. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License, version 2.0, for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # ############################################################################# # # Targets: # # (re)build-protobuf # # Imported/alias targets: # # ext::pb-lite # ext::pb-full # ext::protoc -- compiler # # Commands: # # mysqlx_protobuf_generate_cpp() # # if(TARGET ext::protobuf) return() endif() message(STATUS "Setting up Protobuf.") # Setup extrnal project that builds protobuf from bundled sources add_ext(protobuf google/protobuf/api.pb.h) if(NOT PROTOBUF_FOUND) message(FATAL_ERROR "Can't build without protobuf support") endif() # import targets from the external project # Note: The pb_ targets are created by protobuf/exports.cmake add_ext_targets(protobuf LIBRARY protobuf-lite pb_libprotobuf-lite LIBRARY protobuf pb_libprotobuf EXECUTABLE protoc pb_protoc ) # Standard PROTOBUF_GENERATE_CPP modified to our usage function(mysqlx_protobuf_generate_cpp SRCS HDRS) IF(NOT ARGN) MESSAGE(SEND_ERROR "Error: MYSQLX_PROTOBUF_GENERATE_CPP() called without any proto files") RETURN() ENDIF() SET(srcs) SET(hdrs) FOREACH(FIL ${ARGN}) GET_FILENAME_COMPONENT(ABS_FIL ${FIL} ABSOLUTE) GET_FILENAME_COMPONENT(FIL_WE ${FIL} NAME_WE) GET_FILENAME_COMPONENT(ABS_PATH ${ABS_FIL} PATH) LIST(APPEND srcs "${CMAKE_CURRENT_BINARY_DIR}/protobuf/${FIL_WE}.pb.cc") LIST(APPEND hdrs "${CMAKE_CURRENT_BINARY_DIR}/protobuf/${FIL_WE}.pb.h") ADD_CUSTOM_COMMAND( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/protobuf/${FIL_WE}.pb.cc" "${CMAKE_CURRENT_BINARY_DIR}/protobuf/${FIL_WE}.pb.h" COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/protobuf" COMMAND ext::protoc ARGS --cpp_out "${CMAKE_CURRENT_BINARY_DIR}/protobuf" -I ${ABS_PATH} ${ABS_FIL} # --proto_path=${PROTOBUF_INCLUDE_DIR} DEPENDS ${ABS_FIL} COMMENT "Running C++ protocol buffer compiler on ${FIL}" VERBATIM ) ENDFOREACH() SET_SOURCE_FILES_PROPERTIES( ${srcs} ${hdrs} PROPERTIES GENERATED TRUE) # # Disable compile warnings in code generated by Protobuf # IF(UNIX) set_source_files_properties(${srcs} APPEND_STRING PROPERTY COMPILE_FLAGS "-w" ) ELSEIF(MSVC) set_source_files_properties(${srcs} APPEND_STRING PROPERTY COMPILE_FLAGS "/wd4018 /wd4996 /wd4244 /wd4267" ) ENDIF() SET(${SRCS} ${srcs} PARENT_SCOPE) SET(${HDRS} ${hdrs} PARENT_SCOPE) endfunction(mysqlx_protobuf_generate_cpp)