+file(GLOB_RECURSE SOURCES "src/*.cpp")
+
+add_library(locomotiv SHARED ${SOURCES})
+target_include_directories(locomotiv PUBLIC include)
+target_link_libraries(locomotiv PUBLIC loco)
+target_link_libraries(locomotiv PUBLIC angkor)
+# Let's apply nncc common compile options
+#
+# NOTE This will enable strict compilation (warnings as error).
+# Please refer to the top-level CMakeLists.txt for details
+target_link_libraries(locomotiv PRIVATE nncc_common)
--- /dev/null
+#ifndef _LOCOMOTIV_NODEDATA_H_
+#define _LOCOMOTIV_NODEDATA_H_
+
+namespace locomotiv
+{
+
+/**
+ * @brief Node annotation for data type and value
+ */
+class NodeData;
+
+} // namespace locomotiv
+
+#endif // _LOCOMOTIV_NODEDATA_H_
--- /dev/null
+#ifndef _LOCOMOTIV_SESSION_H_
+#define _LOCOMOTIV_SESSION_H_
+
+#include "locomotiv/NodeData.h"
+
+#include <loco.h>
+#include <nncc/core/ADT/tensor/Buffer.h>
+
+namespace locomotiv
+{
+
+/**
+ * @brief Session for loco graph inference
+ */
+class Session
+{
+public:
+ template <typename DT> using Buffer = nncc::core::ADT::tensor::Buffer<DT>;
+
+ Session() = delete;
+ Session(loco::Graph *g) : _graph(g)
+ {
+ // DO NOTHING
+ }
+
+ template <typename DT> void set_input(uint32_t index, Buffer<DT> &buf);
+
+ bool infer();
+
+ const NodeData *get_output(uint32_t index);
+
+private:
+ loco::Graph *_graph;
+};
+
+} // namespace locomotiv
+
+#endif // _LOCOMOTIV_SESSION_H_
--- /dev/null
+require("angkor")
--- /dev/null
+#include "locomotiv/Session.h"