Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build error of Android armeabi-v7a and x86 of NEON optimization #452

Open
MartinEesmaa opened this issue Oct 23, 2024 · 7 comments
Open
Labels
build Concerns the build setup

Comments

@MartinEesmaa
Copy link

MartinEesmaa commented Oct 23, 2024

Hello, as NEON optimization improved of commit for up to 49cb3f5 and 2f25b8a may cause issue build error only for Android architectures of armeabi-v7a and x86.

Using Android NDK r24 outdated.

Only it can solve the problem by disabling ARM simde of Android armeabi-v7a, also disabling SIMD x86 for Android x86 built successfully.

See the full log of armeabi-v7a of Android:

/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:153:33: error: use of undeclared identifier 'vpaddq_s32'
  int32x4_t vsuma = vpaddq_s32( vpaddq_s32( a0, a1 ), vpaddq_s32( a2, a3 ) );
                                ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:153:55: error: use of undeclared identifier 'vpaddq_s32'
  int32x4_t vsuma = vpaddq_s32( vpaddq_s32( a0, a1 ), vpaddq_s32( a2, a3 ) );
                                                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:227:23: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0           = vmlal_laneq_s16( vsum0, vsrcv0, cv, 0 );
                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:228:23: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0           = vmlal_laneq_s16( vsum0, vsrcv1, cv, 1 );
                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:229:23: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0           = vmlal_laneq_s16( vsum0, vsrcv2, cv, 2 );
                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:230:23: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0           = vmlal_laneq_s16( vsum0, vsrcv3, cv, 3 );
                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:231:23: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0           = vmlal_laneq_s16( vsum0, vsrcv4, cv, 4 );
                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:232:23: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0           = vmlal_laneq_s16( vsum0, vsrcv5, cv, 5 );
                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:233:23: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0           = vmlal_laneq_s16( vsum0, vsrcv6, cv, 6 );
                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:234:23: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0           = vmlal_laneq_s16( vsum0, vsrcv7, cv, 7 );
                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:316:13: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0 = vmlal_laneq_s16( vsum0, vget_low_s16( vsrcv0 ), cv, 0 );
            ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:317:13: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum1 = vmlal_laneq_s16( vsum1, vget_high_s16( vsrcv0 ), cv, 0 );
            ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:319:13: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0 = vmlal_laneq_s16( vsum0, vget_low_s16( vsrcv1 ), cv, 1 );
            ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:320:13: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum1 = vmlal_laneq_s16( vsum1, vget_high_s16( vsrcv1 ), cv, 1 );
            ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:322:13: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0 = vmlal_laneq_s16( vsum0, vget_low_s16( vsrcv2 ), cv, 2 );
            ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:323:13: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum1 = vmlal_laneq_s16( vsum1, vget_high_s16( vsrcv2 ), cv, 2 );
            ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:325:13: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0 = vmlal_laneq_s16( vsum0, vget_low_s16( vsrcv3 ), cv, 3 );
            ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:326:13: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum1 = vmlal_laneq_s16( vsum1, vget_high_s16( vsrcv3 ), cv, 3 );
            ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/InterpolationFilter_neon.cpp:328:13: error: use of undeclared identifier 'vmlal_laneq_s16'
    vsum0 = vmlal_laneq_s16( vsum0, vget_low_s16( vsrcv4 ), cv, 4 );
            ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
