summaryrefslogtreecommitdiffstats
path: root/cmake/modules/FindSinsp.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/modules/FindSinsp.cmake')
-rw-r--r--cmake/modules/FindSinsp.cmake176
1 files changed, 176 insertions, 0 deletions
diff --git a/cmake/modules/FindSinsp.cmake b/cmake/modules/FindSinsp.cmake
new file mode 100644
index 0000000..9729b02
--- /dev/null
+++ b/cmake/modules/FindSinsp.cmake
@@ -0,0 +1,176 @@
+#
+# - Find libsinsp and libscap
+# Find libsinsp and libscap includes and libraries.
+# Adapted from FindZSTD.cmake.
+#
+# This module will look for libsinsp and libscap using pkg-config. If that
+# fails, it will search ${SINSP_INCLUDEDIR} and ${SINSP_HINTS}/include
+# for the libsinsp and libscap include directory and ${SINSP_LIBDIR} and
+# ${SINSP_HINTS}/lib for the libsinsp and libscap libraries.
+#
+# It will set the following variables:
+#
+# SINSP_FOUND - True if libsinsp found.
+# SINSP_INCLUDE_DIRS - Where to find sinsp.h, scap.h, etc.
+# SINSP_LINK_LIBRARIES - List of libraries when using libsinsp.
+
+# You must manually set the following variables:
+# FALCO_PLUGINS - Paths to plugins built from https://github.com/falcosecurity/plugins/.
+
+# To do:
+# SINSP_DLL_DIR - (Windows) Path to the libsinsp and libscap DLLs
+# SINSP_DLL - (Windows) Name of the libsinsp and libscap DLLs
+
+include( FindWSWinLibs )
+FindWSWinLibs( "libsinsp-.*" "SINSP_HINTS" )
+
+include(CMakeDependentOption)
+
+if( NOT USE_REPOSITORY)
+ find_package(PkgConfig)
+ pkg_check_modules(SINSP libsinsp)
+endif()
+
+if(NOT SINSP_FOUND)
+ # pkg_check_modules didn't work, so look for ourselves.
+ find_path(SINSP_INCLUDE_DIRS
+ NAMES sinsp.h
+ HINTS "${SINSP_INCLUDEDIR}" "${SINSP_HINTS}/include"
+ PATH_SUFFIXES falcosecurity/userspace/libsinsp
+ /usr/include
+ /usr/local/include
+ )
+
+ find_path(_scap_include_dir
+ NAMES scap.h
+ HINTS "${SINSP_INCLUDEDIR}" "${SINSP_HINTS}/include"
+ PATH_SUFFIXES falcosecurity/userspace/libscap
+ /usr/include
+ /usr/local/include
+ )
+ if(_scap_include_dir)
+ list(APPEND SINSP_INCLUDE_DIRS _scap_include_dir)
+ endif()
+ unset(_scap_include_dir)
+
+ find_library(SINSP_LINK_LIBRARIES
+ NAMES sinsp
+ HINTS "${SINSP_LIBDIR}" "${SINSP_HINTS}/lib"
+ PATHS falcosecurity
+ /usr/lib
+ /usr/local/lib
+ )
+
+ set(_scap_libs
+ scap
+ scap_engine_util
+ scap_event_schema
+ driver_event_schema
+ scap_engine_bpf
+ scap_engine_gvisor
+ scap_engine_kmod
+ scap_engine_nodriver
+ scap_engine_noop
+ scap_engine_savefile
+ scap_engine_source_plugin
+ scap_engine_udig
+ )
+
+ foreach(_scap_lib ${_scap_libs})
+ find_library(_lib
+ NAMES ${_scap_lib}
+ HINTS "${SINSP_LIBDIR}" "${SINSP_HINTS}/lib"
+ PATHS falcosecurity
+ /usr/lib
+ /usr/local/lib
+ )
+ if (_lib)
+ list(APPEND SINSP_LINK_LIBRARIES ${_lib})
+ endif()
+ endforeach()
+ unset(_scap_libs)
+ unset(_scap_lib)
+ unset(_lib)
+ if(SINSP_INCLUDE_DIRS AND JSONCPP_LIBRARY)
+ set(SINSP_FOUND 1)
+ endif()
+
+ find_path(JSONCPP_INCLUDE_DIR
+ NAMES json/json.h
+ HINTS "${SINSP_INCLUDEDIR}" "${SINSP_HINTS}/include"
+ PATH_SUFFIXES jsoncpp
+ /usr/include
+ /usr/local/include
+ )
+ if (JSON_INCLUDE_DIR)
+ list(APPEND SINSP_INCLUDE_DIRS ${JSONCPP_INCLUDE_DIR})
+ endif()
+
+ find_library(JSONCPP_LIBRARY
+ NAMES jsoncpp
+ HINTS "${SINSP_LIBDIR}" "${SINSP_HINTS}/lib"
+ PATHS
+ /usr/lib
+ /usr/local/lib
+ )
+ if (JSONCPP_LIBRARY)
+ list(APPEND JSONCPP_LIBRARY ${JSONCPP_LIBRARY})
+ endif()
+
+ find_path(TBB_INCLUDE_DIR
+ NAMES tbb/tbb.h
+ HINTS "${SINSP_INCLUDEDIR}" "${SINSP_HINTS}/include"
+ /usr/include
+ /usr/local/include
+ )
+ if (TBB_INCLUDE_DIR)
+ list(APPEND SINSP_INCLUDE_DIRS ${TBB_INCLUDE_DIR})
+ endif()
+
+ find_library(TBB_LIBRARY
+ NAMES tbb
+ HINTS "${SINSP_LIBDIR}" "${SINSP_HINTS}/lib"
+ PATHS
+ /usr/lib
+ /usr/local/lib
+ )
+ if (TBB_LIBRARY)
+ list(APPEND JSONCPP_LIBRARY ${TBB_LIBRARY})
+ endif()
+endif()
+
+# As https://cmake.org/cmake/help/latest/command/link_directories.html
+# says, "Prefer to pass full absolute paths to libraries where possible,
+# since this ensures the correct library will always be linked," so use
+# SINSP_LINK_LIBRARIES instead of SINSP_LIBRARIES
+# XXX SINSP_VERSION will require peeking for a #define or something similar.
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Sinsp
+ REQUIRED_VARS
+ SINSP_INCLUDE_DIRS
+ SINSP_LINK_LIBRARIES
+ # VERSION_VAR SINSP_VERSION
+)
+
+if(SINSP_FOUND)
+# if (WIN32)
+# set ( SINSP_DLL_DIR "${SINSP_HINTS}/bin"
+# CACHE PATH "Path to sinsp DLL"
+# )
+# file( GLOB _SINSP_dll RELATIVE "${SINSP_DLL_DIR}"
+# "${SINSP_DLL_DIR}/sinsp*.dll"
+# )
+# set ( SINSP_DLL ${_SINSP_dll}
+# # We're storing filenames only. Should we use STRING instead?
+# CACHE FILEPATH "sinsp DLL file name"
+# )
+# mark_as_advanced( SINSP_DLL_DIR SINSP_DLL )
+# endif()
+else()
+ set(SINSP_INCLUDE_DIRS)
+ set(SINSP_LINK_LIBRARIES)
+endif()
+
+cmake_dependent_option(FALCO_PLUGINS "Paths to Falco plugins. Semicolon-separated" "" SINSP_FOUND "")
+
+mark_as_advanced(SINSP_INCLUDE_DIRS SINSP_LINK_LIBRARIES)