sandboxed-api/sandboxed_api/CMakeLists.txt
Oliver Kunz 86e356b7ee Add Sandbox::AllocateAndTransferToSandboxee utility function.
Create a utility function to copy a hostcode local buffer into the sandboxee. This combines the following steps into one API call:

1) Create a SAPI variable backed with the hostcode local buffer
2) Allocate the SAPI variable in the sandboxee's memory space
3) Transfer the SAPI variable into the sandboxee's memory space

The function returns a `std::unique_ptr` wrapped `sapi:✌️:RemotePtr` which points to the address of the buffer in the sandboxee's memory space.

PiperOrigin-RevId: 611151615
Change-Id: Ie5012bf17826614395d2056d560689fd9e429d75
2024-02-28 10:39:15 -08:00

261 lines
6.4 KiB
CMake

# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
add_subdirectory(tools/filewrapper)
add_subdirectory(sandbox2)
add_subdirectory(util)
if(SAPI_ENABLE_CLANG_TOOL AND NOT SAPI_CLANG_TOOL_EXECUTABLE)
add_subdirectory(tools/clang_generator)
endif()
add_subdirectory(examples)
# sandboxed_api:config
add_library(sapi_config ${SAPI_LIB_TYPE}
config.cc
config.h
)
add_library(sapi::config ALIAS sapi_config)
target_link_libraries(sapi_config
PRIVATE sapi::base
PUBLIC absl::config
)
# sandboxed_api:proto_arg
sapi_protobuf_generate_cpp(_sapi_proto_arg_pb_cc _sapi_proto_arg_pb_h
proto_arg.proto
)
add_library(sapi_proto_arg_proto ${SAPI_LIB_TYPE}
${_sapi_proto_arg_pb_cc}
${_sapi_proto_arg_pb_h}
)
add_library(sapi::proto_arg_proto ALIAS sapi_proto_arg_proto)
target_link_libraries(sapi_proto_arg_proto PRIVATE
protobuf::libprotobuf
sapi::base
)
# sandboxed_api:embed_file
add_library(sapi_embed_file ${SAPI_LIB_TYPE}
embed_file.cc
embed_file.h
file_toc.h
)
add_library(sapi::embed_file ALIAS sapi_embed_file)
target_link_libraries(sapi_embed_file
PRIVATE absl::strings
sandbox2::util
sapi::base
sapi::fileops
sapi::raw_logging
PUBLIC absl::flat_hash_map
absl::synchronization
)
# sandboxed_api:sapi
add_library(sapi_sapi ${SAPI_LIB_TYPE}
sandbox.cc
sandbox.h
transaction.cc
transaction.h
)
add_library(sapi::sapi ALIAS sapi_sapi)
target_link_libraries(sapi_sapi
PRIVATE absl::base
absl::dynamic_annotations
absl::flat_hash_map
absl::log
absl::log_globals
absl::span
absl::status
absl::statusor
absl::str_format
absl::strings
absl::synchronization
sandbox2::bpf_helper
sapi::file_base
sapi::fileops
sapi::runfiles
sapi::strerror
sandbox2::util
sapi::embed_file
sapi::vars
PUBLIC absl::check
absl::core_headers
sandbox2::client
sandbox2::sandbox2
sapi::base
sapi::status
)
# sandboxed_api:call
add_library(sapi_call ${SAPI_LIB_TYPE}
call.h
)
add_library(sapi::call ALIAS sapi_call)
target_link_libraries(sapi_call PRIVATE
absl::core_headers
sapi::var_type
sapi::base
)
# sandboxed_api:lenval_core
add_library(sapi_lenval_core ${SAPI_LIB_TYPE}
lenval_core.h
)
add_library(sapi::lenval_core ALIAS sapi_lenval_core)
target_link_libraries(sapi_lenval_core PRIVATE
sapi::base
)
# sandboxed_api:var_type
add_library(sapi_var_type ${SAPI_LIB_TYPE}
var_type.h
)
add_library(sapi::var_type ALIAS sapi_var_type)
target_link_libraries(sapi_var_type PRIVATE
sapi::base
)
# sandboxed_api:vars
add_library(sapi_vars ${SAPI_LIB_TYPE}
proto_helper.cc
proto_helper.h
rpcchannel.cc
rpcchannel.h
var_abstract.cc
var_abstract.h
var_array.h
var_int.cc
var_int.h
var_lenval.cc
var_lenval.h
var_proto.h
var_ptr.h
var_reg.h
var_struct.h
var_void.h
vars.h
)
add_library(sapi::vars ALIAS sapi_vars)
target_link_libraries(sapi_vars
PRIVATE absl::core_headers
absl::status
absl::statusor
absl::str_format
absl::strings
absl::synchronization
absl::utility
sandbox2::comms
sapi::base
sapi::call
sapi::lenval_core
sapi::proto_arg_proto
sapi::status
sapi::var_type
PUBLIC absl::log
)
# sandboxed_api:client
add_library(sapi_client ${SAPI_LIB_TYPE}
client.cc
)
add_library(sapi::client ALIAS sapi_client)
target_link_libraries(sapi_client
PRIVATE absl::check
absl::core_headers
absl::dynamic_annotations
absl::flags_parse
absl::log
absl::log_flags
absl::log_initialize
absl::statusor
absl::strings
libffi::libffi
sandbox2::comms
sandbox2::forkingclient
sandbox2::logsink
sapi::base
sapi::call
sapi::lenval_core
sapi::proto_arg_proto
sapi::vars
${CMAKE_DL_LIBS}
)
if(BUILD_TESTING AND SAPI_BUILD_TESTING AND NOT CMAKE_CROSSCOMPILING)
# sandboxed_api:testing
add_library(sapi_testing ${SAPI_LIB_TYPE}
testing.cc
testing.h
)
add_library(sapi::testing ALIAS sapi_testing)
target_link_libraries(sapi_testing
PRIVATE absl::strings
sapi::file_base
sapi::base
PUBLIC sapi::config
sandbox2::allow_all_syscalls
sandbox2::policybuilder
)
# sandboxed_api:sapi_test
add_executable(sapi_test
sapi_test.cc
)
target_link_libraries(sapi_test PRIVATE
absl::status
absl::statusor
absl::time
benchmark
sandbox2::result
sapi::proto_arg_proto
sapi::sapi
sapi::status
sapi::status_matchers
sapi::stringop_sapi
sapi::sum_sapi
sapi::test_main
sapi::testing
)
gtest_discover_tests_xcompile(sapi_test)
endif()
# Install headers and libraries, excluding tools, tests and examples
foreach(_dir IN ITEMS . sandbox2 sandbox2/network_proxy sandbox2/util util)
get_property(_sapi_targets DIRECTORY ${_dir} PROPERTY BUILDSYSTEM_TARGETS)
list(FILTER _sapi_targets INCLUDE REGEX ^\(sapi|sandbox2\).*)
list(FILTER _sapi_targets EXCLUDE REGEX _test)
install(TARGETS ${_sapi_targets}
DESTINATION ${CMAKE_INSTALL_LIBDIR})
set_property(TARGET ${_sapi_targets} PROPERTY SOVERSION 1)
endforeach()
file(GLOB_RECURSE _sapi_headers true ${CMAKE_CURRENT_LIST_DIR}/*.h)
list(FILTER _sapi_headers EXCLUDE REGEX /\(tools|examples\)/)
foreach(_file ${_sapi_headers})
get_filename_component(_dir ${_file} DIRECTORY)
string(REPLACE ${CMAKE_CURRENT_LIST_DIR} "" _dir ${_dir})
install(FILES ${_file}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sandboxed_api/${_dir})
endforeach()
configure_file(
"${PROJECT_SOURCE_DIR}/cmake/sapi.pc.in"
"${PROJECT_BINARY_DIR}/sapi.pc"
@ONLY
)
install(FILES "${PROJECT_BINARY_DIR}/sapi.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")