diff --git a/CMakeLists.txt b/CMakeLists.txt index 95b30cc0f..989b03602 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,7 @@ find_package(Systemd) find_package(OpenGLES COMPONENTS V3) find_package(LeapV2) find_package(ONNXRuntime) +find_package(Percetto) #https://github.com/arsenm/sanitizers-cmake find_package(Sanitizers) @@ -115,7 +116,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux") ) pkg_check_modules(SURVIVE IMPORTED_TARGET survive) - pkg_check_modules(PERCETTO percetto) else() find_package(OpenGL) endif() diff --git a/cmake/FindPercetto.cmake b/cmake/FindPercetto.cmake new file mode 100644 index 000000000..616a977c3 --- /dev/null +++ b/cmake/FindPercetto.cmake @@ -0,0 +1,114 @@ +# Copyright 2021 Collabora, Ltd. +# SPDX-License-Identifier: BSL-1.0 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +# +# Original Author: +# 2021 Ryan Pavlik + +#[[.rst: +FindPercetto +--------------- + +Find the Percetto C wrapper around the Perfetto tracing API. + +Targets +^^^^^^^ + +If successful, the following imported targets are created. + +* ``Percetto::percetto`` + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variable may also be set to assist/control the operation of this module: + +``Percetto_ROOT_DIR`` + The root to search for Percetto. +#]] + +set(Percetto_ROOT_DIR + "${Percetto_ROOT_DIR}" + CACHE PATH "Root to search for Percetto") + +include(FeatureSummary) +set_package_properties( + Percetto PROPERTIES + URL "https://github.com/olvaffe/percetto/" + DESCRIPTION "A C wrapper around the C++ Perfetto tracing SDK.") + +# See if we can find something made by android prefab (gradle) +find_package(Percetto QUIET CONFIG NAMES percetto Percetto) +if(Percetto_FOUND) + if(TARGET Percetto::percetto) + # OK, good - unexpected, but good. + get_target_property(Percetto_LIBRARY Percetto::percetto + IMPORTED_LOCATION) + get_target_property(Percetto_INCLUDE_DIR Percetto::percetto + INTERFACE_INCLUDE_DIRECTORIES) + elseif(TARGET percetto::percetto) + # Let's make our own of the right name + add_library(Percetto::percetto STATIC IMPORTED) + get_target_property(Percetto_INCLUDE_DIR percetto::percetto + INTERFACE_INCLUDE_DIRECTORIES) + get_target_property(Percetto_LIBRARY percetto::percetto + IMPORTED_LOCATION) + set_target_properties( + Percetto::percetto + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${Percetto_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${Percetto_LIBRARY}) + else() + message(FATAL_ERROR "assumptions failed") + endif() + find_package_handle_standard_args( + Percetto REQUIRED_VARS Percetto_LIBRARY Percetto_INCLUDE_DIR) + return() +endif() + +if(NOT ANDROID) + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + set(_old_prefix_path "${CMAKE_PREFIX_PATH}") + # So pkg-config uses Percetto_ROOT_DIR too. + if(Percetto_ROOT_DIR) + list(APPEND CMAKE_PREFIX_PATH ${Percetto_ROOT_DIR}) + endif() + pkg_check_modules(PC_percetto QUIET percetto) + # Restore + set(CMAKE_PREFIX_PATH "${_old_prefix_path}") + endif() +endif() + +find_path( + Percetto_INCLUDE_DIR + NAMES percetto.h + PATHS ${Percetto_ROOT_DIR} + HINTS ${PC_percetto_INCLUDE_DIRS} + PATH_SUFFIXES include) + +find_library( + Percetto_LIBRARY + NAMES percetto + PATHS ${Percetto_ROOT_DIR} + HINTS ${PC_percetto_LIBRARY_DIRS} + PATH_SUFFIXES lib) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Percetto REQUIRED_VARS Percetto_INCLUDE_DIR + Percetto_LIBRARY) +if(Percetto_FOUND) + if(NOT TARGET Percetto::percetto) + add_library(Percetto::percetto STATIC IMPORTED) + + set_target_properties( + Percetto::percetto + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${Percetto_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${Percetto_LIBRARY}) + endif() + mark_as_advanced(Percetto_LIBRARY Percetto_INCLUDE_DIR) +endif() +mark_as_advanced(Percetto_ROOT_DIR)