RenderKit / oidn

Intel® Open Image Denoise library
https://www.openimagedenoise.org/
Apache License 2.0
1.78k stars 164 forks source link

Compilation error on aarch64 #121

Closed lmarz closed 3 years ago

lmarz commented 3 years ago

When trying to compile oidn under aarch64 on linux, this error appears at core/network.cpp. This error does not appear on x86_64. clang and gcc deliver the same results

/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/pool.h:52:27: error: expected class name
  class PoolNode : public BNNSNode
                          ^
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/pool.h:80:20: error: only virtual member functions can be marked 'override'
    void execute() override
                   ^~~~~~~~
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/pool.h:85:44: error: only virtual member functions can be marked 'override'
    std::shared_ptr<Tensor> getDst() const override { return dst; }
                                           ^~~~~~~~~
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/pool.h:62:9: error: member initializer 'BNNSNode' does not name a non-static data member or base class
      : BNNSNode(device),
        ^~~~~~~~~~~~~~~~
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/pool.h:65:7: error: unknown type name 'BNNSLayerParametersPooling'
      BNNSLayerParametersPooling params = {
      ^
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/pool.h:68:29: error: use of undeclared identifier 'BNNSPoolingFunctionMax'
        .pooling_function = BNNSPoolingFunctionMax,
                            ^
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/pool.h:75:7: error: use of undeclared identifier 'filter'
      filter = BNNSFilterCreateLayerPooling(&params, nullptr);
      ^
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/pool.h:76:12: error: use of undeclared identifier 'filter'
      if (!filter)
           ^
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/pool.h:82:23: error: use of undeclared identifier 'filter'
      BNNSFilterApply(filter, src->data(), dst->data());
                      ^
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/network.cpp:116:34: error: use of undeclared identifier 'ConvNode'
    auto node = std::make_shared<ConvNode>(device, src, weights, bias, dst, relu);
                                 ^
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/network.cpp:137:11: error: no matching member function for call to 'push_back'
    nodes.push_back(node);
    ~~~~~~^~~~~~~~~
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/stl_vector.h:1187:7: note: candidate function not viable: no known conversion from 'shared_ptr<oidn::PoolNode>' to 'const shared_ptr<oidn::Node>' for 1st argument
      push_back(const value_type& __x)
      ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/stl_vector.h:1203:7: note: candidate function not viable: no known conversion from 'shared_ptr<oidn::PoolNode>' to 'shared_ptr<oidn::Node>' for 1st argument
      push_back(value_type&& __x)
      ^
/home/leon/aports/testing/openimagedenoise/src/oidn-1.4.1/core/network.cpp:138:12: error: no viable conversion from returned value of type 'shared_ptr<oidn::PoolNode>' to function return type 'shared_ptr<oidn::Node>'
    return node;
           ^~~~
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:149:7: note: candidate constructor not viable: no known conversion from 'std::shared_ptr<oidn::PoolNode>' to 'const std::shared_ptr<oidn::Node> &' for 1st argument
      shared_ptr(const shared_ptr&) noexcept = default; ///< Copy constructor
      ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:303:7: note: candidate constructor not viable: no known conversion from 'std::shared_ptr<oidn::PoolNode>' to 'std::shared_ptr<oidn::Node> &&' for 1st argument
      shared_ptr(shared_ptr&& __r) noexcept
      ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:356:17: note: candidate constructor not viable: no known conversion from 'std::shared_ptr<oidn::PoolNode>' to 'std::nullptr_t' (aka 'nullptr_t') for 1st argument
      constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { }
                ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:295:2: note: candidate template ignored: requirement 'is_constructible<std::__shared_ptr<oidn::Node, __gnu_cxx::_S_atomic>, const std::shared_ptr<oidn::PoolNode> &>::value' was not satisfied [with _Yp = oidn::PoolNode]
        shared_ptr(const shared_ptr<_Yp>& __r) noexcept
        ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:312:2: note: candidate template ignored: requirement 'is_constructible<std::__shared_ptr<oidn::Node, __gnu_cxx::_S_atomic>, std::shared_ptr<oidn::PoolNode>>::value' was not satisfied [with _Yp = oidn::PoolNode]
        shared_ptr(shared_ptr<_Yp>&& __r) noexcept
        ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:331:2: note: candidate template ignored: could not match 'auto_ptr' against 'shared_ptr'
        shared_ptr(auto_ptr<_Yp>&& __r);
        ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:339:2: note: candidate template ignored: could not match 'unique_ptr' against 'shared_ptr'
        shared_ptr(unique_ptr<_Yp, _Del>&& __r)
        ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:348:2: note: candidate template ignored: could not match 'unique_ptr' against 'shared_ptr'
        shared_ptr(unique_ptr<_Yp, _Del>&& __r)
        ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:407:2: note: candidate template ignored: could not match '_Sp_alloc_shared_tag' against 'shared_ptr'
        shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args)
        ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:159:2: note: explicit constructor is not a candidate
        shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { }
        ^
/usr/bin/../lib/gcc/aarch64-alpine-linux-musl/10.3.1/../../../../include/c++/10.3.1/bits/shared_ptr.h:324:11: note: explicit constructor is not a candidate
        explicit shared_ptr(const weak_ptr<_Yp>& __r)
                 ^
atafra commented 3 years ago

Open Image Denoise supports ARM only on macOS. It is not possible to compile it on Linux.