gmake[2]: *** [source/Lib/vvenc/CMakeFiles/vvenc_arm_simd.dir/build.make:90: source/Lib/vvenc/CMakeFiles/vvenc_arm_simd.dir/__/CommonLib/arm/neon/InterpolationFilter_neon.cpp.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
[  9%] Building CXX object source/Lib/vvenc/CMakeFiles/vvenc_x86_simd.dir/__/CommonLib/x86/sse41/FGA_sse41.cpp.o
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/MCTF_neon.cpp:78:21: error: use of undeclared identifier 'vpaddq_s32'
  int32x4_t sum01 = vpaddq_s32( sum0, sum1 );
                    ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/MCTF_neon.cpp:79:21: error: use of undeclared identifier 'vpaddq_s32'
  int32x4_t sum23 = vpaddq_s32( sum2, sum3 );
                    ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/MCTF_neon.cpp:80:21: error: use of undeclared identifier 'vpaddq_s32'
  int32x4_t sum45 = vpaddq_s32( sum4, sum5 );
                    ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/MCTF_neon.cpp:81:21: error: use of undeclared identifier 'vpaddq_s32'
  int32x4_t sum67 = vpaddq_s32( sum6, sum7 );
                    ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/MCTF_neon.cpp:82:23: error: use of undeclared identifier 'vpaddq_s32'
  int32x4_t sum0123 = vpaddq_s32( sum01, sum23 );
                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/MCTF_neon.cpp:83:23: error: use of undeclared identifier 'vpaddq_s32'
  int32x4_t sum4567 = vpaddq_s32( sum45, sum67 );
                      ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/MCTF_neon.cpp:141:16: error: use of undeclared identifier 'vaddvq_s32'; did you mean 'vpaddlq_s32'?
      error += vaddvq_s32( diff2 );
               ^~~~~~~~~~
               vpaddlq_s32
/home/martineesmaa/android-ndk-r24/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/14.0.1/include/arm_neon.h:18534:16: note: 'vpaddlq_s32' declared here
__ai int64x2_t vpaddlq_s32(int32x4_t __p0) {
               ^
/home/martineesmaa/vvenc/source/Lib/CommonLib/arm/neon/MCTF_neon.cpp:141:13: error: assigning to 'int' from incompatible type 'int64x2_t' (vector of 2 'int64_t' values)
      error += vaddvq_s32( diff2 );
            ^  ~~~~~~~~~~~~~~~~~~~

Android x86:

ld: error: undefined symbol: void vvenc::InterpolationFilter::_initInterpolationFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::InterpolationFilter::initInterpolationFilterX86())
>>> did you mean: void vvenc::InterpolationFilter::_initInterpolationFilterX86<(vvenc::x86_simd::X86_VEXT)1>()
>>> defined in: ../../../lib/release-static/libvvenc.a(InterpolationFilter_sse41.cpp.o)

ld: error: undefined symbol: void vvenc::PelBufferOps::_initPelBufOpsX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::PelBufferOps::initPelBufOpsX86())
>>> did you mean: void vvenc::PelBufferOps::_initPelBufOpsX86<(vvenc::x86_simd::X86_VEXT)1>()
>>> defined in: ../../../lib/release-static/libvvenc.a(Buffer_sse41.cpp.o)

ld: error: undefined symbol: void vvenc::LoopFilter::_initLoopFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::LoopFilter::initLoopFilterX86())

ld: error: undefined symbol: void vvenc::RdCost::_initRdCostX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::RdCost::initRdCostX86())

ld: error: undefined symbol: void vvenc::AdaptiveLoopFilter::_initAdaptiveLoopFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::AdaptiveLoopFilter::initAdaptiveLoopFilterX86())

ld: error: undefined symbol: void vvenc::SampleAdaptiveOffset::_initSampleAdaptiveOffsetX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::SampleAdaptiveOffset::initSampleAdaptiveOffsetX86())

ld: error: undefined symbol: void vvenc::InterPredInterpolation::_initInterPredictionX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::InterPredInterpolation::initInterPredictionX86())

ld: error: undefined symbol: void vvenc::AffineGradientSearch::_initAffineGradientSearchX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::AffineGradientSearch::initAffineGradientSearchX86())

ld: error: undefined symbol: void vvenc::IntraPrediction::_initIntraPredictionX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::IntraPrediction::initIntraPredictionX86())

ld: error: undefined symbol: void vvenc::MCTF::_initMCTF_X86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::MCTF::initMCTF_X86())

