Files
2026-07-13 12:47:42 +08:00

77 lines
2.9 KiB
CMake

set(protobuf_BUILD_TESTS OFF CACHE BOOL "Disable testing in protobuf" FORCE)
set(protobuf_WITH_ZLIB ON CACHE BOOL "Disable zlib support in protobuf" FORCE)
if(MSVC)
set(protobuf_MSVC_STATIC_RUNTIME ${ZVEC_USE_STATIC_CRT} CACHE BOOL "" FORCE)
endif()
if(MSVC)
# Remove /MP for sccache compatibility (sccache cannot cache multi-file compilations).
set(PROTOBUF_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/protobuf-3.21.12)
set(PROTOBUF_WINDOWS_PATCH ${CMAKE_CURRENT_SOURCE_DIR}/protobuf.windows.patch)
apply_patch_once("protobuf_windows_fix" "${PROTOBUF_SRC_DIR}" "${PROTOBUF_WINDOWS_PATCH}")
endif()
set(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${EXTERNAL_LIB_DIR})
add_subdirectory(protobuf-3.21.12/cmake protobuf-3.21.12)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
unset(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
mark_target_includes_system(libprotobuf libprotobuf-lite libprotoc)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(libprotobuf PRIVATE
-Wno-deprecated-declarations
-Wno-invalid-noreturn
-Wno-unused-function
)
target_compile_options(libprotoc PRIVATE
-Wno-unused-private-field
-Wno-unused-function
)
target_compile_options(protoc PRIVATE
-Wno-unused-private-field
-Wno-unused-function
)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(libprotobuf PRIVATE
-Wno-deprecated-declarations
-Wno-unused-function
-Wno-maybe-uninitialized
-Wno-sign-compare
-Wno-return-type
-Wno-stringop-overflow
-Wno-stringop-overread
-Wno-array-bounds
)
target_compile_options(libprotoc PRIVATE
-Wno-unused-private-field
-Wno-unused-function
-Wno-unused-but-set-variable
-Wno-sign-compare
)
target_compile_options(protoc PRIVATE
-Wno-unused-private-field
-Wno-unused-function
-Wno-unused-but-set-variable
-Wno-sign-compare
)
endif()
get_target_property(libprotobuf_SOURCE_DIR libprotobuf SOURCE_DIR)
get_filename_component(libprotobuf_INCLUDE_DIR ${libprotobuf_SOURCE_DIR}/../src ABSOLUTE)
set(PROTOBUF_FOUND TRUE PARENT_SCOPE)
set(PROTOBUF_INCLUDE_DIR ${libprotobuf_INCLUDE_DIR} PARENT_SCOPE)
set(PROTOBUF_INCLUDE_DIRS ${libprotobuf_INCLUDE_DIR} PARENT_SCOPE)
set(PROTOBUF_LIBRARY $<TARGET_FILE:libprotobuf> PARENT_SCOPE)
set(PROTOBUF_LIBRARIES $<TARGET_FILE:libprotobuf> PARENT_SCOPE)
set(PROTOBUF_LITE_LIBRARY $<TARGET_FILE:libprotobuf-lite> PARENT_SCOPE)
set(PROTOBUF_LITE_LIBRARIES $<TARGET_FILE:libprotobuf-lite> PARENT_SCOPE)
set(PROTOBUF_PROTOC_LIBRARY $<TARGET_FILE:libprotoc> PARENT_SCOPE)
set(PROTOBUF_PROTOC_LIBRARIES $<TARGET_FILE:libprotoc> PARENT_SCOPE)
set(PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protoc> PARENT_SCOPE)