xref: /aosp_15_r20/external/sandboxed-api/cmake/SapiDeps.cmake (revision ec63e07ab9515d95e79c211197c445ef84cefa6a)
1*ec63e07aSXin Li# Copyright 2019 Google LLC
2*ec63e07aSXin Li#
3*ec63e07aSXin Li# Licensed under the Apache License, Version 2.0 (the "License");
4*ec63e07aSXin Li# you may not use this file except in compliance with the License.
5*ec63e07aSXin Li# You may obtain a copy of the License at
6*ec63e07aSXin Li#
7*ec63e07aSXin Li#     https://www.apache.org/licenses/LICENSE-2.0
8*ec63e07aSXin Li#
9*ec63e07aSXin Li# Unless required by applicable law or agreed to in writing, software
10*ec63e07aSXin Li# distributed under the License is distributed on an "AS IS" BASIS,
11*ec63e07aSXin Li# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*ec63e07aSXin Li# See the License for the specific language governing permissions and
13*ec63e07aSXin Li# limitations under the License.
14*ec63e07aSXin Li
15*ec63e07aSXin Lifunction(sapi_check_target target)
16*ec63e07aSXin Li  if(NOT TARGET ${target})
17*ec63e07aSXin Li    message(FATAL_ERROR " SAPI: compiling Sandboxed API requires a ${target}
18*ec63e07aSXin Li                   CMake target in your project")
19*ec63e07aSXin Li  endif()
20*ec63e07aSXin Liendfunction()
21*ec63e07aSXin Li
22*ec63e07aSXin Liinclude(SapiFetchContent)
23*ec63e07aSXin Li
24*ec63e07aSXin Li# Use static libraries
25*ec63e07aSXin Liset(_sapi_saved_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
26*ec63e07aSXin Liif (SAPI_ENABLE_SHARED_LIBS)
27*ec63e07aSXin Li  set(SAPI_LIB_TYPE SHARED)
28*ec63e07aSXin Li  set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX})
29*ec63e07aSXin Li  set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
30*ec63e07aSXin Li  # Imply linking with system-wide libs
31*ec63e07aSXin Li  set(SAPI_DOWNLOAD_LIBCAP OFF CACHE BOOL "" FORCE)
32*ec63e07aSXin Li  set(SAPI_DOWNLOAD_LIBFFI OFF CACHE BOOL "" FORCE)
33*ec63e07aSXin Li  set(SAPI_DOWNLOAD_PROTOBUF OFF CACHE BOOL "" FORCE)
34*ec63e07aSXin Li  set(SAPI_DOWNLOAD_ZLIB OFF CACHE BOOL "" FORCE)
35*ec63e07aSXin Li  add_compile_definitions(SAPI_LIB_IS_SHARED=1)
36*ec63e07aSXin Lielse()
37*ec63e07aSXin Li  set(SAPI_LIB_TYPE STATIC)
38*ec63e07aSXin Li  set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
39*ec63e07aSXin Liendif()
40*ec63e07aSXin Li
41*ec63e07aSXin Liset(_sapi_saved_BUILD_TESTING ${BUILD_TESTING})
42*ec63e07aSXin Liset(BUILD_TESTING OFF)  # No need to build test code of our deps
43*ec63e07aSXin Li
44*ec63e07aSXin Liif(SAPI_BUILD_TESTING)
45*ec63e07aSXin Li  if(SAPI_DOWNLOAD_GOOGLETEST)
46*ec63e07aSXin Li    include(cmake/googletest.cmake)
47*ec63e07aSXin Li  endif()
48*ec63e07aSXin Li  sapi_check_target(gtest)
49*ec63e07aSXin Li  sapi_check_target(gtest_main)
50*ec63e07aSXin Li  sapi_check_target(gmock)
51*ec63e07aSXin Li
52*ec63e07aSXin Li  if(SAPI_DOWNLOAD_BENCHMARK)
53*ec63e07aSXin Li    include(cmake/benchmark.cmake)
54*ec63e07aSXin Li  endif()
55*ec63e07aSXin Li  sapi_check_target(benchmark)
56*ec63e07aSXin Liendif()
57*ec63e07aSXin Li
58*ec63e07aSXin Liif(SAPI_DOWNLOAD_ABSL)
59*ec63e07aSXin Li  include(cmake/abseil-cpp.cmake)
60*ec63e07aSXin Liendif()
61*ec63e07aSXin Lisapi_check_target(absl::core_headers)
62*ec63e07aSXin Li
63*ec63e07aSXin Liif(SAPI_DOWNLOAD_LIBCAP)
64*ec63e07aSXin Li  include(cmake/libcap.cmake)
65*ec63e07aSXin Li  sapi_check_target(libcap::libcap)
66*ec63e07aSXin Lielse()
67*ec63e07aSXin Li  find_package(Libcap REQUIRED)
68*ec63e07aSXin Liendif()
69*ec63e07aSXin Li
70*ec63e07aSXin Liif(SAPI_DOWNLOAD_LIBFFI)
71*ec63e07aSXin Li  include(cmake/libffi.cmake)
72*ec63e07aSXin Li  sapi_check_target(libffi::libffi)
73*ec63e07aSXin Lielse()
74*ec63e07aSXin Li  find_package(Libffi REQUIRED)
75*ec63e07aSXin Liendif()
76*ec63e07aSXin Li
77*ec63e07aSXin Liif(SAPI_DOWNLOAD_LIBUNWIND)
78*ec63e07aSXin Li  include(cmake/libunwind.cmake)
79*ec63e07aSXin Liendif()
80*ec63e07aSXin Lisapi_check_target(unwind_ptrace)
81*ec63e07aSXin Li
82*ec63e07aSXin Liif(SAPI_DOWNLOAD_PROTOBUF)
83*ec63e07aSXin Li  include(cmake/protobuf.cmake)
84*ec63e07aSXin Liendif()
85*ec63e07aSXin Lifind_package(Protobuf REQUIRED)
86*ec63e07aSXin Li
87*ec63e07aSXin Liif(SAPI_BUILD_EXAMPLES)
88*ec63e07aSXin Li  if(SAPI_DOWNLOAD_ZLIB)
89*ec63e07aSXin Li    include(cmake/zlib.cmake)
90*ec63e07aSXin Li    sapi_check_target(ZLIB::ZLIB)
91*ec63e07aSXin Li  else()
92*ec63e07aSXin Li    find_package(ZLIB REQUIRED)
93*ec63e07aSXin Li  endif()
94*ec63e07aSXin Liendif()
95*ec63e07aSXin Li
96*ec63e07aSXin Lifind_package(Threads REQUIRED)
97*ec63e07aSXin Li
98*ec63e07aSXin Liif(SAPI_ENABLE_CLANG_TOOL)
99*ec63e07aSXin Li  # If unset (the default), CMake will build the tool first and add it as a
100*ec63e07aSXin Li  # dependency.
101*ec63e07aSXin Li  set(SAPI_CLANG_TOOL_EXECUTABLE "" CACHE FILEPATH
102*ec63e07aSXin Li    "Path to the Clang tool based header generator"
103*ec63e07aSXin Li  )
104*ec63e07aSXin Lielse()
105*ec63e07aSXin Li  # Find Python 3 and add its location to the cache so that its available in
106*ec63e07aSXin Li  # the add_sapi_library() macro in embedding projects.
107*ec63e07aSXin Li  find_package(Python3 COMPONENTS Interpreter REQUIRED)
108*ec63e07aSXin Li  set(SAPI_PYTHON3_EXECUTABLE "${Python3_EXECUTABLE}" CACHE INTERNAL "" FORCE)
109*ec63e07aSXin Liendif()
110*ec63e07aSXin Li
111*ec63e07aSXin Li# Undo global changes
112*ec63e07aSXin Liif(_sapi_saved_BUILD_TESTING)
113*ec63e07aSXin Li  set(BUILD_TESTING "${_sapi_saved_BUILD_TESTING}")
114*ec63e07aSXin Liendif()
115*ec63e07aSXin Liset(CMAKE_FIND_LIBRARY_SUFFIXES ${_sapi_saved_CMAKE_FIND_LIBRARY_SUFFIXES})
116