ld: error: undefined symbol: void vvenc::TCoeffOps::_initTCoeffOpsX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::TCoeffOps::initTCoeffOpsX86())

ld: error: undefined symbol: void vvenc::TrQuant::_initTrQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::TrQuant::initTrQuantX86())

ld: error: undefined symbol: void vvenc::Quant::_initQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Quant::initQuantX86())

ld: error: undefined symbol: void vvenc::DepQuant::_initDepQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::DepQuant::initDepQuantX86())

ld: error: undefined symbol: void vvenc::Canny::_initFGACannyX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Canny::initFGACannyX86())

ld: error: undefined symbol: void vvenc::Morph::_initFGAMorphX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Morph::initFGAMorphX86())

ld: error: undefined symbol: void vvenc::FGAnalyzer::_initFGAnalyzerX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::FGAnalyzer::initFGAnalyzerX86())
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
gmake[2]: *** [test/vvencinterfacetest/CMakeFiles/vvencinterfacetest.dir/build.make:98: ../bin/release-static/vvencinterfacetest] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:302: test/vvencinterfacetest/CMakeFiles/vvencinterfacetest.dir/all] Error 2
gmake[1]: *** Waiting for unfinished jobs....
[ 98%] Linking CXX executable ../../../../bin/release-static/vvencFFapp
[100%] Linking CXX executable ../../../../bin/release-static/vvencapp
ld: error: undefined symbol: void vvenc::InterpolationFilter::_initInterpolationFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::InterpolationFilter::initInterpolationFilterX86())
>>> did you mean: void vvenc::InterpolationFilter::_initInterpolationFilterX86<(vvenc::x86_simd::X86_VEXT)1>()
>>> defined in: ../../../lib/release-static/libvvenc.a(InterpolationFilter_sse41.cpp.o)

ld: error: undefined symbol: void vvenc::PelBufferOps::_initPelBufOpsX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::PelBufferOps::initPelBufOpsX86())
>>> did you mean: void vvenc::PelBufferOps::_initPelBufOpsX86<(vvenc::x86_simd::X86_VEXT)1>()
>>> defined in: ../../../lib/release-static/libvvenc.a(Buffer_sse41.cpp.o)

ld: error: undefined symbol: void vvenc::LoopFilter::_initLoopFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::LoopFilter::initLoopFilterX86())

ld: error: undefined symbol: void vvenc::RdCost::_initRdCostX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::RdCost::initRdCostX86())

ld: error: undefined symbol: void vvenc::AdaptiveLoopFilter::_initAdaptiveLoopFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::AdaptiveLoopFilter::initAdaptiveLoopFilterX86())

ld: error: undefined symbol: void vvenc::SampleAdaptiveOffset::_initSampleAdaptiveOffsetX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::SampleAdaptiveOffset::initSampleAdaptiveOffsetX86())

ld: error: undefined symbol: void vvenc::InterPredInterpolation::_initInterPredictionX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::InterPredInterpolation::initInterPredictionX86())

ld: error: undefined symbol: void vvenc::AffineGradientSearch::_initAffineGradientSearchX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::AffineGradientSearch::initAffineGradientSearchX86())

ld: error: undefined symbol: void vvenc::IntraPrediction::_initIntraPredictionX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::IntraPrediction::initIntraPredictionX86())

ld: error: undefined symbol: void vvenc::MCTF::_initMCTF_X86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::MCTF::initMCTF_X86())

ld: error: undefined symbol: void vvenc::TCoeffOps::_initTCoeffOpsX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::TCoeffOps::initTCoeffOpsX86())

ld: error: undefined symbol: void vvenc::TrQuant::_initTrQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::TrQuant::initTrQuantX86())

ld: error: undefined symbol: void vvenc::Quant::_initQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Quant::initQuantX86())

ld: error: undefined symbol: void vvenc::DepQuant::_initDepQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::DepQuant::initDepQuantX86())

