diff options
Diffstat (limited to '')
-rw-r--r-- | third_party/content_analysis_sdk/CMakeLists.txt | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/third_party/content_analysis_sdk/CMakeLists.txt b/third_party/content_analysis_sdk/CMakeLists.txt new file mode 100644 index 0000000000..5dacc81031 --- /dev/null +++ b/third_party/content_analysis_sdk/CMakeLists.txt @@ -0,0 +1,214 @@ +# Copyright 2022 The Chromium Authors. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +cmake_minimum_required(VERSION 3.22) + +project(chrome_enterprise_connector_local_analysis) + +# Ensure a C++14 compiler is used. +set(CMAKE_CXX_STANDARD 14) + +# Determine the operating system being targeted. +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(WIN TRUE) + set(MAC FALSE) + set(LINUX FALSE) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(WIN FALSE) + set(MAC TRUE) + set(LINUX FALSE) +else() + set(WIN FALSE) + set(MAC FALSE) + set(LINUX TRUE) +endif() + +# Set the path to the protoc protobuf compiler. +if(WIN) + set(PROTOC ${PROJECT_BINARY_DIR}/vcpkg/installed/x64-windows/tools/protobuf/protoc.exe) +elseif(MAC) + set(PROTOC ${PROJECT_BINARY_DIR}/vcpkg/installed/x64-osx/tools/protobuf/protoc) +elseif(LINUX) + set(PROTOC ${PROJECT_BINARY_DIR}/vcpkg/installed/x64-linux/tools/protobuf/protoc) +endif() + +# Calls the protoc compiler using the arguments specific to this project. +# protobuf_generate_cpp is not flexible enough for our needs. +add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/gen/content_analysis/sdk/analysis.pb.cc + COMMAND + ${PROTOC} + --cpp_out=${PROJECT_BINARY_DIR}/gen + --proto_path=${PROJECT_SOURCE_DIR}/proto + ${PROJECT_SOURCE_DIR}/proto/content_analysis/sdk/analysis.proto + DEPENDS ./proto/content_analysis/sdk/analysis.proto + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} +) +# Define proto target. Compile this target exclusively by calling: +# `cmake --build <build_dir> --target proto` +add_custom_target(proto + ALL + DEPENDS + ${PROJECT_BINARY_DIR}/gen/content_analysis/sdk/analysis.pb.cc +) + +# The include directory contains the header files needed by the demo code. +# The gen directory contains generated protobuf headers describing the request +# and response objects used to communicate with Google Chrome. +set(AGENT_INCLUDES + ./agent/include + . + ${PROJECT_BINARY_DIR}/gen +) +set(BROWSER_INCLUDES + ./browser/include + . + ${PROJECT_BINARY_DIR}/gen +) + +# The SDK contains platform specific code for each of the supported platforms. +# ${PLATFORM_AGENT_CODE} holds the list of source files needed for the current +# platform being built. +if(WIN) + set(PLATFORM_AGENT_CODE + ./agent/src/agent_utils_win.cc + ./agent/src/agent_utils_win.h + ./agent/src/agent_win.cc + ./agent/src/agent_win.h + ./agent/src/event_win.cc + ./agent/src/event_win.h + ./agent/src/scoped_print_handle_win.cc + ./agent/src/scoped_print_handle_win.h + ./common/utils_win.cc + ./common/utils_win.h + ) + set(PLATFORM_TEST_CODE + ./agent/src/agent_win_unittest.cc + ./agent/src/event_win_unittest.cc + ) +elseif(MAC) + set(PLATFORM_AGENT_CODE + ./agent/src/agent_mac.cc + ./agent/src/agent_mac.h + ./agent/src/event_mac.cc + ./agent/src/event_mac.h + ./agent/src/scoped_print_handle_mac.cc + ./agent/src/scoped_print_handle_mac.h + ) + set(PLATFORM_TEST_CODE + ./agent/src/event_mac_unittest.cc + ) +elseif(LINUX) + set(PLATFORM_AGENT_CODE + ./agent/src/agent_posix.cc + ./agent/src/agent_posix.h + ./agent/src/event_posix.cc + ./agent/src/event_posix.h + ./agent/src/scoped_print_handle_posix.cc + ./agent/src/scoped_print_handle_posix.h + ) + set(PLATFORM_TEST_CODE + ./agent/src/event_posix_unittest.cc + ) +endif() + +# The SDK contains platform specific code for each of the supported platforms. +# ${PLATFORM_BROWSER_CODE} holds the list of source files needed for the current +# platform being built. +if(WIN) + set(PLATFORM_BROWSER_CODE + ./browser/src/client_win.cc + ./browser/src/client_win.h + ./common/utils_win.cc + ./common/utils_win.h + ) +elseif(MAC) + set(PLATFORM_BROWSER_CODE + ./browser/src/client_mac.cc + ./browser/src/client_mac.h + ) +elseif(LINUX) + set(PLATFORM_BROWSER_CODE + ./browser/src/client_posix.cc + ./browser/src/client_posix.h + ) +endif() + +# Makes available the package definitions in vcpkg. +include("${PROJECT_BINARY_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake") +find_package(Protobuf CONFIG REQUIRED) +# Unit tests +enable_testing() +find_package(GTest CONFIG REQUIRED) +include(GoogleTest) + +add_executable(unit_tests + ${PLATFORM_TEST_CODE} +) +set_property(TARGET unit_tests PROPERTY CXX_STANDARD 20) +target_include_directories(unit_tests + PRIVATE + ${AGENT_INCLUDES} + ${BROWSER_INCLUDES} +) +target_link_libraries(unit_tests + PUBLIC + cac_agent + cac_browser + GTest::gtest GTest::gtest_main +) + +gtest_discover_tests(unit_tests) + +# Builds the content analysis connector agent linker library. This library +# is linked into the agent in order to listen for and process content analysis +# requests from Google Chrome. +add_library(cac_agent + ./agent/include/content_analysis/sdk/analysis_agent.h + ./agent/include/content_analysis/sdk/result_codes.h + ./agent/src/agent_base.cc + ./agent/src/agent_base.h + ./agent/src/event_base.cc + ./agent/src/event_base.h + ./agent/src/scoped_print_handle_base.cc + ./agent/src/scoped_print_handle_base.h + ${PLATFORM_AGENT_CODE} + ${PROJECT_BINARY_DIR}/gen/content_analysis/sdk/analysis.pb.cc +) +target_link_libraries(cac_agent + PUBLIC + protobuf::libprotoc + protobuf::libprotobuf + protobuf::libprotobuf-lite) +target_include_directories(cac_agent PRIVATE ${AGENT_INCLUDES}) +# Builds the content analysis connector browser linker library. This library +# is linked into the client in order to send content analysis requests to the +# agent. +add_library(cac_browser + ./browser/include/content_analysis/sdk/analysis_client.h + ./browser/src/client_base.cc + ./browser/src/client_base.h + ${PLATFORM_BROWSER_CODE} + ${PROJECT_BINARY_DIR}/gen/content_analysis/sdk/analysis.pb.cc +) +target_include_directories(cac_browser PRIVATE ${BROWSER_INCLUDES}) +target_link_libraries(cac_browser + PUBLIC + protobuf::libprotoc + protobuf::libprotobuf + protobuf::libprotobuf-lite) + +# The demo agent executable. +add_executable(agent + ./demo/agent.cc + ./demo/handler.h +) +target_compile_features(agent PRIVATE cxx_std_17) +target_include_directories(agent PRIVATE ${AGENT_INCLUDES}) +target_link_libraries(agent PRIVATE cac_agent) + +# The demo client executable. +add_executable(browser ./demo/client.cc) +target_include_directories(browser PRIVATE ${BROWSER_INCLUDES}) +target_link_libraries(browser PRIVATE cac_browser) + |