blob: 81b397c4b0dcf1a32b5a13824f5196c540944c84 [file]
# Config brew protobuf version for Mac, see .github/workflows/macOS.yml
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(Protobuf_PREFIX_PATH
"/opt/homebrew/opt/protobuf@21/include"
"/opt/homebrew/opt/protobuf@21/lib"
"/opt/homebrew/opt/protobuf@21/bin")
list(APPEND CMAKE_PREFIX_PATH "${Protobuf_PREFIX_PATH}")
endif()
find_package(Protobuf REQUIRED)
# Protobuf library which >= 4.22 requires to link the absl
if ("${Protobuf_VERSION}" VERSION_GREATER_EQUAL 4.22)
find_package(absl REQUIRED)
set(ABSL_LIBS absl::log_internal_check_op)
endif()
# Set up the output path.
set(PROTO_GEN_DIR ${PROJECT_SOURCE_DIR}/build/src/proto)
if(NOT (EXISTS "${PROTO_GEN_DIR}" AND IS_DIRECTORY "${PROTO_GEN_DIR}"))
file(MAKE_DIRECTORY ${PROTO_GEN_DIR})
endif()
# Retrieve all proto files.
file(GLOB_RECURSE MSG_PROTOS ${CMAKE_CURRENT_SOURCE_DIR}/*.proto)
set(PROTO_SRC "")
set(PROTO_HDRS "")
foreach(msg ${MSG_PROTOS})
get_filename_component(FIL_WE ${msg} NAME_WE)
list(APPEND PROTO_SRC "${PROTO_GEN_DIR}/${FIL_WE}.pb.cc")
list(APPEND PROTO_HDRS "${PROTO_GEN_DIR}/${FIL_WE}.pb.h")
# Define protoc command.
add_custom_command(
OUTPUT "${PROTO_GEN_DIR}/${FIL_WE}.pb.cc"
"${PROTO_GEN_DIR}/${FIL_WE}.pb.h"
COMMAND ${Protobuf_PROTOC_EXECUTABLE}
ARGS --proto_path ${CMAKE_CURRENT_SOURCE_DIR}
--cpp_out ${PROTO_GEN_DIR}
${msg}
DEPENDS ${msg}
COMMENT "Running C++ protocol buffer compiler on ${msg}"
VERBATIM
)
endforeach()
# Set the protoc output files as GENERATED.
set_source_files_properties(${PROTO_SRC} ${PROTO_HDRS}
PROPERTIES GENERATED TRUE
# Add flag to fix the issue https://github.com/protocolbuffers/protobuf/issues/7140
COMPILE_FLAGS -Wno-array-bounds)
# Add custom targets so that proto files will be generated only when changed.
add_custom_target(generate_message ALL
DEPENDS ${PROTO_SRC} ${PROTO_HDRS}
COMMENT "generate message target"
VERBATIM
)
add_library(otbr-proto STATIC
${PROTO_SRC}
${PROTO_HDRS}
)
find_package(Protobuf REQUIRED)
target_link_libraries(otbr-proto PUBLIC
protobuf::libprotobuf-lite
${ABSL_LIBS}
)
target_include_directories(otbr-proto PUBLIC
${PROJECT_SOURCE_DIR}/build/src
)