Unable to build libtvm_runtime.so for aarch64

Hi

I followed https://discuss.tvm.apache.org/t/cross-compile-the-runtime-only-for-aarch64/9800/6 and https://discuss.tvm.apache.org/t/why-do-we-need-to-build-tvm-runtime-on-remote-device-for-auto-tvm/2866 to build the runtime so for aarch64 but to no avail .

Here are my cmake flags: cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_C_COMPILER=/usr/bin/arm-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=/usr/bin/arm-linux-gnueabi-g++ -DCMAKE_FIND_ROOT_PATH=/usr/arm-linux-gnueabi -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_HOST=aarch64-linux-gnueabi ..

and the error for make -j8 VERBOSE=1 , well at the final linking stage:

[100%] Linking CXX shared library libtvm_runtime.so
/usr/local/lib/pypy2.7/dist-packages/cmake/data/bin/cmake -E cmake_link_script CMakeFiles/tvm_runtime.dir/link.txt --verbose=1
/usr/bin/arm-linux-gnueabi-g++ -fPIC -std=c++14 -faligned-new -O2 -Wall -fPIC  -Wl,--no-undefined -shared -Wl,-soname,libtvm_runtime.so -o libtvm_runtime.so CMakeFiles/tvm_runtime_objs.dir/src/runtime/builtin_fp16.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/c_runtime_api.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/container.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/cpu_device_api.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/dso_library.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/file_utils.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/library_module.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/logging.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/metadata_module.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/module.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/ndarray.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/object.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/profiling.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/registry.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/source_utils.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/system_library.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/thread_pool.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/threading_backend.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/vm/bytecode.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/vm/executable.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/vm/memory_manager.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/vm/vm.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/workspace_pool.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/rpc/rpc_channel.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/rpc/rpc_device_api.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/rpc/rpc_endpoint.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/rpc/rpc_event_impl.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/rpc/rpc_local_session.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/rpc/rpc_module.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/rpc/rpc_pipe_impl.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/rpc/rpc_server_env.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/rpc/rpc_session.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/rpc/rpc_socket_impl.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/graph_executor/graph_executor.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/graph_executor/graph_executor_factory.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/graph_executor/debug/graph_executor_debug.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/vm/profiler/vm.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/micro/micro_session.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/contrib/random/random.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/micro/standalone/microtvm_graph_executor.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/micro/standalone/microtvm_runtime.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/micro/standalone/microtvm_runtime_api.cc.o CMakeFiles/tvm_runtime_objs.dir/src/runtime/contrib/sort/sort.cc.o  -ldl -Wl,--whole-archive host_standalone_crt/libmicrotvm_rpc_common.a -Wl,--no-whole-archive -pthread 
host_standalone_crt/libmicrotvm_rpc_common.a: member host_standalone_crt/libmicrotvm_rpc_common.a(crcccitt.o) in archive is not an object
collect2: error: ld returned 1 exit status
CMakeFiles/tvm_runtime.dir/build.make:174: recipe for target 'libtvm_runtime.so' failed
make[3]: *** [libtvm_runtime.so] Error 1
make[3]: Leaving directory '/scratch/nitesh/y1/tvm_exps/tvm/build'
CMakeFiles/Makefile2:133: recipe for target 'CMakeFiles/tvm_runtime.dir/all' failed
make[2]: *** [CMakeFiles/tvm_runtime.dir/all] Error 2
make[2]: Leaving directory '/scratch/nitesh/y1/tvm_exps/tvm/build'
CMakeFiles/Makefile2:167: recipe for target 'CMakeFiles/runtime.dir/rule' failed
make[1]: *** [CMakeFiles/runtime.dir/rule] Error 2
make[1]: Leaving directory '/scratch/nitesh/y1/tvm_exps/tvm/build'
Makefile:209: recipe for target 'runtime' failed
make: *** [runtime] Error 2

I have tried both USE_LIBBACKTRACE ON and OFF, but the result remains the same.

I am using arm_compute-v21.08-bin-linux-arm64-v8.2-a-neon/lib/arm64-v8.2-a-neon/ for the arm compute library.

Any help regarding this will be great!!

Thanks!

@Nitesh thanks for your question! Ah I think perhaps we might not be forwarding the CMAKE_C_COMPILER flag onward to the Makefile used to build the TVM C runtime. This likely leads to your linker error.

Could you try adding an appropriate line here? e.g. CC=${CMAKE_C_COMPILER} and the same for CXX and AR. Feel free to raise a PR if you discover a fix.

Thanks! Andrew