pytorch/QNNPACK

Building on OSX 10.14 for OS64 (ARM 64) fails

kohenchia opened this issue · 4 comments

I'm getting an undefined symbol error when trying to build on OSX 10.14 for ARM 64:

Command:

$ cmake .. -DCMAKE_TOOLCHAIN_FILE=../../ios-cmake/ios.toolchain.cmake -DIOS_PLATFORM=OS64
$ make

Error:

Scanning dependencies of target sgemm-bench
[ 49%] Building CXX object CMakeFiles/sgemm-bench.dir/bench/sgemm.cc.o
[ 50%] Linking CXX executable sgemm-bench
ld: warning: -headerpad_max_install_names is ignored when used with -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES)
Undefined symbols for architecture arm64:
  "_sgemm_ukernel_5x8__neon", referenced from:
      SGEMM_L1_5x8__neon_Benchmark::BenchmarkCase(benchmark::State&) in sgemm.cc.o
      SGEMM_Op_5x8__neon_Benchmark::BenchmarkCase(benchmark::State&) in sgemm.cc.o
  "_sgemm_ukernel_6x8__neon", referenced from:
      SGEMM_L1_6x8__neon_Benchmark::BenchmarkCase(benchmark::State&) in sgemm.cc.o
      SGEMM_Op_6x8__neon_Benchmark::BenchmarkCase(benchmark::State&) in sgemm.cc.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [sgemm-bench] Error 1
make[1]: *** [CMakeFiles/sgemm-bench.dir/all] Error 2
make: *** [all] Error 2

I've been poking around benchmark.h/cpp a bit but it's not clear to me why this would be happening.

I think this is a similar issue to #5, where unset CMAKE_SYSTEM_PROCESSOR breaks arch-dependent source code inclusion in CMakeLists.

That didn't seem to work. Setting CMAKE_SYSTEM_PROCESSOR to x86_64 makes the SIMULATOR64 build work, but the OS64 build still failed.

Does something in the error above suggest that this might be an arch-dependent source code inclusion problem? Isn't it normal to have to compile NEON SGEMM code for ARM 64 targets?

The linker couldn't find sgemm_ukernel_5x8__neon. This symbol is defined in src/sgemm/5x8-neon.c, which is conditionally included only on ARM/ARM64 builds.

This should be fixed with fe983bb