# CMake module for finding libpfm4.
#
# If successful, the following variables will be defined:
# HAVE_LIBPFM
#
# Libpfm can be disabled by setting LLVM_ENABLE_LIBPFM to 0.
include(CheckIncludeFile)
include(CheckLibraryExists)
include(CheckCXXSourceCompiles)
if (LLVM_ENABLE_LIBPFM)
check_library_exists(pfm pfm_initialize "" HAVE_LIBPFM_INITIALIZE)
if(HAVE_LIBPFM_INITIALIZE)
check_include_file(perfmon/perf_event.h HAVE_PERFMON_PERF_EVENT_H)
check_include_file(perfmon/pfmlib.h HAVE_PERFMON_PFMLIB_H)
check_include_file(perfmon/pfmlib_perf_event.h HAVE_PERFMON_PFMLIB_PERF_EVENT_H)
if(HAVE_PERFMON_PERF_EVENT_H AND HAVE_PERFMON_PFMLIB_H AND HAVE_PERFMON_PFMLIB_PERF_EVENT_H)
set(HAVE_LIBPFM 1)
# Check to see if perf_branch_entry has the field 'cycles'.
# We couldn't use CheckStructHasMember here because 'cycles' is a bit field which is not
# supported by CheckStructHasMember.
CHECK_CXX_SOURCE_COMPILES("
#include <perfmon/perf_event.h>
int main() {
perf_branch_entry entry;
entry.cycles = 2;
return 0;
}" COMPILE_WITH_CYCLES)
if(COMPILE_WITH_CYCLES)
set(LIBPFM_HAS_FIELD_CYCLES 1)
endif()
endif()
endif()
endif()