diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9a397a2753ce5021034007d171cf3d41c74db138..4cb0905163f358b0b518d0507d1f92a990b12e20 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -121,6 +121,21 @@ endif()
 
 set(PASTIS_HAS_MPI ${MPI_FOUND})
 
+#------------------------------------------------------
+# search for clang-format
+
+find_program(CLANG_FORMAT clang-format)
+if (CLANG_FORMAT)
+  add_custom_target(clang-format
+    COMMAND echo "running ${CLANG_FORMAT} ..."
+    COMMAND ${CMAKE_COMMAND}
+    -DPASTIS_SOURCE_DIR="${PASTIS_SOURCE_DIR}"
+    -DCLANG_FORMAT="${CLANG_FORMAT}"
+    -P ${PASTIS_SOURCE_DIR}/cmake/ClangFormatProcess.cmake)
+else ()
+  message(WARNING "clang-format no found!")
+endif()
+
 #------------------------------------------------------
 
 # setting Kokkos defaults to OpenMP when available
diff --git a/cmake/ClangFormatProcess.cmake b/cmake/ClangFormatProcess.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f1da4c989461010208d407d85a6a4d47cc35bbee
--- /dev/null
+++ b/cmake/ClangFormatProcess.cmake
@@ -0,0 +1,13 @@
+# --------------- runs clang-format in place using the style file ---------------
+
+if(PASTIS_SOURCE_DIR AND CLANG_FORMAT)
+  # get C++ sources file list (ignoring packages)
+  file(GLOB_RECURSE ALL_SOURCE_FILES
+    ${PASTIS_SOURCE_DIR}/src/**.[hc]pp
+    ${PASTIS_SOURCE_DIR}/tests/**.[hc]pp)
+
+  # apply style to the file list
+  foreach(SOURCE_FILE ${ALL_SOURCE_FILES})
+    execute_process(COMMAND "${CLANG_FORMAT}" -style=file -verbose -i "${SOURCE_FILE}")
+  endforeach()
+endif()