diff --git a/CMakeLists.txt b/CMakeLists.txt
index a91eb338de119d11a1251be5894ba8a742a688c0..9fb0b898f46e4470bb842336ad1572548ffe351d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,8 @@
 cmake_minimum_required (VERSION 3.7)
 project (Tikki)
+
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
+
 include_directories ("includes")
 include_directories("poti/include" "poti/src")
 
diff --git a/cmake/FindPAPI.cmake b/cmake/FindPAPI.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..86cbf22ae1f1c80cb4ba6db874a35cb5eb7bb2bc
--- /dev/null
+++ b/cmake/FindPAPI.cmake
@@ -0,0 +1,45 @@
+# Try to find PAPI headers and libraries.
+#
+# Usage of this module as follows:
+#
+#     find_package(PAPI)
+#
+# Variables used by this module, they can change the default behaviour and need
+# to be set before calling find_package:
+#
+#  PAPI_PREFIX         Set this variable to the root installation of
+#                      libpapi if the module has problems finding the
+#                      proper installation path.
+#
+# Variables defined by this module:
+#
+#  PAPI_FOUND              System has PAPI libraries and headers
+#  PAPI_LIBRARIES          The PAPI library
+#  PAPI_INCLUDE_DIRS       The location of PAPI headers
+
+find_path(PAPI_PREFIX
+    NAMES include/papi.h
+)
+
+find_library(PAPI_LIBRARIES
+    # Pick the static library first for easier run-time linking.
+    NAMES libpapi.so libpapi.a papi
+    HINTS ${PAPI_PREFIX}/lib ${HILTIDEPS}/lib
+)
+
+find_path(PAPI_INCLUDE_DIRS
+    NAMES papi.h
+    HINTS ${PAPI_PREFIX}/include ${HILTIDEPS}/include
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(PAPI DEFAULT_MSG
+    PAPI_LIBRARIES
+    PAPI_INCLUDE_DIRS
+)
+
+mark_as_advanced(
+    PAPI_PREFIX_DIRS
+    PAPI_LIBRARIES
+    PAPI_INCLUDE_DIRS
+)
diff --git a/tracelib/CMakeLists.txt b/tracelib/CMakeLists.txt
index e91301da00c3cafe27a5a81739062e4536d9b235..629ddb4d8f43c0e66aa86331ab39f5c95495ea4a 100644
--- a/tracelib/CMakeLists.txt
+++ b/tracelib/CMakeLists.txt
@@ -11,8 +11,15 @@ add_custom_command (
 set(THREADS_PREFER_PTHREAD_FLAG ON)
 find_package(Threads REQUIRED)
 
-include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
+find_package(PAPI)
+if (${PAPI_FOUND})
+  add_compile_options("-DKAAPI_USE_PAPI=1")
+else()
+  add_compile_options("-DKAAPI_USE_PAPI=0")
+endif()
+
+include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${PAPI_INCLUDE_DIRS})
 
 add_library(tracelib SHARED kaapi_recorder.c kaapi_rt.c kaapi_trace_lib.c kaapi_hashmap.c kaapi_trace_rt.c kaapi_parser.c ${CMAKE_CURRENT_BINARY_DIR}/git_hash.h ${CMAKE_CURRENT_BINARY_DIR}/hw_count.h)
-target_link_libraries(tracelib Threads::Threads)
+target_link_libraries(tracelib Threads::Threads ${PAPI_LIBRARIES})
 install(TARGETS tracelib DESTINATION lib)