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