| # ---[ Protobuf |
| |
| # We will try to use the config mode first, and then manual find. |
| find_package(Protobuf CONFIG QUIET) |
| if(NOT Protobuf_FOUND) |
| find_package(Protobuf MODULE QUIET) |
| endif() |
| |
| if((TARGET protobuf::libprotobuf OR TARGET protobuf::libprotobuf-lite) AND TARGET protobuf::protoc) |
| # Hooray. This is the most ideal situation, meaning that you either have a |
| # Protobuf config file installed (like on Windows), or you are using a |
| # modern CMake that ships with a FindProtobuf.cmake file that produces |
| # modern targets. |
| message(STATUS "Caffe2: Found protobuf with new-style protobuf targets.") |
| elseif(Protobuf_FOUND OR PROTOBUF_FOUND) |
| # If the modern targets are not present, we will generate them for you for |
| # backward compatibility. This is backported from CMake's new FindProtobuf.cmake |
| # content. |
| if((NOT PROTOBUF_LIBRARY) AND (NOT PROTOBUF_LITE_LIBRARY)) |
| message(FATAL_ERROR |
| "Caffe2: Found protobuf with old style targets, but could not find targets." |
| " PROTOBUF_LIBRARY: " ${PROTOBUF_LIBRARY} |
| " PROTOBUF_LITE_LIBRARY: " ${PROTOBUF_LITE_LIBRARY} |
| " Protobuf_LIBRARY: " ${Protobuf_LIBRARY} |
| " Protobuf_LITE_LIBRARY: " ${Protobuf_LITE_LIBRARY}) |
| endif() |
| message(STATUS "Caffe2: Found protobuf with old-style protobuf targets.") |
| |
| if(PROTOBUF_LIBRARY) |
| if(NOT TARGET protobuf::libprotobuf) |
| add_library(protobuf::libprotobuf UNKNOWN IMPORTED) |
| set_target_properties(protobuf::libprotobuf PROPERTIES |
| INTERFACE_INCLUDE_DIRECTORIES "${PROTOBUF_INCLUDE_DIRS}") |
| endif() |
| if(EXISTS "${PROTOBUF_LIBRARY}") |
| set_target_properties(protobuf::libprotobuf PROPERTIES |
| IMPORTED_LOCATION "${PROTOBUF_LIBRARY}") |
| endif() |
| if(EXISTS "${PROTOBUF_LIBRARY_RELEASE}") |
| set_property(TARGET protobuf::libprotobuf APPEND PROPERTY |
| IMPORTED_CONFIGURATIONS RELEASE) |
| set_target_properties(protobuf::libprotobuf PROPERTIES |
| IMPORTED_LOCATION_RELEASE "${PROTOBUF_LIBRARY_RELEASE}") |
| endif() |
| if(EXISTS "${PROTOBUF_LIBRARY_DEBUG}") |
| set_property(TARGET protobuf::libprotobuf APPEND PROPERTY |
| IMPORTED_CONFIGURATIONS DEBUG) |
| set_target_properties(protobuf::libprotobuf PROPERTIES |
| IMPORTED_LOCATION_DEBUG "${PROTOBUF_LIBRARY_DEBUG}") |
| endif() |
| endif() |
| |
| if(PROTOBUF_LITE_LIBRARY) |
| if(NOT TARGET protobuf::libprotobuf-lite) |
| add_library(protobuf::libprotobuf-lite UNKNOWN IMPORTED) |
| set_target_properties(protobuf::libprotobuf-lite PROPERTIES |
| INTERFACE_INCLUDE_DIRECTORIES "${PROTOBUF_INCLUDE_DIRS}") |
| endif() |
| if(EXISTS "${PROTOBUF_LITE_LIBRARY}") |
| set_target_properties(protobuf::libprotobuf-lite PROPERTIES |
| IMPORTED_LOCATION "${PROTOBUF_LITE_LIBRARY}") |
| endif() |
| if(EXISTS "${PROTOBUF_LITE_LIBRARY_RELEASE}") |
| set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY |
| IMPORTED_CONFIGURATIONS RELEASE) |
| set_target_properties(protobuf::libprotobuf-lite PROPERTIES |
| IMPORTED_LOCATION_RELEASE "${PROTOBUF_LITE_LIBRARY_RELEASE}") |
| endif() |
| if(EXISTS "${PROTOBUF_LITE_LIBRARY_DEBUG}") |
| set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY |
| IMPORTED_CONFIGURATIONS DEBUG) |
| set_target_properties(protobuf::libprotobuf-lite PROPERTIES |
| IMPORTED_LOCATION_DEBUG "${PROTOBUF_LITE_LIBRARY_DEBUG}") |
| endif() |
| endif() |
| |
| if(PROTOBUF_PROTOC_EXECUTABLE) |
| if(NOT TARGET protobuf::protoc) |
| add_executable(protobuf::protoc IMPORTED) |
| endif() |
| set_property(TARGET protobuf::protoc PROPERTY |
| IMPORTED_LOCATION ${PROTOBUF_PROTOC_EXECUTABLE}) |
| endif() |
| endif() |
| |
| # After above, we should have the protobuf related target now. |
| if((NOT TARGET protobuf::libprotobuf) AND (NOT TARGET protobuf::libprotobuf-lite)) |
| message(WARNING |
| "Protobuf cannot be found. Depending on whether you are building Caffe2 " |
| "or a Caffe2 dependent library, the next warning / error will give you " |
| "more info.") |
| endif() |