1# CMake module for finding libpfm4.
2#
3# If successful, the following variables will be defined:
4# HAVE_LIBPFM
5#
6# Libpfm can be disabled by setting LLVM_ENABLE_LIBPFM to 0.
7
8include(CheckIncludeFile)
9include(CheckLibraryExists)
10include(CheckCXXSourceCompiles)
11
12if (LLVM_ENABLE_LIBPFM)
13  check_library_exists(pfm pfm_initialize "" HAVE_LIBPFM_INITIALIZE)
14  if(HAVE_LIBPFM_INITIALIZE)
15    check_include_file(perfmon/perf_event.h HAVE_PERFMON_PERF_EVENT_H)
16    check_include_file(perfmon/pfmlib.h HAVE_PERFMON_PFMLIB_H)
17    check_include_file(perfmon/pfmlib_perf_event.h HAVE_PERFMON_PFMLIB_PERF_EVENT_H)
18    if(HAVE_PERFMON_PERF_EVENT_H AND HAVE_PERFMON_PFMLIB_H AND HAVE_PERFMON_PFMLIB_PERF_EVENT_H)
19      set(HAVE_LIBPFM 1)
20      # Check to see if perf_branch_entry has the field 'cycles'.
21      # We couldn't use CheckStructHasMember here because 'cycles' is a bit field which is not
22      # supported by CheckStructHasMember.
23      CHECK_CXX_SOURCE_COMPILES("
24        #include <perfmon/perf_event.h>
25        int main() {
26          perf_branch_entry entry;
27          entry.cycles = 2;
28          return 0;
29        }" COMPILE_WITH_CYCLES)
30      if(COMPILE_WITH_CYCLES)
31        set(LIBPFM_HAS_FIELD_CYCLES 1)
32      endif()
33    endif()
34  endif()
35endif()
36
37
38