summaryrefslogtreecommitdiffstats
path: root/third_party/content_analysis_sdk/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/content_analysis_sdk/CMakeLists.txt')
-rw-r--r--third_party/content_analysis_sdk/CMakeLists.txt214
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)
+