ld: error: undefined symbol: void vvenc::Canny::_initFGACannyX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Canny::initFGACannyX86())

ld: error: undefined symbol: void vvenc::Morph::_initFGAMorphX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Morph::initFGAMorphX86())

ld: error: undefined symbol: void vvenc::FGAnalyzer::_initFGAnalyzerX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::FGAnalyzer::initFGAnalyzerX86())
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
gmake[2]: *** [test/vvenclibtest/CMakeFiles/vvenclibtest.dir/build.make:98: ../bin/release-static/vvenclibtest] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:276: test/vvenclibtest/CMakeFiles/vvenclibtest.dir/all] Error 2
ld: error: undefined symbol: void vvenc::InterpolationFilter::_initInterpolationFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::InterpolationFilter::initInterpolationFilterX86())
>>> did you mean: void vvenc::InterpolationFilter::_initInterpolationFilterX86<(vvenc::x86_simd::X86_VEXT)1>()
>>> defined in: ../../../../lib/release-static/libvvenc.a(InterpolationFilter_sse41.cpp.o)

ld: error: undefined symbol: void vvenc::PelBufferOps::_initPelBufOpsX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::PelBufferOps::initPelBufOpsX86())
>>> did you mean: void vvenc::PelBufferOps::_initPelBufOpsX86<(vvenc::x86_simd::X86_VEXT)1>()
>>> defined in: ../../../../lib/release-static/libvvenc.a(Buffer_sse41.cpp.o)

ld: error: undefined symbol: void vvenc::LoopFilter::_initLoopFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::LoopFilter::initLoopFilterX86())

ld: error: undefined symbol: void vvenc::RdCost::_initRdCostX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::RdCost::initRdCostX86())

ld: error: undefined symbol: void vvenc::AdaptiveLoopFilter::_initAdaptiveLoopFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::AdaptiveLoopFilter::initAdaptiveLoopFilterX86())

ld: error: undefined symbol: void vvenc::SampleAdaptiveOffset::_initSampleAdaptiveOffsetX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::SampleAdaptiveOffset::initSampleAdaptiveOffsetX86())

ld: error: undefined symbol: void vvenc::InterPredInterpolation::_initInterPredictionX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::InterPredInterpolation::initInterPredictionX86())

ld: error: undefined symbol: void vvenc::AffineGradientSearch::_initAffineGradientSearchX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::AffineGradientSearch::initAffineGradientSearchX86())

ld: error: undefined symbol: void vvenc::IntraPrediction::_initIntraPredictionX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::IntraPrediction::initIntraPredictionX86())

ld: error: undefined symbol: void vvenc::MCTF::_initMCTF_X86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::MCTF::initMCTF_X86())

ld: error: undefined symbol: void vvenc::TCoeffOps::_initTCoeffOpsX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::TCoeffOps::initTCoeffOpsX86())

ld: error: undefined symbol: void vvenc::TrQuant::_initTrQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::TrQuant::initTrQuantX86())

ld: error: undefined symbol: void vvenc::Quant::_initQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Quant::initQuantX86())

ld: error: undefined symbol: void vvenc::DepQuant::_initDepQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::DepQuant::initDepQuantX86())

ld: error: undefined symbol: void vvenc::Canny::_initFGACannyX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Canny::initFGACannyX86())

ld: error: undefined symbol: void vvenc::Morph::_initFGAMorphX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Morph::initFGAMorphX86())

ld: error: undefined symbol: void vvenc::FGAnalyzer::_initFGAnalyzerX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::FGAnalyzer::initFGAnalyzerX86())
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
gmake[2]: *** [source/App/vvencFFapp/CMakeFiles/vvencFFapp.dir/build.make:114: ../bin/release-static/vvencFFapp] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:250: source/App/vvencFFapp/CMakeFiles/vvencFFapp.dir/all] Error 2
ld: error: undefined symbol: void vvenc::InterpolationFilter::_initInterpolationFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::InterpolationFilter::initInterpolationFilterX86())
>>> did you mean: void vvenc::InterpolationFilter::_initInterpolationFilterX86<(vvenc::x86_simd::X86_VEXT)1>()
>>> defined in: ../../../../lib/release-static/libvvenc.a(InterpolationFilter_sse41.cpp.o)

