JuliaIPU / IPUToolkit.jl

IPU programming in Julia
https://juliaipu.github.io/IPUToolkit.jl/
MIT License
30 stars 3 forks source link

Try to support Poplar 1.4 or 2.0 #3

Closed giordano closed 1 year ago

giordano commented 1 year ago

We're generally constrained by the LLVM version that comes with Julia, but it'd be great to figure out what's preventing us from upgrading to newer versions of Poplar, for example 1.4 or 2.0 which should be compatible with LLVM 11 (julia 1.6).

giordano commented 1 year ago

For reference, error I got trying to compile the Poplar wrapper with the version 1.4.0 of the SDK:

In file included from /home/mose/software/julia-1.6.7/include/julia/julia.h:1784,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/julia_headers.hpp:15,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:13,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/software/julia-1.6.7/include/julia/locks.h: In function ‘void jl_mutex_lock(jl_mutex_t*)’:
/home/mose/software/julia-1.6.7/include/julia/locks.h:75:31: warning: ‘++’ expression of ‘volatile’-qualified type is deprecated [-Wvolatile]
   75 |         jl_get_ptls_states()->defer_signal++;   \
      |         ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
/home/mose/software/julia-1.6.7/include/julia/locks.h:87:5: note: in expansion of macro ‘JL_SIGATOMIC_BEGIN’
   87 |     JL_SIGATOMIC_BEGIN();
      |     ^~~~~~~~~~~~~~~~~~
/home/mose/software/julia-1.6.7/include/julia/locks.h: In function ‘int jl_mutex_trylock(jl_mutex_t*)’:
/home/mose/software/julia-1.6.7/include/julia/locks.h:75:31: warning: ‘++’ expression of ‘volatile’-qualified type is deprecated [-Wvolatile]
   75 |         jl_get_ptls_states()->defer_signal++;   \
      |         ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
/home/mose/software/julia-1.6.7/include/julia/locks.h:112:9: note: in expansion of macro ‘JL_SIGATOMIC_BEGIN’
  112 |         JL_SIGATOMIC_BEGIN();
      |         ^~~~~~~~~~~~~~~~~~
