+#include <xbt/functional.hpp>
+#include <xbt/future.hpp>
+#include <xbt/signal.hpp>
+
+#include <boost/heap/fibonacci_heap.hpp>
+#include <string>
+#include <unordered_map>
+
+XBT_PUBLIC void simcall_run_kernel(std::function<void()> const& code);
+
+/** Execute some code in the kernel and block
+ *
+ * run_blocking() is a generic blocking simcall. It is given a callback
+ * which is executed immediately in the SimGrid kernel. The callback is
+ * responsible for setting the suitable logic for waking up the process
+ * when needed.
+ *
+ * @ref simix::kernelSync() is a higher level wrapper for this.
+ */
+XBT_PUBLIC void simcall_run_blocking(std::function<void()> const& code);
+
+template<class F> inline
+void simcall_run_kernel(F& f)
+{
+ simcall_run_kernel(std::function<void()>(std::ref(f)));
+}
+template<class F> inline
+void simcall_run_blocking(F& f)
+{
+ simcall_run_blocking(std::function<void()>(std::ref(f)));
+}