ld: error: undefined symbol: void vvenc::PelBufferOps::_initPelBufOpsX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::PelBufferOps::initPelBufOpsX86())
>>> did you mean: void vvenc::PelBufferOps::_initPelBufOpsX86<(vvenc::x86_simd::X86_VEXT)1>()
>>> defined in: ../../../../lib/release-static/libvvenc.a(Buffer_sse41.cpp.o)

ld: error: undefined symbol: void vvenc::LoopFilter::_initLoopFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::LoopFilter::initLoopFilterX86())

ld: error: undefined symbol: void vvenc::RdCost::_initRdCostX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::RdCost::initRdCostX86())

ld: error: undefined symbol: void vvenc::AdaptiveLoopFilter::_initAdaptiveLoopFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::AdaptiveLoopFilter::initAdaptiveLoopFilterX86())

ld: error: undefined symbol: void vvenc::SampleAdaptiveOffset::_initSampleAdaptiveOffsetX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::SampleAdaptiveOffset::initSampleAdaptiveOffsetX86())

ld: error: undefined symbol: void vvenc::InterPredInterpolation::_initInterPredictionX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::InterPredInterpolation::initInterPredictionX86())

ld: error: undefined symbol: void vvenc::AffineGradientSearch::_initAffineGradientSearchX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::AffineGradientSearch::initAffineGradientSearchX86())

ld: error: undefined symbol: void vvenc::IntraPrediction::_initIntraPredictionX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::IntraPrediction::initIntraPredictionX86())

ld: error: undefined symbol: void vvenc::MCTF::_initMCTF_X86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::MCTF::initMCTF_X86())

ld: error: undefined symbol: void vvenc::TCoeffOps::_initTCoeffOpsX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::TCoeffOps::initTCoeffOpsX86())

ld: error: undefined symbol: void vvenc::TrQuant::_initTrQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::TrQuant::initTrQuantX86())

ld: error: undefined symbol: void vvenc::Quant::_initQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Quant::initQuantX86())

ld: error: undefined symbol: void vvenc::DepQuant::_initDepQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::DepQuant::initDepQuantX86())

ld: error: undefined symbol: void vvenc::Canny::_initFGACannyX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Canny::initFGACannyX86())

ld: error: undefined symbol: void vvenc::Morph::_initFGAMorphX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Morph::initFGAMorphX86())

ld: error: undefined symbol: void vvenc::FGAnalyzer::_initFGAnalyzerX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::FGAnalyzer::initFGAnalyzerX86())
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

Have a nice day! :)

  • Martin Eesmaa
@adamjw24
Copy link
Member

For the second part of your problem, please do: make clean. I hope that would fix it.

For the first part, I just don't think our code supports ARMv7.

@adamjw24
Copy link
Member

For the second part of your problem, please do: make clean. I hope that would fix it.

Wait, after a second look I think there is some other issue. Could you please describe in detail your build process?

@georges-arm
Copy link
Contributor

For the first part the Arm v7 failures are all in my recent code and should be easy to fix, I can reproduce the failures locally so I will look at fixing them.

@georges-arm
Copy link
Contributor

I've put up #453 which should fix the compilation errors on 32-bit Arm platforms. Please let me know if there are any remaining compile errors when targeting Arm and I'll take a look. Thanks!

@adamjw24
Copy link
Member

adamjw24 commented Nov 1, 2024

@MartinEesmaa Any feedback on that?

@adamjw24 adamjw24 added the build Concerns the build setup label Nov 1, 2024
@MartinEesmaa
Copy link
Author

@MartinEesmaa Any feedback on that?

