OpenShadingLanguage 1.11.13.0 fails to build on armv7
ggardet opened this issue · comments
Problem
OpenShadingLanguage 1.11.13.0 fails to build on armv7.
Expected behavior:
OpenShadingLanguage 1.11.13.0 should build on armv7.
Actual behavior:
But it fails with:
[ 265s] cd /home/abuild/rpmbuild/BUILD/OpenShadingLanguage-Release-1.11.13.0/src/liboslexec && /usr/bin/clang++ -DOSL_FAST_MATH=1 -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DUSE_STD_REGEX -DOSL_LLVM_VERSION=120 -DOSL_LLVM_FULL_VERSION="12.0.0" -std=c++14 -I/home/abuild/rpmbuild/BUILD/OpenShadingLanguage-Release-1.11.13.0/src/liboslexec -I/home/abuild/rpmbuild/BUILD/OpenShadingLanguage-Release-1.11.13.0/src/include -I/home/abuild/rpmbuild/BUILD/OpenShadingLanguage-Release-1.11.13.0/build/include -I/usr/include -I/usr/include -I/usr/include -isystem\ /usr/include -DOSL_COMPILING_TO_BITCODE=1 -Wno-deprecated-register -Wno-ignored-attributes -Wno-unknown-attributes -O3 -fno-math-errno -S -emit-llvm -o /home/abuild/rpmbuild/BUILD/OpenShadingLanguage-Release-1.11.13.0/build/src/liboslexec/llvm_ops.s llvm_ops.cpp
[ 265s] In file included from llvm_ops.cpp:80:
[ 265s] In file included from /home/abuild/rpmbuild/BUILD/OpenShadingLanguage-Release-1.11.13.0/build/include/OSL/oslconfig.h:45:
[ 265s] In file included from /usr/include/OpenImageIO/errorhandler.h:10:
[ 265s] In file included from /usr/include/OpenImageIO/strutil.h:24:
[ 265s] In file included from /usr/include/OpenImageIO/hash.h:31:
[ 265s] In file included from /usr/include/OpenImageIO/fmath.h:45:
[ 265s] /usr/include/OpenImageIO/simd.h:4731:12: error: use of undeclared identifier 'vaddvq_s32'; did you mean 'vpaddlq_s32'?
[ 265s] return vaddvq_s32(v);
[ 265s] ^
[ 265s] /usr/lib/clang/12.0.0/include/arm_neon.h:18348:16: note: 'vpaddlq_s32' declared here
[ 265s] __ai int64x2_t vpaddlq_s32(int32x4_t __p0) {
[ 265s] ^
[ 265s] In file included from llvm_ops.cpp:80:
[ 265s] In file included from /home/abuild/rpmbuild/BUILD/OpenShadingLanguage-Release-1.11.13.0/build/include/OSL/oslconfig.h:45:
[ 265s] In file included from /usr/include/OpenImageIO/errorhandler.h:10:
[ 265s] In file included from /usr/include/OpenImageIO/strutil.h:24:
[ 265s] In file included from /usr/include/OpenImageIO/hash.h:31:
[ 265s] In file included from /usr/include/OpenImageIO/fmath.h:45:
[ 265s] /usr/include/OpenImageIO/simd.h:4731:12: error: cannot initialize return object of type 'int' with an rvalue of type 'int64x2_t' (vector of 2 'int64_t' values)
[ 265s] return vaddvq_s32(v);
[ 265s] ^~~~~~~~~~~~~
[ 265s] /usr/include/OpenImageIO/simd.h:6993:12: error: use of undeclared identifier 'vdivq_f32'
[ 265s] return vdivq_f32 (a.m_simd, b.m_simd);
[ 265s] ^
[ 265s] /usr/include/OpenImageIO/simd.h:7003:14: error: use of undeclared identifier 'vdivq_f32'
[ 265s] m_simd = vdivq_f32 (m_simd, a.m_simd);
[ 265s] ^
[ 265s] /usr/include/OpenImageIO/simd.h:7014:14: error: use of undeclared identifier 'vdivq_f32'
[ 265s] m_simd = vdivq_f32 (m_simd, vfloat4(val));
[ 265s] ^
[ 265s] /usr/include/OpenImageIO/simd.h:7256:12: error: use of undeclared identifier 'vaddvq_f32'
[ 265s] return vaddvq_f32(v);
[ 265s] ^
[ 265s] 6 errors generated.
Steps to Reproduce
Try to build OpenShadingLanguage 1.11.13.0 for armv7.
I used openSUSE Tumbleweed as host.
Versions
- OSL branch/version: 1.11.13.0
- OS: openSUSE Tumbleweed
- C++ compiler: gcc 10.3.0
- LLVM version: 12.0.0
- OIIO version: 2.2.13.1
vaddvq_* is only part of NEON on A64 ARM architecture:
https://developer.arm.com/architectures/instruction-sets/intrinsics/#q=vaddvq_s32
Fixed in OIIO 2.3.14
AcademySoftwareFoundation/OpenImageIO#3360
That's what I did. I also needed to disable partio to build OpenShadingLanguage 1.11.15.0 properly for armv7.