Error in linking OpenCL

Hello,

I’m building tvm_rpc exectuable with OpenCL. I have specified OpenCL_INCLUDE_DIR and OpenCL_LIBRARY, but I’m getting errors about undefined references to cl functions.

My cmake command(simplified):

 sed -i 's/set(USE_CPP_RPC OFF)/set(USE_CPP_RPC ON)/g' config.cmake && \
 sed -i 's/set(USE_OPENCL OFF)/set(USE_OPENCL ON)/g' config.cmake && \
 sed -i 's/set(USE_OPENGL OFF)/set(USE_OPENGL ON)/g' config.cmake && \
 echo 'set(OpenCL_INCLUDE_DIR /workspace/3rdparty/OpenCL-Headers)' >> config.cmake && \
 echo 'set(OpenCL_LIBRARY /workspace/3rdparty/opencl_libs/libOpenCL.so)' >> config.cmake && \
 cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake \
  -DCMAKE_C_COMPILER=${ANDROID_NDK_HOME}toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang \
  -DCMAKE_CXX_COMPILER=${ANDROID_NDK_HOME}toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang++ \
  -DCMAKE_FIND_ROOT_PATH=${ANDROID_NDK_HOME}toolchains/llvm/prebuilt/linux-x86_64/ \
  -DUSE_LLVM=${ANDROID_NDK_HOME}toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-config \
  -DUSE_SORT=ON \
  -DUSE_RPC=ON \
  -DUSE_HEXAGON_SDK=OFF \
  -DUSE_OPENCL=ON \
  -DUSE_OPENGL=ON \
  -DUSE_LIBBACKTRACE=OFF \
  -DUSE_CPP_RPC=ON \
  -DUSE_PROFILER=OFF \
  -DANDROID_PLATFORM=28 \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_VERSION=1 \
  -DCMAKE_HOST=aarch64-linux-android \
  -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
  -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
  && \
 make -j10 tvm_rpc

My error output:

#10 32.17 [100%] Building CXX object apps/cpp_rpc/CMakeFiles/tvm_rpc.dir/rpc_env.cc.o
#10 32.17 [100%] Building CXX object apps/cpp_rpc/CMakeFiles/tvm_rpc.dir/rpc_server.cc.o
#10 34.43 [100%] Linking CXX executable ../../tvm_rpc
#10 34.47 /opt/android-sdk-linux/ndk/21.3.6528147/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin/ld: warning: libOpenCL.so, needed by ../../libtvm_runtime.so, not found (try using -rpath or -rpath-link)
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clBuildProgram'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clFinish'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clCreateProgramWithSource'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clReleaseKernel'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clCreateBuffer'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clReleaseProgram'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clGetDeviceIDs'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clGetDeviceInfo'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clEnqueueNDRangeKernel'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clCreateCommandQueue'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clGetPlatformIDs'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clGetPlatformInfo'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clEnqueueCopyBuffer'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clGetEventProfilingInfo'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clCreateContext'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clGetProgramBuildInfo'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clEnqueueWriteImage'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clEnqueueReadBuffer'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clReleaseContext'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clEnqueueReadImage'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clReleaseMemObject'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clWaitForEvents'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clCreateKernel'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clCreateProgramWithBinary'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clCreateImage'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clSetKernelArg'
#10 34.48 ../../libtvm_runtime.so: undefined reference to `clEnqueueWriteBuffer'
#10 34.48 clang++: error: linker command failed with exit code 1 (use -v to see invocation)
#10 34.49 make[3]: *** [tvm_rpc] Error 1
#10 34.49 apps/cpp_rpc/CMakeFiles/tvm_rpc.dir/build.make:147: recipe for target 'tvm_rpc' failed
#10 34.49 make[2]: *** [apps/cpp_rpc/CMakeFiles/tvm_rpc.dir/all] Error 2
#10 34.49 CMakeFiles/Makefile2:1233: recipe for target 'apps/cpp_rpc/CMakeFiles/tvm_rpc.dir/all' failed
#10 34.49 make[1]: *** [apps/cpp_rpc/CMakeFiles/tvm_rpc.dir/rule] Error 2
#10 34.49 CMakeFiles/Makefile2:1245: recipe for target 'apps/cpp_rpc/CMakeFiles/tvm_rpc.dir/rule' failed
#10 34.49 make: *** [tvm_rpc] Error 2
#10 34.49 Makefile:630: recipe for target 'tvm_rpc' failed