diff --git a/CMakeLists.txt b/CMakeLists.txt index 0663f59d..8f9cab19 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,7 +102,7 @@ add_subdirectory(packaging) add_subdirectory(src) if (NOT NETREMOTE_EXCLUDE_API) - add_subdirectory(protocol) + add_subdirectory(api) endif() if (NOT NETREMOTE_EXCLUDE_TESTS) diff --git a/api/CMakeLists.txt b/api/CMakeLists.txt new file mode 100644 index 00000000..6378dc9a --- /dev/null +++ b/api/CMakeLists.txt @@ -0,0 +1,26 @@ + +set(PROTO_DIR ${CMAKE_CURRENT_LIST_DIR}/protos) + +# List of all protocol buffer files defining the API. +set(PROTO_FILES + ${PROTO_DIR}/NetRemoteDataStream.proto + ${PROTO_DIR}/NetRemoteDataStreamingService.proto + ${PROTO_DIR}/NetRemoteNetwork.proto + ${PROTO_DIR}/NetRemoteService.proto + ${PROTO_DIR}/NetRemoteWifi.proto + ${PROTO_DIR}/Network8021x.proto + ${PROTO_DIR}/NetworkCore.proto + ${PROTO_DIR}/WifiCore.proto +) + +# Install the .proto files for consumers that wish to build them themselves. +install( + FILES + ${PROTO_FILES} + DESTINATION "${NETREMOTE_DIR_INSTALL_PUBLIC_HEADER_BASE}/api" +) + +# Include the API bindings (protocol) if they are not excluded. +if (NOT NETREMOTE_EXCLUDE_API_BINDINGS) + add_subdirectory(protocol) +endif() diff --git a/protocol/CMakeLists.txt b/api/protocol/CMakeLists.txt similarity index 66% rename from protocol/CMakeLists.txt rename to api/protocol/CMakeLists.txt index 91586c0d..c3881d2b 100644 --- a/protocol/CMakeLists.txt +++ b/api/protocol/CMakeLists.txt @@ -1,35 +1,9 @@ set(NETREMOTE_PROTOCOL_PUBLIC_INCLUDE ${CMAKE_CURRENT_LIST_DIR}/include) - set(NETREMOTE_PROTOCOL_PUBLIC_INCLUDE_SUFFIX microsoft/net/remote/protocol) set(NETREMOTE_PROTOCOL_PUBLIC_INCLUDE_PREFIX ${NETREMOTE_PROTOCOL_PUBLIC_INCLUDE}/${NETREMOTE_PROTOCOL_PUBLIC_INCLUDE_SUFFIX}) -set(NETREMOTE_API_PUBLIC_INCLUDE_SUFFIX microsoft/net/remote/api) -set(NETREMOTE_API_PUBLIC_INCLUDE_PREFIX ${NETREMOTE_PROTOCOL_PUBLIC_INCLUDE}/${NETREMOTE_API_PUBLIC_INCLUDE_SUFFIX}) - -set(PROTO_DIR ${NETREMOTE_API_PUBLIC_INCLUDE_PREFIX}) -set(PROTO_DIR_BINARY ${CMAKE_CURRENT_BINARY_DIR}/${NETREMOTE_API_PUBLIC_INCLUDE_SUFFIX}) - -set(PROTO_FILES - ${PROTO_DIR}/NetRemoteDataStream.proto - ${PROTO_DIR}/NetRemoteDataStreamingService.proto - ${PROTO_DIR}/NetRemoteNetwork.proto - ${PROTO_DIR}/NetRemoteService.proto - ${PROTO_DIR}/NetRemoteWifi.proto - ${PROTO_DIR}/Network8021x.proto - ${PROTO_DIR}/NetworkCore.proto - ${PROTO_DIR}/WifiCore.proto -) - -add_library(${PROJECT_NAME}-api INTERFACE "") -target_sources(${PROJECT_NAME}-api - PUBLIC - FILE_SET HEADERS - BASE_DIRS - ${NETREMOTE_PROTOCOL_PUBLIC_INCLUDE} - FILES - ${NETREMOTE_PROTOCOL_PUBLIC_INCLUDE_PREFIX}/NetRemoteProtocol.hxx -) +set(PROTO_DIR_BINARY ${CMAKE_CURRENT_BINARY_DIR}/${NETREMOTE_PROTOCOL_PUBLIC_INCLUDE_SUFFIX}) # Create a list of the generated headers. The below code isn't used because # we've encountered intermittent errors when building with external vcpkg (eg. @@ -63,7 +37,9 @@ set(PROTO_HEADERS_GENERATED_GRPC ${PROTO_DIR_BINARY}/WifiCore.grpc.pb.h ) +# Define a static library containing pre-built protocol buffer and gRPC bindings. add_library(${PROJECT_NAME}-protocol STATIC "") +add_library(${PROJECT_NAME}-api-bindings ALIAS ${PROJECT_NAME}-protocol) target_sources(${PROJECT_NAME}-protocol PRIVATE @@ -86,6 +62,7 @@ target_link_libraries(${PROJECT_NAME}-protocol gRPC::grpc++_unsecure ) +# Generate C++ headers and sources (.pb.[h|cc]) of the protocol buffer data types. protobuf_generate(TARGET ${PROJECT_NAME}-protocol LANGUAGE cpp IMPORT_DIRS ${PROTO_DIR} @@ -93,6 +70,7 @@ protobuf_generate(TARGET ${PROJECT_NAME}-protocol PROTOC_OUT_FILES ${PROTO_FILES} ) +# Generate C++ headers and sources with gRPC support (.grpc.pb.[h|cc]) of the protocol buffer data types. protobuf_generate(TARGET ${PROJECT_NAME}-protocol LANGUAGE grpc GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc @@ -101,28 +79,31 @@ protobuf_generate(TARGET ${PROJECT_NAME}-protocol PROTOC_OUT_DIR ${PROTO_DIR_BINARY} ) -if (NOT NETREMOTE_EXCLUDE_API) - install( - FILES - ${PROTO_FILES} - DESTINATION "${NETREMOTE_DIR_INSTALL_PUBLIC_HEADER_BASE}/api" - ) - install( - TARGETS ${PROJECT_NAME}-api - EXPORT ${PROJECT_NAME} - COMPONENT dev - FILE_SET HEADERS - PUBLIC_HEADER DESTINATION "${NETREMOTE_DIR_INSTALL_PUBLIC_HEADER_BASE}" - ) -endif() +install( + TARGETS ${PROJECT_NAME}-protocol + EXPORT ${PROJECT_NAME} + COMPONENT dev + FILE_SET HEADERS + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION "${NETREMOTE_DIR_INSTALL_PUBLIC_HEADER_BASE}" +) + +# Define a header-only (interface) library containing public protocol information. +add_library(${PROJECT_NAME}-api INTERFACE "") -if (NOT NETREMOTE_EXCLUDE_API_BINDINGS) - install( - TARGETS ${PROJECT_NAME}-protocol - EXPORT ${PROJECT_NAME} - COMPONENT dev - FILE_SET HEADERS - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION "${NETREMOTE_DIR_INSTALL_PUBLIC_HEADER_BASE}" - ) -endif() +target_sources(${PROJECT_NAME}-api + PUBLIC + FILE_SET HEADERS + BASE_DIRS + ${NETREMOTE_PROTOCOL_PUBLIC_INCLUDE} + FILES + ${NETREMOTE_PROTOCOL_PUBLIC_INCLUDE_PREFIX}/NetRemoteProtocol.hxx +) + +install( + TARGETS ${PROJECT_NAME}-api + EXPORT ${PROJECT_NAME} + COMPONENT dev + FILE_SET HEADERS + PUBLIC_HEADER DESTINATION "${NETREMOTE_DIR_INSTALL_PUBLIC_HEADER_BASE}" +) diff --git a/protocol/include/microsoft/net/remote/protocol/NetRemoteProtocol.hxx b/api/protocol/include/microsoft/net/remote/protocol/NetRemoteProtocol.hxx similarity index 100% rename from protocol/include/microsoft/net/remote/protocol/NetRemoteProtocol.hxx rename to api/protocol/include/microsoft/net/remote/protocol/NetRemoteProtocol.hxx diff --git a/protocol/include/microsoft/net/remote/api/NetRemoteDataStream.proto b/api/protos/NetRemoteDataStream.proto similarity index 100% rename from protocol/include/microsoft/net/remote/api/NetRemoteDataStream.proto rename to api/protos/NetRemoteDataStream.proto diff --git a/protocol/include/microsoft/net/remote/api/NetRemoteDataStreamingService.proto b/api/protos/NetRemoteDataStreamingService.proto similarity index 100% rename from protocol/include/microsoft/net/remote/api/NetRemoteDataStreamingService.proto rename to api/protos/NetRemoteDataStreamingService.proto diff --git a/protocol/include/microsoft/net/remote/api/NetRemoteNetwork.proto b/api/protos/NetRemoteNetwork.proto similarity index 100% rename from protocol/include/microsoft/net/remote/api/NetRemoteNetwork.proto rename to api/protos/NetRemoteNetwork.proto diff --git a/protocol/include/microsoft/net/remote/api/NetRemoteService.proto b/api/protos/NetRemoteService.proto similarity index 100% rename from protocol/include/microsoft/net/remote/api/NetRemoteService.proto rename to api/protos/NetRemoteService.proto diff --git a/protocol/include/microsoft/net/remote/api/NetRemoteWifi.proto b/api/protos/NetRemoteWifi.proto similarity index 100% rename from protocol/include/microsoft/net/remote/api/NetRemoteWifi.proto rename to api/protos/NetRemoteWifi.proto diff --git a/protocol/include/microsoft/net/remote/api/Network8021x.proto b/api/protos/Network8021x.proto similarity index 100% rename from protocol/include/microsoft/net/remote/api/Network8021x.proto rename to api/protos/Network8021x.proto diff --git a/protocol/include/microsoft/net/remote/api/NetworkCore.proto b/api/protos/NetworkCore.proto similarity index 100% rename from protocol/include/microsoft/net/remote/api/NetworkCore.proto rename to api/protos/NetworkCore.proto diff --git a/protocol/include/microsoft/net/remote/api/WifiCore.proto b/api/protos/WifiCore.proto similarity index 100% rename from protocol/include/microsoft/net/remote/api/WifiCore.proto rename to api/protos/WifiCore.proto