/home/mose/software/julia-1.6.7/include/julia/locks.h: In function ‘void jl_mutex_unlock(jl_mutex_t*)’:
/home/mose/software/julia-1.6.7/include/julia/locks.h:80:37: warning: ‘--’ expression of ‘volatile’-qualified type is deprecated [-Wvolatile]
   80 |         if (--jl_get_ptls_states()->defer_signal == 0) {        \
      |               ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
/home/mose/software/julia-1.6.7/include/julia/locks.h:134:5: note: in expansion of macro ‘JL_SIGATOMIC_END’
  134 |     JL_SIGATOMIC_END();
      |     ^~~~~~~~~~~~~~~~
In file included from /home/mose/repo/julia-ipu/deps/template.cpp:126:
/home/mose/repo/julia-ipu/deps/gen_inline.txt: In lambda function:
/home/mose/repo/julia-ipu/deps/gen_inline.txt:1988:128: error: cannot convert ‘ArrayRef<std::__cxx11::basic_string<char>>’ to ‘ArrayRef<poplar::StringRef>’
 1988 | JLGraph.method("GraphTrace", [](poplar::Graph& cl, ArrayRef<std::string> a, const poplar::Graph::TraceFn & b) {return cl.trace(a, b);} );
      |                                                                                                                                ^
      |                                                                                                                                |
      |                                                                                                                                ArrayRef<std::__cxx11::basic_string<char>>
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Engine.hpp:11,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:10:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Graph.hpp:1291:34: note:   initializing argument 1 of ‘void poplar::Graph::trace(poplar::ArrayRef<poplar::StringRef>, const TraceFn&)’
 1291 |   void trace(ArrayRef<StringRef> name, const TraceFn &fn);
      |              ~~~~~~~~~~~~~~~~~~~~^~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:15,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::Type; bool finalize = true; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:109:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::Type; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; T = poplar::Type]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:316:44:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16: error: use of deleted function ‘poplar::SSOPointer<T, N, A>::SSOPointer(const poplar::SSOPointer<T, N, A>&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
  123 |   T* cpp_obj = new T(std::forward<ArgsT>(args)...);
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:40:3: note: declared here
   40 |   SSOPointer(const SSOPointer &) = delete;
      |   ^~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:60:8: note:   initializing argument 1 of ‘poplar::Type::Type(poplar::SSOPointer<poplar::core::Type>)’
   60 |   Type(SSOPointer<core::Type>);
      |        ^~~~~~~~~~~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:15,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::Type; bool finalize = false; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:184:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::Type; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; T = poplar::Type]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:316:44:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16: error: use of deleted function ‘poplar::SSOPointer<T, N, A>::SSOPointer(const poplar::SSOPointer<T, N, A>&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
  123 |   T* cpp_obj = new T(std::forward<ArgsT>(args)...);
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:40:3: note: declared here
   40 |   SSOPointer(const SSOPointer &) = delete;
      |   ^~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:60:8: note:   initializing argument 1 of ‘poplar::Type::Type(poplar::SSOPointer<poplar::core::Type>)’
   60 |   Type(SSOPointer<core::Type>);
      |        ^~~~~~~~~~~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:15,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::DebugContext; bool finalize = true; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:109:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::DebugContext; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; T = poplar::DebugContext]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:936:54:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16: error: call of overloaded ‘DebugContext(std::__cxx11::basic_string<char>&, std::__cxx11::basic_string<char>&)’ is ambiguous
  123 |   T* cpp_obj = new T(std::forward<ArgsT>(args)...);
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Graph.hpp:14,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Engine.hpp:11,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:10:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DebugContext.hpp:142:3: note: candidate: ‘poplar::DebugContext::DebugContext(const poplar::DebugContext&, std::string)’
  142 |   DebugContext(const DebugContext &debugContext, std::string name = "");
      |   ^~~~~~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DebugContext.hpp:140:3: note: candidate: ‘poplar::DebugContext::DebugContext(const poplar::DebugNameAndId&, std::string, poplar::SourceLocation)’
  140 |   DebugContext(const DebugNameAndId &debugNameAndId, std::string name = "",
      |   ^~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:15,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::DebugContext; bool finalize = false; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:184:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::DebugContext; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; T = poplar::DebugContext]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:936:54:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16: error: call of overloaded ‘DebugContext(std::__cxx11::basic_string<char>&, std::__cxx11::basic_string<char>&)’ is ambiguous
  123 |   T* cpp_obj = new T(std::forward<ArgsT>(args)...);
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Graph.hpp:14,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Engine.hpp:11,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:10:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DebugContext.hpp:142:3: note: candidate: ‘poplar::DebugContext::DebugContext(const poplar::DebugContext&, std::string)’
  142 |   DebugContext(const DebugContext &debugContext, std::string name = "");
      |   ^~~~~~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DebugContext.hpp:140:3: note: candidate: ‘poplar::DebugContext::DebugContext(const poplar::DebugNameAndId&, std::string, poplar::SourceLocation)’
  140 |   DebugContext(const DebugNameAndId &debugNameAndId, std::string name = "",
      |   ^~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Graph.hpp:20,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Engine.hpp:11,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:10:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp: In instantiation of ‘poplar::program::Sequence::Sequence(T&& ...) [with T = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16:   required from ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::program::Sequence; bool finalize = true; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:109:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::program::Sequence; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; T = poplar::program::Sequence]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:1396:44:   required from here
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:93:13: error: no matching function for call to ‘poplar::program::Sequence::add_many(std::__cxx11::basic_string<char>&)’
   93 |     add_many(args...);
      |     ~~~~~~~~^~~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:71:30: note: candidate: ‘template<class ... T> void poplar::program::Sequence::add_many(const poplar::program::Program&, T&& ...)’
   71 |   template <class... T> void add_many(const Program &first, T &&... rest) {
      |                              ^~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:71:30: note:   template argument deduction/substitution failed:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:93:13: note:   cannot convert ‘args#0’ (type ‘std::__cxx11::basic_string<char>’) to type ‘const poplar::program::Program&’
   93 |     add_many(args...);
      |     ~~~~~~~~^~~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:75:8: note: candidate: ‘void poplar::program::Sequence::add_many()’
   75 |   void add_many() {}
      |        ^~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:75:8: note:   candidate expects 0 arguments, 1 provided
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp: In instantiation of ‘poplar::program::Sequence::Sequence(T&& ...) [with T = {std::initializer_list<poplar::program::Program>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16:   required from ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::program::Sequence; bool finalize = true; ArgsT = {std::initializer_list<poplar::program::Program>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:109:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::program::Sequence; ArgsT = {std::initializer_list<poplar::program::Program>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {std::initializer_list<poplar::program::Program>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; T = poplar::program::Sequence]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:1401:76:   required from here
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:93:13: error: no matching function for call to ‘poplar::program::Sequence::add_many(std::initializer_list<poplar::program::Program>&, std::__cxx11::basic_string<char>&)’
   93 |     add_many(args...);
      |     ~~~~~~~~^~~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:71:30: note: candidate: ‘template<class ... T> void poplar::program::Sequence::add_many(const poplar::program::Program&, T&& ...)’
   71 |   template <class... T> void add_many(const Program &first, T &&... rest) {
      |                              ^~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:71:30: note:   template argument deduction/substitution failed:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:93:13: note:   cannot convert ‘args#0’ (type ‘std::initializer_list<poplar::program::Program>’) to type ‘const poplar::program::Program&’
   93 |     add_many(args...);
      |     ~~~~~~~~^~~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:75:8: note: candidate: ‘void poplar::program::Sequence::add_many()’
   75 |   void add_many() {}
      |        ^~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Program.hpp:75:8: note:   candidate expects 0 arguments, 2 provided
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp: In instantiation of ‘static constexpr bool poplar::SSOPointer<T, N, A>::isPtr() [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:26:14:   required from ‘void poplar::SSOPointer<T, N, A>::moveFrom(poplar::SSOPointer<T, N, A>&&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:43:32:   required from ‘poplar::SSOPointer<T, N, A>::SSOPointer(poplar::SSOPointer<T, N, A>&&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:60:36:   required from ‘constexpr _Res std::__invoke_impl(std::__invoke_other, _Fn&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Fn = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:113:35:   required from ‘constexpr std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Callable = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> = jlcxx::BoxedValue<poplar::Type>]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:291:30:   required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:610:19:   required from ‘std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; <template-parameter-2-2> = void; <template-parameter-2-3> = void; _Res = jlcxx::BoxedValue<poplar::Type>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:30:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = jlcxx::BoxedValue<poplar::Type>; LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:57:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::Type; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; T = poplar::Type]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:316:44:   required from here
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:89:12: error: invalid application of ‘sizeof’ to incomplete type ‘poplar::core::Type’
   89 |     return sizeof(T) > N || A % alignof(T) != 0;
      |            ^~~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:89:33: error: invalid application of ‘__alignof__’ to incomplete type ‘poplar::core::Type’
   89 |     return sizeof(T) > N || A % alignof(T) != 0;
      |                                 ^~~~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp: In instantiation of ‘void poplar::SSOPointer<T, N, A>::moveFrom(poplar::SSOPointer<T, N, A>&&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:43:32:   required from ‘poplar::SSOPointer<T, N, A>::SSOPointer(poplar::SSOPointer<T, N, A>&&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:60:36:   required from ‘constexpr _Res std::__invoke_impl(std::__invoke_other, _Fn&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Fn = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:113:35:   required from ‘constexpr std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Callable = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> = jlcxx::BoxedValue<poplar::Type>]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:291:30:   required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:610:19:   required from ‘std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; <template-parameter-2-2> = void; <template-parameter-2-3> = void; _Res = jlcxx::BoxedValue<poplar::Type>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:30:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = jlcxx::BoxedValue<poplar::Type>; LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:57:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::Type; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; T = poplar::Type]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:316:44:   required from here
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:31:36: error: invalid use of incomplete type ‘class poplar::core::Type’
   31 |       *reinterpret_cast<T *>(&buf) = std::move(*reinterpret_cast<T *>(&o.buf));
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:11:7: note: forward declaration of ‘class poplar::core::Type’
   11 | class Type;
      |       ^~~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp: In instantiation of ‘void poplar::SSOPointer<T, N, A>::deleter() [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:53:19:   required from ‘poplar::SSOPointer<T, N, A>::~SSOPointer() [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:60:36:   required from ‘constexpr _Res std::__invoke_impl(std::__invoke_other, _Fn&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Fn = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:113:35:   required from ‘constexpr std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Callable = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> = jlcxx::BoxedValue<poplar::Type>]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:291:30:   required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:610:19:   required from ‘std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; <template-parameter-2-2> = void; <template-parameter-2-3> = void; _Res = jlcxx::BoxedValue<poplar::Type>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:30:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = jlcxx::BoxedValue<poplar::Type>; LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:57:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::Type; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; T = poplar::Type]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:316:44:   required from here
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:19:7: warning: possible problem detected in invocation of ‘operator delete’ [-Wdelete-incomplete]
   19 |       delete ptr;
      |       ^~~~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:18:12: warning: ‘ptr’ has incomplete type
   18 |       auto ptr = *reinterpret_cast<T **>(&buf);
      |            ^~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:11:7: note: forward declaration of ‘class poplar::core::Type’
   11 | class Type;
      |       ^~~~
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:19:7: note: neither the destructor nor the class-specific ‘operator delete’ will be called, even if they are declared when the class is defined
   19 |       delete ptr;
      |       ^~~~~~~~~~
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:21:37: error: invalid use of incomplete type ‘class poplar::core::Type’
   21 |       reinterpret_cast<T *>(&buf)->~T();
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:11:7: note: forward declaration of ‘class poplar::core::Type’
   11 | class Type;
      |       ^~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/array.hpp:4,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:14,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘CppT jlcxx::ConvertToCpp<CppT, jlcxx::CxxWrappedTrait<SubTraitT> >::operator()(jlcxx::WrappedCppPtr) const [with CppT = poplar::SSOPointer<poplar::core::Type>; SubTraitT = jlcxx::NoCxxWrappedSubtrait]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:585:30:   required from ‘CppT jlcxx::convert_to_cpp(JuliaT) [with CppT = poplar::SSOPointer<poplar::core::Type>; JuliaT = jlcxx::WrappedCppPtr]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:47:61:   required from ‘jlcxx::detail::ReturnTypeAdapter<R, Args>::return_type jlcxx::detail::ReturnTypeAdapter<R, Args>::operator()(const void*, jlcxx::static_julia_type<Args>...) [with R = jlcxx::BoxedValue<poplar::Type>; Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jlcxx::detail::ReturnTypeAdapter<R, Args>::return_type = jlcxx::BoxedValue<poplar::Type>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:72:45:   required from ‘static jlcxx::detail::CallFunctor<R, Args>::return_type jlcxx::detail::CallFunctor<R, Args>::apply(const void*, jlcxx::static_julia_type<Args>...) [with R = jlcxx::BoxedValue<poplar::Type>; Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jlcxx::detail::CallFunctor<R, Args>::return_type = jlcxx::BoxedValue<poplar::Type>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:209:69:   required from ‘void* jlcxx::FunctionWrapper<R, Args>::pointer() [with R = jlcxx::BoxedValue<poplar::Type>; Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:207:17:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:958:51: error: use of deleted function ‘poplar::SSOPointer<T, N, A>::SSOPointer(const poplar::SSOPointer<T, N, A>&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
  958 |     return *extract_pointer_nonull<CppT>(julia_val);
      |                                                   ^
In file included from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/1.4.0/include/poplar/SSOPointer.hpp:40:3: note: declared here
   40 |   SSOPointer(const SSOPointer &) = delete;
      |   ^~~~~~~~~~
giordano commented 1 year ago

And this is with 2.0.0:

In file included from /home/mose/software/julia-1.6.7/include/julia/julia.h:1784,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/julia_headers.hpp:15,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:13,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/software/julia-1.6.7/include/julia/locks.h: In function ‘void jl_mutex_lock(jl_mutex_t*)’:
/home/mose/software/julia-1.6.7/include/julia/locks.h:75:31: warning: ‘++’ expression of ‘volatile’-qualified type is deprecated [-Wvolatile]
   75 |         jl_get_ptls_states()->defer_signal++;   \
      |         ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
/home/mose/software/julia-1.6.7/include/julia/locks.h:87:5: note: in expansion of macro ‘JL_SIGATOMIC_BEGIN’
   87 |     JL_SIGATOMIC_BEGIN();
      |     ^~~~~~~~~~~~~~~~~~
/home/mose/software/julia-1.6.7/include/julia/locks.h: In function ‘int jl_mutex_trylock(jl_mutex_t*)’:
/home/mose/software/julia-1.6.7/include/julia/locks.h:75:31: warning: ‘++’ expression of ‘volatile’-qualified type is deprecated [-Wvolatile]
   75 |         jl_get_ptls_states()->defer_signal++;   \
      |         ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
/home/mose/software/julia-1.6.7/include/julia/locks.h:112:9: note: in expansion of macro ‘JL_SIGATOMIC_BEGIN’
  112 |         JL_SIGATOMIC_BEGIN();
      |         ^~~~~~~~~~~~~~~~~~
/home/mose/software/julia-1.6.7/include/julia/locks.h: In function ‘void jl_mutex_unlock(jl_mutex_t*)’:
/home/mose/software/julia-1.6.7/include/julia/locks.h:80:37: warning: ‘--’ expression of ‘volatile’-qualified type is deprecated [-Wvolatile]
   80 |         if (--jl_get_ptls_states()->defer_signal == 0) {        \
      |               ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
/home/mose/software/julia-1.6.7/include/julia/locks.h:134:5: note: in expansion of macro ‘JL_SIGATOMIC_END’
  134 |     JL_SIGATOMIC_END();
      |     ^~~~~~~~~~~~~~~~
In file included from /home/mose/repo/julia-ipu/deps/template.cpp:126:
/home/mose/repo/julia-ipu/deps/gen_inline.txt: In lambda function:
/home/mose/repo/julia-ipu/deps/gen_inline.txt:340:94: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
  340 | JLTarget.method("TargetGetTargetOptions", [](poplar::Target& cl) {return cl.getTargetOptions();} );
      |                                                                                              ^
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /home/mose/repo/julia-ipu/deps/template.cpp:126:
/home/mose/repo/julia-ipu/deps/gen_inline.txt:340:93: error: invalid use of incomplete type ‘const struct poplar::core::TargetOptions’
  340 | JLTarget.method("TargetGetTargetOptions", [](poplar::Target& cl) {return cl.getTargetOptions();} );
      |                                                                          ~~~~~~~~~~~~~~~~~~~^~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /home/mose/repo/julia-ipu/deps/template.cpp:126:
/home/mose/repo/julia-ipu/deps/gen_inline.txt: In function ‘void define_julia_module(jlcxx::Module&)’:
/home/mose/repo/julia-ipu/deps/gen_inline.txt:340:96: error: return type ‘struct poplar::core::TargetOptions’ is incomplete
  340 | JLTarget.method("TargetGetTargetOptions", [](poplar::Target& cl) {return cl.getTargetOptions();} );
      |                                                                                                ^
/home/mose/repo/julia-ipu/deps/gen_inline.txt: In static member function ‘static void define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>::_FUN(poplar::Target&)’:
/home/mose/repo/julia-ipu/deps/gen_inline.txt:340:96: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /home/mose/repo/julia-ipu/deps/template.cpp:126:
/home/mose/repo/julia-ipu/deps/gen_inline.txt: In member function ‘define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>::operator poplar::core::TargetOptions (*)(poplar::Target&)() const’:
/home/mose/repo/julia-ipu/deps/gen_inline.txt:340:96: error: invalid conversion from ‘void (*)(poplar::Target&)’ to ‘poplar::core::TargetOptions (*)(poplar::Target&)’ [-fpermissive]
  340 | JLTarget.method("TargetGetTargetOptions", [](poplar::Target& cl) {return cl.getTargetOptions();} );
      |                                                                                                ^
      |                                                                                                |
      |                                                                                                void (*)(poplar::Target&)
/home/mose/repo/julia-ipu/deps/gen_inline.txt: In lambda function:
/home/mose/repo/julia-ipu/deps/gen_inline.txt:2055:128: error: cannot convert ‘ArrayRef<std::__cxx11::basic_string<char>>’ to ‘ArrayRef<poplar::StringRef>’
 2055 | JLGraph.method("GraphTrace", [](poplar::Graph& cl, ArrayRef<std::string> a, const poplar::Graph::TraceFn & b) {return cl.trace(a, b);} );
      |                                                                                                                                ^
      |                                                                                                                                |
      |                                                                                                                                ArrayRef<std::__cxx11::basic_string<char>>
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Engine.hpp:11,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:10:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Graph.hpp:1304:34: note:   initializing argument 1 of ‘void poplar::Graph::trace(poplar::ArrayRef<poplar::StringRef>, const TraceFn&)’
 1304 |   void trace(ArrayRef<StringRef> name, const TraceFn &fn);
      |              ~~~~~~~~~~~~~~~~~~~~^~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:15,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::TypeWrapper<T> jlcxx::Module::add_type_internal(const string&, JLSuperT*) [with T = poplar::VertexPerfEstimate; SuperParametersT = jlcxx::ParameterList<>; JLSuperT = _jl_datatype_t; std::string = std::__cxx11::basic_string<char>]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1229:48:   required from ‘jlcxx::TypeWrapper<T> jlcxx::Module::add_type(const string&, JLSuperT*) [with T = poplar::VertexPerfEstimate; SuperParametersT = jlcxx::ParameterList<>; JLSuperT = _jl_datatype_t; std::string = std::__cxx11::basic_string<char>]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:132:90:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1149:17: error: static assertion failed: Mirrored types (marked with IsMirroredType) can't be added using add_type, map them directly to a struct instead and use map_type or explicitly disable mirroring for this type, e.g. define template<> struct IsMirroredType<Foo> : std::false_type { };
 1149 |   static_assert(!IsMirroredType<T>::value, "Mirrored types (marked with IsMirroredType) can't be added using add_type, map them directly to a struct instead and use map_type or explicitly disable mirroring for this type, e.g. define template<> struct IsMirroredType<Foo> : std::false_type { };");
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::Type; bool finalize = true; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:109:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::Type; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; T = poplar::Type]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:324:44:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16: error: use of deleted function ‘poplar::SSOPointer<T, N, A>::SSOPointer(const poplar::SSOPointer<T, N, A>&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
  123 |   T* cpp_obj = new T(std::forward<ArgsT>(args)...);
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:40:3: note: declared here
   40 |   SSOPointer(const SSOPointer &) = delete;
      |   ^~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:60:8: note:   initializing argument 1 of ‘poplar::Type::Type(poplar::SSOPointer<poplar::core::Type>)’
   60 |   Type(SSOPointer<core::Type>);
      |        ^~~~~~~~~~~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:15,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::Type; bool finalize = false; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:184:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::Type; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; T = poplar::Type]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:324:44:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16: error: use of deleted function ‘poplar::SSOPointer<T, N, A>::SSOPointer(const poplar::SSOPointer<T, N, A>&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
  123 |   T* cpp_obj = new T(std::forward<ArgsT>(args)...);
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:40:3: note: declared here
   40 |   SSOPointer(const SSOPointer &) = delete;
      |   ^~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:60:8: note:   initializing argument 1 of ‘poplar::Type::Type(poplar::SSOPointer<poplar::core::Type>)’
   60 |   Type(SSOPointer<core::Type>);
      |        ^~~~~~~~~~~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:15,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::core::TargetOptions; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>; ArgsT = {poplar::Target&}; std::string = std::__cxx11::basic_string<char>]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:340:98:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:30: error: no matching function for call to ‘std::function<poplar::core::TargetOptions(poplar::Target&)>::function(define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>)’
  700 |     return method(name, std::function<R(ArgsT...)>(std::forward<LambdaT>(lambda)));
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/gcc/10.2.0/include/c++/10/functional:59,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:5,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:601:7: note: candidate: ‘template<class _Functor, class, class> std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = _Functor; <template-parameter-2-2> = <template-parameter-1-2>; <template-parameter-2-3> = <template-parameter-1-3>; _Res = poplar::core::TargetOptions; _ArgTypes = {poplar::Target&}]’
  601 |       function<_Res(_ArgTypes...)>::
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:601:7: note:   template argument deduction/substitution failed:
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h: In substitution of ‘template<class _Res, class ... _ArgTypes> template<class _Cond, class _Tp> using _Requires = typename std::enable_if<_Cond::value, _Tp>::type [with _Cond = std::function<poplar::core::TargetOptions(poplar::Target&)>::_Callable<define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>, std::__invoke_result<define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>&, poplar::Target&> >; _Tp = void; _Res = poplar::core::TargetOptions; _ArgTypes = {poplar::Target&}]’:
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:380:9:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::core::TargetOptions; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>; ArgsT = {poplar::Target&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:340:98:   required from here
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:319:8: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
  319 |  using _Requires = typename enable_if<_Cond::value, _Tp>::type;
      |        ^~~~~~~~~
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::core::TargetOptions; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>; ArgsT = {poplar::Target&}; std::string = std::__cxx11::basic_string<char>]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:340:98:   required from here
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:357:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>::function(std::function<_Res(_ArgTypes ...)>&&) [with _Res = poplar::core::TargetOptions; _ArgTypes = {poplar::Target&}]’
  357 |       function(function&& __x) noexcept : _Function_base()
      |       ^~~~~~~~
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:357:27: note:   no known conversion for argument 1 from ‘define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>’ to ‘std::function<poplar::core::TargetOptions(poplar::Target&)>&&’
  357 |       function(function&& __x) noexcept : _Function_base()
      |                ~~~~~~~~~~~^~~
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:587:5: note: candidate: ‘std::function<_Res(_ArgTypes ...)>::function(const std::function<_Res(_ArgTypes ...)>&) [with _Res = poplar::core::TargetOptions; _ArgTypes = {poplar::Target&}]’
  587 |     function<_Res(_ArgTypes...)>::
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:588:30: note:   no known conversion for argument 1 from ‘define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>’ to ‘const std::function<poplar::core::TargetOptions(poplar::Target&)>&’
  588 |     function(const function& __x)
      |              ~~~~~~~~~~~~~~~~^~~
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:337:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>::function(std::nullptr_t) [with _Res = poplar::core::TargetOptions; _ArgTypes = {poplar::Target&}; std::nullptr_t = std::nullptr_t]’
  337 |       function(nullptr_t) noexcept
      |       ^~~~~~~~
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:337:16: note:   no known conversion for argument 1 from ‘define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&)>’ to ‘std::nullptr_t’
  337 |       function(nullptr_t) noexcept
      |                ^~~~~~~~~
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:330:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>::function() [with _Res = poplar::core::TargetOptions; _ArgTypes = {poplar::Target&}]’
  330 |       function() noexcept
      |       ^~~~~~~~
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:330:7: note:   candidate expects 0 arguments, 1 provided
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:15,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::DebugContext; bool finalize = true; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:109:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::DebugContext; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; T = poplar::DebugContext]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:964:54:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16: error: call of overloaded ‘DebugContext(std::__cxx11::basic_string<char>&, std::__cxx11::basic_string<char>&)’ is ambiguous
  123 |   T* cpp_obj = new T(std::forward<ArgsT>(args)...);
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Graph.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Engine.hpp:11,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:10:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DebugContext.hpp:219:3: note: candidate: ‘poplar::DebugContext::DebugContext(const poplar::DebugContext&, std::string)’
  219 |   DebugContext(const DebugContext &debugContext, std::string name = "");
      |   ^~~~~~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DebugContext.hpp:217:3: note: candidate: ‘poplar::DebugContext::DebugContext(const poplar::DebugNameAndId&, std::string, poplar::SourceLocation)’
  217 |   DebugContext(const DebugNameAndId &debugNameAndId, std::string name = "",
      |   ^~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:15,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp: In instantiation of ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::DebugContext; bool finalize = false; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:184:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::DebugContext; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; T = poplar::DebugContext]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:964:54:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16: error: call of overloaded ‘DebugContext(std::__cxx11::basic_string<char>&, std::__cxx11::basic_string<char>&)’ is ambiguous
  123 |   T* cpp_obj = new T(std::forward<ArgsT>(args)...);
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Graph.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Engine.hpp:11,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:10:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DebugContext.hpp:219:3: note: candidate: ‘poplar::DebugContext::DebugContext(const poplar::DebugContext&, std::string)’
  219 |   DebugContext(const DebugContext &debugContext, std::string name = "");
      |   ^~~~~~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DebugContext.hpp:217:3: note: candidate: ‘poplar::DebugContext::DebugContext(const poplar::DebugNameAndId&, std::string, poplar::SourceLocation)’
  217 |   DebugContext(const DebugNameAndId &debugNameAndId, std::string name = "",
      |   ^~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Graph.hpp:20,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Engine.hpp:11,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:10:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp: In instantiation of ‘poplar::program::Sequence::Sequence(T&& ...) [with T = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16:   required from ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::program::Sequence; bool finalize = true; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:109:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::program::Sequence; ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; T = poplar::program::Sequence]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:1441:44:   required from here
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:93:13: error: no matching function for call to ‘poplar::program::Sequence::add_many(std::__cxx11::basic_string<char>&)’
   93 |     add_many(args...);
      |     ~~~~~~~~^~~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:71:30: note: candidate: ‘template<class ... T> void poplar::program::Sequence::add_many(const poplar::program::Program&, T&& ...)’
   71 |   template <class... T> void add_many(const Program &first, T &&... rest) {
      |                              ^~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:71:30: note:   template argument deduction/substitution failed:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:93:13: note:   cannot convert ‘args#0’ (type ‘std::__cxx11::basic_string<char>’) to type ‘const poplar::program::Program&’
   93 |     add_many(args...);
      |     ~~~~~~~~^~~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:75:8: note: candidate: ‘void poplar::program::Sequence::add_many()’
   75 |   void add_many() {}
      |        ^~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:75:8: note:   candidate expects 0 arguments, 1 provided
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp: In instantiation of ‘poplar::program::Sequence::Sequence(T&& ...) [with T = {std::initializer_list<poplar::program::Program>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:123:16:   required from ‘jlcxx::BoxedValue<T> jlcxx::create(ArgsT&& ...) [with T = poplar::program::Sequence; bool finalize = true; ArgsT = {std::initializer_list<poplar::program::Program>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:109:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::program::Sequence; ArgsT = {std::initializer_list<poplar::program::Program>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {std::initializer_list<poplar::program::Program>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; T = poplar::program::Sequence]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:1446:76:   required from here
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:93:13: error: no matching function for call to ‘poplar::program::Sequence::add_many(std::initializer_list<poplar::program::Program>&, std::__cxx11::basic_string<char>&)’
   93 |     add_many(args...);
      |     ~~~~~~~~^~~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:71:30: note: candidate: ‘template<class ... T> void poplar::program::Sequence::add_many(const poplar::program::Program&, T&& ...)’
   71 |   template <class... T> void add_many(const Program &first, T &&... rest) {
      |                              ^~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:71:30: note:   template argument deduction/substitution failed:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:93:13: note:   cannot convert ‘args#0’ (type ‘std::initializer_list<poplar::program::Program>’) to type ‘const poplar::program::Program&’
   93 |     add_many(args...);
      |     ~~~~~~~~^~~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:75:8: note: candidate: ‘void poplar::program::Sequence::add_many()’
   75 |   void add_many() {}
      |        ^~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Program.hpp:75:8: note:   candidate expects 0 arguments, 2 provided
In file included from /cm/shared/apps/gcc/10.2.0/include/c++/10/bits/move.h:57,
                 from /cm/shared/apps/gcc/10.2.0/include/c++/10/bits/stl_function.h:60,
                 from /cm/shared/apps/gcc/10.2.0/include/c++/10/functional:49,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:5,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/cm/shared/apps/gcc/10.2.0/include/c++/10/type_traits: In instantiation of ‘struct std::is_standard_layout<poplar::core::TargetOptions>’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:204:102:   required from ‘struct jlcxx::IsMirroredType<poplar::core::TargetOptions>’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:258:68:   required by substitution of ‘template<class T> struct jlcxx::MappingTrait<T, typename std::enable_if<((! jlcxx::IsMirroredType<T>::value) && (! jlcxx::IsSmartPointerType<T>::value))>::type> [with T = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:499:35:   required from ‘jl_datatype_t* jlcxx::julia_base_type() [with T = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:508:81:   required from ‘static jl_datatype_t* jlcxx::julia_type_factory<const SourceT&>::julia_type() [with SourceT = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:450:69:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:198:32:   required from ‘jlcxx::FunctionWrapper<R, Args>::FunctionWrapper(jlcxx::Module*, const functor_t&) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::FunctionWrapper<R, Args>::functor_t = std::function<poplar::Target(poplar::Target&, unsigned int, std::__cxx11::basic_string<char>, const poplar::core::TargetOptions&)>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:526:25:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, std::function<_Res(_ArgTypes ...)>) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:18:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::Target; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; ArgsT = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:535:165:   required from here
/cm/shared/apps/gcc/10.2.0/include/c++/10/type_traits:686:38: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
  686 |     : public integral_constant<bool, __is_standard_layout(_Tp)>
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /cm/shared/apps/gcc/10.2.0/include/c++/10/bits/move.h:57,
                 from /cm/shared/apps/gcc/10.2.0/include/c++/10/bits/stl_function.h:60,
                 from /cm/shared/apps/gcc/10.2.0/include/c++/10/functional:49,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:5,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/cm/shared/apps/gcc/10.2.0/include/c++/10/type_traits:688:52: error: static assertion failed: template argument must be a complete class or an unbounded array
  688 |       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/array.hpp:4,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:14,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘struct jlcxx::IsMirroredType<poplar::core::TargetOptions>’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:258:68:   required by substitution of ‘template<class T> struct jlcxx::MappingTrait<T, typename std::enable_if<((! jlcxx::IsMirroredType<T>::value) && (! jlcxx::IsSmartPointerType<T>::value))>::type> [with T = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:499:35:   required from ‘jl_datatype_t* jlcxx::julia_base_type() [with T = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:508:81:   required from ‘static jl_datatype_t* jlcxx::julia_type_factory<const SourceT&>::julia_type() [with SourceT = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:450:69:   required from ‘void jlcxx::create_julia_type() [with T = const poplar::core::TargetOptions&]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:466:36:   required from ‘void jlcxx::create_if_not_exists() [with T = const poplar::core::TargetOptions&]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:198:32:   required from ‘jlcxx::FunctionWrapper<R, Args>::FunctionWrapper(jlcxx::Module*, const functor_t&) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::FunctionWrapper<R, Args>::functor_t = std::function<poplar::Target(poplar::Target&, unsigned int, std::__cxx11::basic_string<char>, const poplar::core::TargetOptions&)>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:526:25:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, std::function<_Res(_ArgTypes ...)>) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:18:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::Target; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; ArgsT = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:535:165:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:204:102: error: ‘value’ is not a member of ‘std::is_standard_layout<poplar::core::TargetOptions>’
  204 | struct IsMirroredType : std::bool_constant<(!std::is_class<T>::value || (std::is_standard_layout<T>::value && std::is_trivial<T>::value)) && !IsSmartPointerType<T>::value>
      |                                                                                                      ^~~~~
In file included from /cm/shared/apps/gcc/10.2.0/include/c++/10/bits/move.h:57,
                 from /cm/shared/apps/gcc/10.2.0/include/c++/10/bits/stl_function.h:60,
                 from /cm/shared/apps/gcc/10.2.0/include/c++/10/functional:49,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:5,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/cm/shared/apps/gcc/10.2.0/include/c++/10/type_traits: In instantiation of ‘struct std::is_trivial<poplar::core::TargetOptions>’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:204:131:   required from ‘struct jlcxx::IsMirroredType<poplar::core::TargetOptions>’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:258:68:   required by substitution of ‘template<class T> struct jlcxx::MappingTrait<T, typename std::enable_if<((! jlcxx::IsMirroredType<T>::value) && (! jlcxx::IsSmartPointerType<T>::value))>::type> [with T = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:499:35:   required from ‘jl_datatype_t* jlcxx::julia_base_type() [with T = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:508:81:   required from ‘static jl_datatype_t* jlcxx::julia_type_factory<const SourceT&>::julia_type() [with SourceT = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:450:69:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:198:32:   required from ‘jlcxx::FunctionWrapper<R, Args>::FunctionWrapper(jlcxx::Module*, const functor_t&) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::FunctionWrapper<R, Args>::functor_t = std::function<poplar::Target(poplar::Target&, unsigned int, std::__cxx11::basic_string<char>, const poplar::core::TargetOptions&)>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:526:25:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, std::function<_Res(_ArgTypes ...)>) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:18:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::Target; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; ArgsT = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:535:165:   required from here
/cm/shared/apps/gcc/10.2.0/include/c++/10/type_traits:668:38: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
  668 |     : public integral_constant<bool, __is_trivial(_Tp)>
      |                                      ^~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /cm/shared/apps/gcc/10.2.0/include/c++/10/bits/move.h:57,
                 from /cm/shared/apps/gcc/10.2.0/include/c++/10/bits/stl_function.h:60,
                 from /cm/shared/apps/gcc/10.2.0/include/c++/10/functional:49,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:5,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/cm/shared/apps/gcc/10.2.0/include/c++/10/type_traits:670:52: error: static assertion failed: template argument must be a complete class or an unbounded array
  670 |       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/array.hpp:4,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:14,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘struct jlcxx::IsMirroredType<poplar::core::TargetOptions>’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:258:68:   required by substitution of ‘template<class T> struct jlcxx::MappingTrait<T, typename std::enable_if<((! jlcxx::IsMirroredType<T>::value) && (! jlcxx::IsSmartPointerType<T>::value))>::type> [with T = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:499:35:   required from ‘jl_datatype_t* jlcxx::julia_base_type() [with T = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:508:81:   required from ‘static jl_datatype_t* jlcxx::julia_type_factory<const SourceT&>::julia_type() [with SourceT = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:450:69:   required from ‘void jlcxx::create_julia_type() [with T = const poplar::core::TargetOptions&]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:466:36:   required from ‘void jlcxx::create_if_not_exists() [with T = const poplar::core::TargetOptions&]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:198:32:   required from ‘jlcxx::FunctionWrapper<R, Args>::FunctionWrapper(jlcxx::Module*, const functor_t&) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::FunctionWrapper<R, Args>::functor_t = std::function<poplar::Target(poplar::Target&, unsigned int, std::__cxx11::basic_string<char>, const poplar::core::TargetOptions&)>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:526:25:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, std::function<_Res(_ArgTypes ...)>) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:18:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::Target; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; ArgsT = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:535:165:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:204:131: error: ‘value’ is not a member of ‘std::is_trivial<poplar::core::TargetOptions>’
  204 | struct IsMirroredType : std::bool_constant<(!std::is_class<T>::value || (std::is_standard_layout<T>::value && std::is_trivial<T>::value)) && !IsSmartPointerType<T>::value>
      |                                                                                                                                   ^~~~~
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘static void jlcxx::JuliaTypeCache<SourceT>::set_julia_type(jl_datatype_t*, bool) [with SourceT = const poplar::core::TargetOptions&; jl_datatype_t = _jl_datatype_t]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:413:70:   required from ‘void jlcxx::set_julia_type(jl_datatype_t*, bool) [with T = const poplar::core::TargetOptions&; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:453:31:   required from ‘void jlcxx::create_julia_type() [with T = const poplar::core::TargetOptions&]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:466:36:   required from ‘void jlcxx::create_if_not_exists() [with T = const poplar::core::TargetOptions&]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:198:32:   required from ‘jlcxx::FunctionWrapper<R, Args>::FunctionWrapper(jlcxx::Module*, const functor_t&) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::FunctionWrapper<R, Args>::functor_t = std::function<poplar::Target(poplar::Target&, unsigned int, std::__cxx11::basic_string<char>, const poplar::core::TargetOptions&)>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:526:25:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, std::function<_Res(_ArgTypes ...)>) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:18:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::Target; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; ArgsT = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:535:165:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:398:40: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
  398 |       std::cout << "Warning: Type " << typeid(SourceT).name() << " already had a mapped type set as " << julia_type_name(insresult.first->second.get_dt()) << " using hash " << insresult.first->first.first << " and const-ref indicator " << insresult.first->first.second << std::endl;
      |                                        ^~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp: In instantiation of ‘static constexpr bool poplar::SSOPointer<T, N, A>::isPtr() [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:26:14:   required from ‘void poplar::SSOPointer<T, N, A>::moveFrom(poplar::SSOPointer<T, N, A>&&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:43:32:   required from ‘poplar::SSOPointer<T, N, A>::SSOPointer(poplar::SSOPointer<T, N, A>&&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:60:36:   required from ‘constexpr _Res std::__invoke_impl(std::__invoke_other, _Fn&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Fn = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:113:35:   required from ‘constexpr std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Callable = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> = jlcxx::BoxedValue<poplar::Type>]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:291:30:   required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:610:19:   required from ‘std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; <template-parameter-2-2> = void; <template-parameter-2-3> = void; _Res = jlcxx::BoxedValue<poplar::Type>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:30:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = jlcxx::BoxedValue<poplar::Type>; LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:57:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::Type; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; T = poplar::Type]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:324:44:   required from here
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:89:12: error: invalid application of ‘sizeof’ to incomplete type ‘poplar::core::Type’
   89 |     return sizeof(T) > N || A % alignof(T) != 0;
      |            ^~~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:89:33: error: invalid application of ‘__alignof__’ to incomplete type ‘poplar::core::Type’
   89 |     return sizeof(T) > N || A % alignof(T) != 0;
      |                                 ^~~~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp: In instantiation of ‘void poplar::SSOPointer<T, N, A>::moveFrom(poplar::SSOPointer<T, N, A>&&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:43:32:   required from ‘poplar::SSOPointer<T, N, A>::SSOPointer(poplar::SSOPointer<T, N, A>&&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:60:36:   required from ‘constexpr _Res std::__invoke_impl(std::__invoke_other, _Fn&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Fn = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:113:35:   required from ‘constexpr std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Callable = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> = jlcxx::BoxedValue<poplar::Type>]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:291:30:   required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:610:19:   required from ‘std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; <template-parameter-2-2> = void; <template-parameter-2-3> = void; _Res = jlcxx::BoxedValue<poplar::Type>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:30:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = jlcxx::BoxedValue<poplar::Type>; LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:57:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::Type; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; T = poplar::Type]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:324:44:   required from here
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:31:36: error: invalid use of incomplete type ‘class poplar::core::Type’
   31 |       *reinterpret_cast<T *>(&buf) = std::move(*reinterpret_cast<T *>(&o.buf));
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:11:7: note: forward declaration of ‘class poplar::core::Type’
   11 | class Type;
      |       ^~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp: In instantiation of ‘void poplar::SSOPointer<T, N, A>::deleter() [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:53:19:   required from ‘poplar::SSOPointer<T, N, A>::~SSOPointer() [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:60:36:   required from ‘constexpr _Res std::__invoke_impl(std::__invoke_other, _Fn&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Fn = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/invoke.h:113:35:   required from ‘constexpr std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Callable = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>&; _Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::enable_if_t<is_invocable_r_v<_Res, _Callable, _Args ...>, _Res> = jlcxx::BoxedValue<poplar::Type>]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:291:30:   required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = jlcxx::BoxedValue<poplar::Type>; _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/cm/shared/apps/gcc/10.2.0/include/c++/10/bits/std_function.h:610:19:   required from ‘std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; <template-parameter-2-2> = void; <template-parameter-2-3> = void; _Res = jlcxx::BoxedValue<poplar::Type>; _ArgTypes = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:30:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = jlcxx::BoxedValue<poplar::Type>; LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = jlcxx::Module::constructor<poplar::Type, {poplar::SSOPointer<poplar::core::Type, 8, 8>}>::<lambda(poplar::SSOPointer<poplar::core::Type>)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:562:57:   required from ‘void jlcxx::Module::constructor(jl_datatype_t*, bool) [with T = poplar::Type; ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:996:40:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(bool) [with ArgsT = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; T = poplar::Type]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:324:44:   required from here
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:19:7: warning: possible problem detected in invocation of ‘operator delete’ [-Wdelete-incomplete]
   19 |       delete ptr;
      |       ^~~~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:18:12: warning: ‘ptr’ has incomplete type
   18 |       auto ptr = *reinterpret_cast<T **>(&buf);
      |            ^~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:11:7: note: forward declaration of ‘class poplar::core::Type’
   11 | class Type;
      |       ^~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:19:7: note: neither the destructor nor the class-specific ‘operator delete’ will be called, even if they are declared when the class is defined
   19 |       delete ptr;
      |       ^~~~~~~~~~
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:21:37: error: invalid use of incomplete type ‘class poplar::core::Type’
   21 |       reinterpret_cast<T *>(&buf)->~T();
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:11:7: note: forward declaration of ‘class poplar::core::Type’
   11 | class Type;
      |       ^~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/array.hpp:4,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:14,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘static jlcxx::type_hash_t jlcxx::detail::TypeHash<const T&>::value() [with T = poplar::core::TargetOptions; jlcxx::type_hash_t = std::pair<long unsigned int, long unsigned int>]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:372:36:   required from ‘jlcxx::type_hash_t jlcxx::type_hash() [with T = const poplar::core::TargetOptions&; jlcxx::type_hash_t = std::pair<long unsigned int, long unsigned int>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:405:74:   required from ‘static bool jlcxx::JuliaTypeCache<SourceT>::has_julia_type() [with SourceT = const poplar::core::TargetOptions&]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:442:52:   required from ‘bool jlcxx::has_julia_type() [with T = const poplar::core::TargetOptions&]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:464:35:   required from ‘void jlcxx::create_if_not_exists() [with T = const poplar::core::TargetOptions&]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:198:32:   required from ‘jlcxx::FunctionWrapper<R, Args>::FunctionWrapper(jlcxx::Module*, const functor_t&) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::FunctionWrapper<R, Args>::functor_t = std::function<poplar::Target(poplar::Target&, unsigned int, std::__cxx11::basic_string<char>, const poplar::core::TargetOptions&)>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:526:25:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, std::function<_Res(_ArgTypes ...)>) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:18:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::Target; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; ArgsT = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:535:165:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:363:27: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
  363 |     return std::make_pair(typeid(T).hash_code(), std::size_t(2));
      |                           ^~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/array.hpp:4,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:14,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘static jl_datatype_t* jlcxx::julia_type_factory<SourceT, TraitT>::julia_type() [with SourceT = poplar::core::TargetOptions; TraitT = jlcxx::NoMappingTrait; jl_datatype_t = _jl_datatype_t]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:450:69:   required from ‘void jlcxx::create_julia_type() [with T = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:466:36:   required from ‘void jlcxx::create_if_not_exists() [with T = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:498:26:   required from ‘jl_datatype_t* jlcxx::julia_base_type() [with T = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:508:81:   required from ‘static jl_datatype_t* jlcxx::julia_type_factory<const SourceT&>::julia_type() [with SourceT = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:450:69:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:198:32:   required from ‘jlcxx::FunctionWrapper<R, Args>::FunctionWrapper(jlcxx::Module*, const functor_t&) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::FunctionWrapper<R, Args>::functor_t = std::function<poplar::Target(poplar::Target&, unsigned int, std::__cxx11::basic_string<char>, const poplar::core::TargetOptions&)>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:526:25:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, std::function<_Res(_ArgTypes ...)>) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:18:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::Target; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; ArgsT = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:535:165:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:423:80: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
  423 |     throw std::runtime_error(std::string("No appropriate factory for type ") + typeid(SourceT).name());
      |                                                                                ^~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/array.hpp:4,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:14,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘static void jlcxx::JuliaTypeCache<SourceT>::set_julia_type(jl_datatype_t*, bool) [with SourceT = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:413:70:   required from ‘void jlcxx::set_julia_type(jl_datatype_t*, bool) [with T = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:453:31:   required from ‘void jlcxx::create_julia_type() [with T = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:466:36:   required from ‘void jlcxx::create_if_not_exists() [with T = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:498:26:   required from ‘jl_datatype_t* jlcxx::julia_base_type() [with T = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:508:81:   required from ‘static jl_datatype_t* jlcxx::julia_type_factory<const SourceT&>::julia_type() [with SourceT = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:450:69:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:198:32:   required from ‘jlcxx::FunctionWrapper<R, Args>::FunctionWrapper(jlcxx::Module*, const functor_t&) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::FunctionWrapper<R, Args>::functor_t = std::function<poplar::Target(poplar::Target&, unsigned int, std::__cxx11::basic_string<char>, const poplar::core::TargetOptions&)>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:526:25:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, std::function<_Res(_ArgTypes ...)>) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:18:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::Target; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; ArgsT = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:535:165:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:398:40: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
  398 |       std::cout << "Warning: Type " << typeid(SourceT).name() << " already had a mapped type set as " << julia_type_name(insresult.first->second.get_dt()) << " using hash " << insresult.first->first.first << " and const-ref indicator " << insresult.first->first.second << std::endl;
      |                                        ^~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/array.hpp:4,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:14,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘static jlcxx::type_hash_t jlcxx::detail::TypeHash<T>::value() [with T = poplar::core::TargetOptions; jlcxx::type_hash_t = std::pair<long unsigned int, long unsigned int>]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:372:36:   required from ‘jlcxx::type_hash_t jlcxx::type_hash() [with T = poplar::core::TargetOptions; jlcxx::type_hash_t = std::pair<long unsigned int, long unsigned int>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:405:74:   required from ‘static bool jlcxx::JuliaTypeCache<SourceT>::has_julia_type() [with SourceT = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:442:52:   required from ‘bool jlcxx::has_julia_type() [with T = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:464:35:   required from ‘void jlcxx::create_if_not_exists() [with T = poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:498:26:   required from ‘jl_datatype_t* jlcxx::julia_base_type() [with T = poplar::core::TargetOptions; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:508:81:   [ skipping 3 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:198:32:   required from ‘jlcxx::FunctionWrapper<R, Args>::FunctionWrapper(jlcxx::Module*, const functor_t&) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::FunctionWrapper<R, Args>::functor_t = std::function<poplar::Target(poplar::Target&, unsigned int, std::__cxx11::basic_string<char>, const poplar::core::TargetOptions&)>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:526:25:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, std::function<_Res(_ArgTypes ...)>) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:700:18:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::add_lambda(const string&, LambdaT&&, R (LambdaT::*)(ArgsT ...) const) [with R = poplar::Target; LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; ArgsT = {poplar::Target&, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; std::string = std::__cxx11::basic_string<char>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:555:22:   required from ‘jlcxx::FunctionWrapperBase& jlcxx::Module::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:1031:20:   required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::method(const string&, LambdaT&&, typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type) [with LambdaT = define_julia_module(jlcxx::Module&)::<lambda(poplar::Target&, unsigned int, std::string, const poplar::core::TargetOptions&)>; T = poplar::Target; std::string = std::__cxx11::basic_string<char>; typename std::enable_if<(! std::is_member_function_pointer<LambdaT>::value), bool>::type = bool]’
/home/mose/repo/julia-ipu/deps/gen_inline.txt:535:165:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:345:27: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
  345 |     return std::make_pair(typeid(T).hash_code(), std::size_t(0));
      |                           ^~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/array.hpp:4,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:14,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘static jl_datatype_t* jlcxx::JuliaTypeCache<SourceT>::julia_type() [with SourceT = const poplar::core::TargetOptions&; jl_datatype_t = _jl_datatype_t]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:433:68:   required from ‘jl_datatype_t* jlcxx::julia_type() [with T = const poplar::core::TargetOptions&; jl_datatype_t = _jl_datatype_t]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:87:27:   required from ‘std::vector<_jl_datatype_t*> jlcxx::detail::argtype_vector() [with Args = {poplar::Target&, unsigned int, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:203:43:   required from ‘std::vector<_jl_datatype_t*> jlcxx::FunctionWrapper<R, Args>::argument_types() const [with R = poplar::Target; Args = {poplar::Target&, unsigned int, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:201:39:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:388:54: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
  388 |       throw std::runtime_error("Type " + std::string(typeid(SourceT).name()) + " has no Julia wrapper");
      |                                                      ^~~~~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/array.hpp:4,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:14,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘CppT jlcxx::ConvertToCpp<CppT, jlcxx::CxxWrappedTrait<SubTraitT> >::operator()(jlcxx::WrappedCppPtr) const [with CppT = poplar::SSOPointer<poplar::core::Type>; SubTraitT = jlcxx::NoCxxWrappedSubtrait]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:585:30:   required from ‘CppT jlcxx::convert_to_cpp(JuliaT) [with CppT = poplar::SSOPointer<poplar::core::Type>; JuliaT = jlcxx::WrappedCppPtr]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:47:61:   required from ‘jlcxx::detail::ReturnTypeAdapter<R, Args>::return_type jlcxx::detail::ReturnTypeAdapter<R, Args>::operator()(const void*, jlcxx::static_julia_type<Args>...) [with R = jlcxx::BoxedValue<poplar::Type>; Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jlcxx::detail::ReturnTypeAdapter<R, Args>::return_type = jlcxx::BoxedValue<poplar::Type>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:72:45:   required from ‘static jlcxx::detail::CallFunctor<R, Args>::return_type jlcxx::detail::CallFunctor<R, Args>::apply(const void*, jlcxx::static_julia_type<Args>...) [with R = jlcxx::BoxedValue<poplar::Type>; Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}; jlcxx::detail::CallFunctor<R, Args>::return_type = jlcxx::BoxedValue<poplar::Type>]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:209:69:   required from ‘void* jlcxx::FunctionWrapper<R, Args>::pointer() [with R = jlcxx::BoxedValue<poplar::Type>; Args = {poplar::SSOPointer<poplar::core::Type, 8, 8>}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:207:17:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:958:51: error: use of deleted function ‘poplar::SSOPointer<T, N, A>::SSOPointer(const poplar::SSOPointer<T, N, A>&) [with T = poplar::core::Type; long unsigned int N = 8; long unsigned int A = 8]’
  958 |     return *extract_pointer_nonull<CppT>(julia_val);
      |                                                   ^
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Type.hpp:6,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:13,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/SSOPointer.hpp:40:3: note: declared here
   40 |   SSOPointer(const SSOPointer &) = delete;
      |   ^~~~~~~~~~
In file included from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/array.hpp:4,
                 from /home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/jlcxx.hpp:14,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:1:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp: In instantiation of ‘CppT* jlcxx::extract_pointer_nonull(const jlcxx::WrappedCppPtr&) [with CppT = const poplar::core::TargetOptions]’:
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:949:41:   required from ‘CppT& jlcxx::ConvertToCpp<CppT&, jlcxx::WrappedPtrTrait>::operator()(jlcxx::WrappedCppPtr) const [with CppT = const poplar::core::TargetOptions]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:585:30:   required from ‘CppT jlcxx::convert_to_cpp(JuliaT) [with CppT = const poplar::core::TargetOptions&; JuliaT = jlcxx::WrappedCppPtr]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:47:61:   required from ‘jlcxx::detail::ReturnTypeAdapter<R, Args>::return_type jlcxx::detail::ReturnTypeAdapter<R, Args>::operator()(const void*, jlcxx::static_julia_type<Args>...) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::detail::ReturnTypeAdapter<R, Args>::return_type = _jl_value_t*]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:72:45:   required from ‘static jlcxx::detail::CallFunctor<R, Args>::return_type jlcxx::detail::CallFunctor<R, Args>::apply(const void*, jlcxx::static_julia_type<Args>...) [with R = poplar::Target; Args = {poplar::Target&, unsigned int, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}; jlcxx::detail::CallFunctor<R, Args>::return_type = _jl_value_t*]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:209:69:   required from ‘void* jlcxx::FunctionWrapper<R, Args>::pointer() [with R = poplar::Target; Args = {poplar::Target&, unsigned int, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const poplar::core::TargetOptions&}]’
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/module.hpp:207:17:   required from here
/home/mose/.julia/artifacts/265f706ced51e6c6251ffb6fa49e165308c67758/include/jlcxx/type_conversion.hpp:174:42: error: invalid use of incomplete type ‘struct poplar::core::TargetOptions’
  174 |     errorstr << "C++ object of type " << typeid(CppT).name() << " was deleted";
      |                                          ^~~~~~~~~~~~
In file included from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Device.hpp:8,
                 from /cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/DeviceManager.hpp:6,
                 from /home/mose/repo/julia-ipu/deps/template.cpp:8:
/cm/shared/apps/graphcore/sdk/2.0.0/include/poplar/Target.hpp:20:8: note: forward declaration of ‘struct poplar::core::TargetOptions’
   20 | struct TargetOptions;
      |        ^~~~~~~~~~~~~
giordano commented 1 year ago

Upgrading to v2.0.0 become more important because apparently we can't attach to hardware IPUs with the 1.3.0 SDK on eX3. This is unrelated to the Julia wrappers, not even a C++ program like https://github.com/graphcore/tutorials/blob/b7ffa4de24e07efbeda2e3241ea46d20fa119b84/tutorials/poplar/tut1_variables/complete/tut1_ipu_hardware_complete.cpp would work.

giordano commented 1 year ago

Update: after a call with Luk yesterday, today I managed to build working wrappers around the Poplar SDK v2.0 in the branch https://github.com/giordano/julia-ipu/tree/mg/sdk-2.0. It's working well, I could finally attach Julia to hardware devices, tests pass and I also managed to write get_devices in Julia (of course using functions from the SDK), instead of calling a function written in C++ which does the iteration over the devices. The added benefit is that I could Julia's own logging, instead of simply writing some stuff to stderr.

The only missing bit is to automatically generate the file gen_inline.txt: at the moment I manually removed the stuff which breaks compilation, need to automate the process.

giordano commented 1 year ago

And with https://github.com/giordano/julia-ipu/commit/e3cb5e09a513ee3bdc381aca0ea1bb4f29a7a0e0 I got it working with Poplar SDK up to v2.4 (Edit: it turns out this works well also for Poplar SDK 2.5) :rocket: v2.6 seems to have broken much more stuff than previous versions, but I'm not in a hurry to upgrade to that version right now, also because that's coupled to LLVM 15, which isn't supported by any version of Julia currently. Thanks again @lbb, the chat the other day was extremely helpful!