aboutsummaryrefslogtreecommitdiff
path: root/rcc/cmake/modules/FindLibpfm.cmake
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-10-21 08:10:34 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-10-21 08:10:34 +0800
commitbbfffc8ce49b9afe854f0799513ab6b7891d6dab (patch)
treed1b2a1cc8166270764b627960fa193b60e9b3271 /rcc/cmake/modules/FindLibpfm.cmake
parent49de843452f161ee42cb8f4ff4780ccc02ae3a7a (diff)
downloadrcc-project-bbfffc8ce49b9afe854f0799513ab6b7891d6dab.tar.gz
rcc-project-bbfffc8ce49b9afe854f0799513ab6b7891d6dab.tar.xz
[CMake] Add RCC platform configuration checks
Diffstat (limited to 'rcc/cmake/modules/FindLibpfm.cmake')
-rw-r--r--rcc/cmake/modules/FindLibpfm.cmake37
1 files changed, 37 insertions, 0 deletions
diff --git a/rcc/cmake/modules/FindLibpfm.cmake b/rcc/cmake/modules/FindLibpfm.cmake
new file mode 100644
index 0000000..9e5900b
--- /dev/null
+++ b/rcc/cmake/modules/FindLibpfm.cmake
@@ -0,0 +1,37 @@
+# CMake module for finding libpfm4.
+#
+# If successful, the following variables will be defined:
+# HAVE_LIBPFM
+#
+# Libpfm can be disabled by setting RCC_ENABLE_LIBPFM to 0.
+
+include(CheckIncludeFile)
+include(CheckLibraryExists)
+include(CheckCXXSourceCompiles)
+
+if (RCC_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()
+
+