Hi, @adamjw24! I will test it out soon later to see if armv7 and x86 of Android build architectures were success or not. :)

  • Martin Eesmaa

@MartinEesmaa
Copy link
Author

Hello, @adamjw24.

The Android architecture of armeabi-v7a worked fine after fix, especially thanks @georges-arm! Still Android x86 compilation linking error:

ld: error: undefined symbol: void vvenc::InterpolationFilter::_initInterpolationFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::InterpolationFilter::initInterpolationFilterX86())
>>> did you mean: void vvenc::InterpolationFilter::_initInterpolationFilterX86<(vvenc::x86_simd::X86_VEXT)1>()
>>> defined in: ../../../../lib/release-static/libvvenc.a(InterpolationFilter_sse41.cpp.o)

ld: error: undefined symbol: void vvenc::PelBufferOps::_initPelBufOpsX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::PelBufferOps::initPelBufOpsX86())
>>> did you mean: void vvenc::PelBufferOps::_initPelBufOpsX86<(vvenc::x86_simd::X86_VEXT)1>()
>>> defined in: ../../../../lib/release-static/libvvenc.a(Buffer_sse41.cpp.o)

ld: error: undefined symbol: void vvenc::LoopFilter::_initLoopFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::LoopFilter::initLoopFilterX86())

ld: error: undefined symbol: void vvenc::RdCost::_initRdCostX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::RdCost::initRdCostX86())

ld: error: undefined symbol: void vvenc::AdaptiveLoopFilter::_initAdaptiveLoopFilterX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::AdaptiveLoopFilter::initAdaptiveLoopFilterX86())

ld: error: undefined symbol: void vvenc::SampleAdaptiveOffset::_initSampleAdaptiveOffsetX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::SampleAdaptiveOffset::initSampleAdaptiveOffsetX86())

ld: error: undefined symbol: void vvenc::InterPredInterpolation::_initInterPredictionX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::InterPredInterpolation::initInterPredictionX86())

ld: error: undefined symbol: void vvenc::AffineGradientSearch::_initAffineGradientSearchX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::AffineGradientSearch::initAffineGradientSearchX86())

ld: error: undefined symbol: void vvenc::IntraPrediction::_initIntraPredictionX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::IntraPrediction::initIntraPredictionX86())

ld: error: undefined symbol: void vvenc::MCTF::_initMCTF_X86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::MCTF::initMCTF_X86())

ld: error: undefined symbol: void vvenc::TCoeffOps::_initTCoeffOpsX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::TCoeffOps::initTCoeffOpsX86())

ld: error: undefined symbol: void vvenc::TrQuant::_initTrQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::TrQuant::initTrQuantX86())

ld: error: undefined symbol: void vvenc::Quant::_initQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Quant::initQuantX86())

ld: error: undefined symbol: void vvenc::DepQuant::_initDepQuantX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::DepQuant::initDepQuantX86())

ld: error: undefined symbol: void vvenc::Canny::_initFGACannyX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Canny::initFGACannyX86())

ld: error: undefined symbol: void vvenc::Morph::_initFGAMorphX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::Morph::initFGAMorphX86())

ld: error: undefined symbol: void vvenc::FGAnalyzer::_initFGAnalyzerX86<(vvenc::x86_simd::X86_VEXT)4>()
>>> referenced by InitX86.cpp
>>>               lto.tmp:(vvenc::FGAnalyzer::initFGAnalyzerX86())
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
gmake[2]: *** [source/App/vvencapp/CMakeFiles/vvencapp.dir/build.make:98: ../bin/release-static/vvencapp] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:224: source/App/vvencapp/CMakeFiles/vvencapp.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2

Disabling X86 SIMD of Android x86 successfully compiled.

Feel free to reply back to me, if you have time! Thanks! :)

  • Martin Eesmaa

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build Concerns the build setup
Projects
None yet
Development

No branches or pull requests

3 participants