-
Notifications
You must be signed in to change notification settings - Fork 656
/
protobuf.cmake
83 lines (75 loc) · 3.21 KB
/
protobuf.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
include(ExternalProject)
set(PROTOBUF_INSTALL_DIR ${THIRD_PARTY_DIR}/protobuf)
set(PROTOBUF_INSTALL_INCLUDEDIR include)
set(PROTOBUF_INSTALL_LIBDIR lib)
set(PROTOBUF_INSTALL_BINDIR bin)
set(PROTOBUF_INCLUDE_DIR ${PROTOBUF_INSTALL_DIR}/${PROTOBUF_INSTALL_INCLUDEDIR})
set(PROTOBUF_LIBRARY_DIR ${PROTOBUF_INSTALL_DIR}/${PROTOBUF_INSTALL_LIBDIR})
set(PROTOBUF_BINARY_DIR ${PROTOBUF_INSTALL_DIR}/${PROTOBUF_INSTALL_BINDIR})
set(PROTOBUF_SRC_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/src)
set(PROTOBUF_URL "https://github.com/protocolbuffers/protobuf/archive/v3.16.0.zip")
set(PROTOBUF_MD5 83c982b55cbe5ec390b28c8f812da779)
use_mirror(VARIABLE PROTOBUF_URL URL ${PROTOBUF_URL})
if(WIN32)
set(PROTOBUF_LIBRARY_NAMES libprotobufd.lib)
set(PROTOC_EXECUTABLE_NAME protoc.exe)
set(PROTOBUF_ADDITIONAL_CMAKE_OPTIONS -Dprotobuf_MSVC_STATIC_RUNTIME:BOOL=ON -A x64)
else()
if(BUILD_SHARED_LIBS)
if("${CMAKE_SHARED_LIBRARY_SUFFIX}" STREQUAL ".dylib")
set(PROTOBUF_LIBRARY_NAMES libprotobuf.dylib)
elseif("${CMAKE_SHARED_LIBRARY_SUFFIX}" STREQUAL ".so")
set(PROTOBUF_LIBRARY_NAMES libprotobuf.so)
else()
message(FATAL_ERROR "${CMAKE_SHARED_LIBRARY_SUFFIX} not support for protobuf")
endif()
set(PROTOBUF_BUILD_SHARED_LIBS ON)
else()
set(PROTOBUF_LIBRARY_NAMES libprotobuf.a)
set(PROTOBUF_BUILD_SHARED_LIBS OFF)
endif()
set(PROTOC_EXECUTABLE_NAME protoc)
endif()
foreach(LIBRARY_NAME ${PROTOBUF_LIBRARY_NAMES})
list(APPEND PROTOBUF_STATIC_LIBRARIES ${PROTOBUF_LIBRARY_DIR}/${LIBRARY_NAME})
endforeach()
set(PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_BINARY_DIR}/${PROTOC_EXECUTABLE_NAME})
if(THIRD_PARTY)
ExternalProject_Add(
protobuf
PREFIX protobuf
URL ${PROTOBUF_URL}
URL_MD5 ${PROTOBUF_MD5}
UPDATE_COMMAND ""
BUILD_IN_SOURCE 1
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf
SOURCE_SUBDIR cmake
BUILD_BYPRODUCTS ${PROTOBUF_STATIC_LIBRARIES}
CMAKE_CACHE_ARGS
-DCMAKE_C_COMPILER_LAUNCHER:STRING=${CMAKE_C_COMPILER_LAUNCHER}
-DCMAKE_CXX_COMPILER_LAUNCHER:STRING=${CMAKE_CXX_COMPILER_LAUNCHER}
-DCMAKE_POLICY_DEFAULT_CMP0074:STRING=NEW
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
-DZLIB_ROOT:PATH=${ZLIB_INSTALL}
-Dprotobuf_WITH_ZLIB:BOOL=${WITH_ZLIB}
-DCMAKE_CXX_FLAGS_DEBUG:STRING=${CMAKE_CXX_FLAGS_DEBUG}
-DBUILD_SHARED_LIBS:BOOL=${PROTOBUF_BUILD_SHARED_LIBS}
-Dprotobuf_BUILD_SHARED_LIBS:BOOL=${PROTOBUF_BUILD_SHARED_LIBS}
-Dprotobuf_BUILD_TESTS:BOOL=OFF
-DCMAKE_INSTALL_PREFIX:STRING=${PROTOBUF_INSTALL_DIR}
-DCMAKE_INSTALL_INCLUDEDIR:STRING=${PROTOBUF_INSTALL_INCLUDEDIR}
-DCMAKE_INSTALL_LIBDIR:STRING=${PROTOBUF_INSTALL_LIBDIR}
-DCMAKE_INSTALL_BINDIR:STRING=${PROTOBUF_INSTALL_BINDIR}
-DCMAKE_INSTALL_MESSAGE:STRING=${CMAKE_INSTALL_MESSAGE}
-Dprotobuf_DEBUG_POSTFIX:STRING=
${PROTOBUF_ADDITIONAL_CMAKE_OPTIONS})
if(WITH_ZLIB)
add_dependencies(protobuf zlib)
endif()
else()
add_custom_target(protobuf)
endif(THIRD_PARTY)
add_library(protobuf_imported UNKNOWN IMPORTED)
set_property(TARGET protobuf_imported PROPERTY IMPORTED_LOCATION "${PROTOBUF_STATIC_LIBRARIES}")