kfrlib / kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
https://www.kfrlib.com
GNU General Public License v2.0
1.64k stars 252 forks source link

Build fails on GCC-8 #147

Closed jcelerier closed 1 year ago

jcelerier commented 2 years ago

Repro:

$ sudo docker run -v $PWD/kfr:/kfr  -it ubuntu:18.04
# apt update ; apt install cmake g++-8
# mkdir build; cd build
# cmake /kfr/ -DCMAKE_CXX_COMPILER=g++-8
-- The CXX compiler identification is GNU 8.4.0
-- Check for working CXX compiler: /usr/bin/g++-8
-- Check for working CXX compiler: /usr/bin/g++-8 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting native cpu...
-- DETECTED_CPU=avx2
-- CPU_ARCH=avx2
-- Configuring done
-- Generating done
-- Build files have been written to: /build

# make
Scanning dependencies of target kfr_io
Scanning dependencies of target detect_cpu
[ 25%] Building CXX object CMakeFiles/detect_cpu.dir/cmake/detect_cpu.cpp.o
[ 50%] Building CXX object CMakeFiles/kfr_io.dir/include/kfr/io/impl/audiofile-impl.cpp.o
In file included from /kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend.hpp:29,
                 from /kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/vec.hpp:30,
                 from /kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/mask.hpp:28,
                 from /kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/shuffle.hpp:28,
                 from /kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/expression.hpp:29,
                 from /kfr/include/kfr/io/impl/../../base/../simd/impl/function.hpp:25,
                 from /kfr/include/kfr/io/impl/../../base/../simd/impl/operators.hpp:28,
                 from /kfr/include/kfr/io/impl/../../base/../simd/operators.hpp:28,
                 from /kfr/include/kfr/io/impl/../../base/basic_expressions.hpp:28,
                 from /kfr/include/kfr/io/impl/../audiofile.hpp:28,
                 from /kfr/include/kfr/io/impl/audiofile-impl.cpp:27:
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:653:72: error: macro "_mm256_shuffle_ps" passed 7 arguments, but takes just 3
     return _mm256_shuffle_ps(t1, t2, shuffle_mask<8, 2, 3, 2, 3>::value);
                                                                        ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:661:72: error: macro "_mm256_shuffle_ps" passed 7 arguments, but takes just 3
     return _mm256_shuffle_ps(t1, t2, shuffle_mask<8, 0, 1, 0, 1>::value);
                                                                        ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1655:82: error: macro "_mm256_shuffle_ps" passed 7 arguments, but takes just 3
             return _mm256_shuffle_ps(x, x, shuffle_mask<8, I0, I1, I2, I3>::value);
                                                                                  ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1676:75: error: macro "_mm256_blend_ps" passed 11 arguments, but takes just 3
                                             1 - I6 / 4, 1 - I7 / 4>::value);
                                                                           ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1695:74: error: macro "_mm256_shuffle_ps" passed 5 arguments, but takes just 3
             return _mm256_shuffle_ps(x, x, shuffle_mask<2, I0, I1>::value);
                                                                          ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1714:102: error: macro "_mm256_blend_pd" passed 7 arguments, but takes just 3
         return _mm256_blend_pd(t1, t2, shuffle_mask<4, I0 / 2, I1 / 2, 1 - I2 / 2, 1 - I3 / 2>::value);
                                                                                                      ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1727:91: error: macro "_mm_blend_ps" passed 7 arguments, but takes just 3
         return _mm_blend_ps(t1, t2, shuffle_mask<4, I0 / 4, I1 / 4, I2 / 4, I3 / 4>::value);
                                                                                           ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1733:94: error: macro "_mm_permute_ps" passed 6 arguments, but takes just 2
         t1        = _mm_permute_ps(t1, shuffle_mask<8, I0 % 4, I1 % 4, I2 % 4, I3 % 4>::value);
                                                                                              ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1734:94: error: macro "_mm_permute_ps" passed 6 arguments, but takes just 2
         t2        = _mm_permute_ps(t2, shuffle_mask<8, I0 % 4, I1 % 4, I2 % 4, I3 % 4>::value);
                                                                                              ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1735:91: error: macro "_mm_blend_ps" passed 7 arguments, but takes just 3
         return _mm_blend_ps(t1, t2, shuffle_mask<4, I0 / 4, I1 / 4, I2 / 4, I3 / 4>::value);
                                                                                           ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1747:75: error: macro "_mm_blend_pd" passed 5 arguments, but takes just 3
         return _mm_blend_pd(t1, t2, shuffle_mask<2, I0 / 2, I1 / 2>::value);
                                                                           ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1753:79: error: macro "_mm_permute_pd" passed 4 arguments, but takes just 2
         t1         = _mm_permute_pd(t1, shuffle_mask<2, I0 % 2, I1 % 2>::value);
                                                                               ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1754:79: error: macro "_mm_permute_pd" passed 4 arguments, but takes just 2
         t2         = _mm_permute_pd(t2, shuffle_mask<2, I0 % 2, I1 % 2>::value);
                                                                               ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1755:75: error: macro "_mm_blend_pd" passed 5 arguments, but takes just 3
         return _mm_blend_pd(t1, t2, shuffle_mask<2, I0 / 2, I1 / 2>::value);
                                                                           ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1764:91: error: macro "_mm_shuffle_ps" passed 7 arguments, but takes just 3
     return KFR_mm256_setr_m128(_mm_shuffle_ps(x, x, shuffle_mask<8, I0, I1, I2, I3>::value),
                                                                                           ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1765:91: error: macro "_mm_shuffle_ps" passed 7 arguments, but takes just 3
                                _mm_shuffle_ps(x, x, shuffle_mask<8, I4, I5, I6, I7>::value));
                                                                                           ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1773:84: error: macro "_mm_shuffle_pd" passed 5 arguments, but takes just 3
     return KFR_mm256_setr_m128d(_mm_shuffle_pd(x, x, shuffle_mask<2, I0, I1>::value),
                                                                                    ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1774:84: error: macro "_mm_shuffle_pd" passed 5 arguments, but takes just 3
                                 _mm_shuffle_pd(x, x, shuffle_mask<2, I2, I3>::value));
                                                                                    ^
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp: In function 'kfr::avx2::intrinsics::simd<float, 8> kfr::avx2::intrinsics::simd_shuffle(kfr::avx2::intrinsics::simd_t<float, 16>, kfr::avx2::intrinsics::simd<float, 16>&, cometa::csizes_t<2, 3, 6, 7, 10, 11, 14, 15>, cometa::overload_priority<9>)':
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:653:12: error: '_mm256_shuffle_ps' was not declared in this scope
     return _mm256_shuffle_ps(t1, t2, shuffle_mask<8, 2, 3, 2, 3>::value);
            ^~~~~~~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp: In function 'kfr::avx2::intrinsics::simd<float, 8> kfr::avx2::intrinsics::simd_shuffle(kfr::avx2::intrinsics::simd_t<float, 16>, kfr::avx2::intrinsics::simd<float, 16>&, cometa::csizes_t<0, 1, 4, 5, 8, 9, 12, 13>, cometa::overload_priority<9>)':
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:661:12: error: '_mm256_shuffle_ps' was not declared in this scope
     return _mm256_shuffle_ps(t1, t2, shuffle_mask<8, 0, 1, 0, 1>::value);
            ^~~~~~~~~~~~~~~~~
[ 75%] Linking CXX executable detect_cpu
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp: In function 'kfr::avx2::intrinsics::simd<float, 8> kfr::avx2::intrinsics::simd_vec_shuffle(kfr::avx2::intrinsics::simd_t<float, 8>, kfr::avx2::intrinsics::simd<float, 8>&, cometa::csizes_t<I0, I1, I2, I3, I4, I5, I6, I7>)':
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1655:20: error: '_mm256_shuffle_ps' was not declared in this scope
             return _mm256_shuffle_ps(x, x, shuffle_mask<8, I0, I1, I2, I3>::value);
                    ^~~~~~~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1674:16: error: '_mm256_blend_ps' was not declared in this scope
         return _mm256_blend_ps(t1, t2,
                ^~~~~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp: In function 'kfr::avx2::intrinsics::simd<double, 4> kfr::avx2::intrinsics::simd_vec_shuffle(kfr::avx2::intrinsics::simd_t<double, 4>, kfr::avx2::intrinsics::simd<double, 4>&, cometa::csizes_t<I0, I1, I2, I3>)':
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1695:20: error: '_mm256_shuffle_ps' was not declared in this scope
             return _mm256_shuffle_ps(x, x, shuffle_mask<2, I0, I1>::value);
                    ^~~~~~~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1714:16: error: '_mm256_blend_pd' was not declared in this scope
         return _mm256_blend_pd(t1, t2, shuffle_mask<4, I0 / 2, I1 / 2, 1 - I2 / 2, 1 - I3 / 2>::value);
                ^~~~~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp: In function 'kfr::avx2::intrinsics::simd<float, 4> kfr::avx2::intrinsics::simd_vec_shuffle(kfr::avx2::intrinsics::simd_t<float, 8>, kfr::avx2::intrinsics::simd<float, 8>&, cometa::csizes_t<I0, I1, I2, I3>)':
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1727:16: error: '_mm_blend_ps' was not declared in this scope
         return _mm_blend_ps(t1, t2, shuffle_mask<4, I0 / 4, I1 / 4, I2 / 4, I3 / 4>::value);
                ^~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1733:21: error: '_mm_permute_p ' was not declared in this scope
         t1        = _mm_permute_ps(t1, shuffle_mask<8, I0 % 4, I1 % 4, I2 % 4, I3 % 4>::value);
                     ^~~~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1735:16: error: '_mm_blend_ps' was not declared in this scope
         return _mm_blend_ps(t1, t2, shuffle_mask<4, I0 / 4, I1 / 4, I2 / 4, I3 / 4>::value);
                ^~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp: In function 'kfr::avx2::intrinsics::simd<double, 2> kfr::avx2::intrinsics::simd_vec_shuffle(kfr::avx2::intrinsics::simd_t<double, 4>, kfr::avx2::intrinsics::simd<double, 4>&, cometa::csizes_t<I0, I1>)':
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1747:16: error: '_mm_blend_pd' was not declared in this scope
         return _mm_blend_pd(t1, t2, shuffle_mask<2, I0 / 2, I1 / 2>::value);
                ^~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1753:22: error: '_mm_permute_p ' was not declared in this scope
         t1         = _mm_permute_pd(t1, shuffle_mask<2, I0 % 2, I1 % 2>::value);
                      ^~~~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1755:16: error: '_mm_blend_pd' was not declared in this scope
         return _mm_blend_pd(t1, t2, shuffle_mask<2, I0 / 2, I1 / 2>::value);
                ^~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp: In function 'kfr::avx2::intrinsics::simd<float, 8> kfr::avx2::intrinsics::simd_vec_shuffle(kfr::avx2::intrinsics::simd_t<float, 4>, kfr::avx2::intrinsics::simd<float, 4>&, cometa::csizes_t<I0, I1, I2, I3, I4, I5, I6, I7>)':
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1764:32: error: '_mm_shuffle_p ' was not declared in this scope
     return KFR_mm256_setr_m128(_mm_shuffle_ps(x, x, shuffle_mask<8, I0, I1, I2, I3>::value),
                                ^~~~~~~~~~~~~~
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp: In function 'kfr::avx2::intrinsics::simd<double, 4> kfr::avx2::intrinsics::simd_vec_shuffle(kfr::avx2::intrinsics::simd_t<double, 2>, kfr::avx2::intrinsics::simd<double, 2>&, cometa::csizes_t<I0, I1, I2, I3>)':
/kfr/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1773:33: error: '_mm_shuffle_p ' was not declared in this scope
     return KFR_mm256_setr_m128d(_mm_shuffle_pd(x, x, shuffle_mask<2, I0, I1>::value),
                                 ^~~~~~~~~~~~~~
[ 75%] Built target detect_cpu
CMakeFiles/kfr_io.dir/build.make:62: recipe for target 'CMakeFiles/kfr_io.dir/include/kfr/io/impl/audiofile-impl.cpp.o' failed
make[2]: *** [CMakeFiles/kfr_io.dir/include/kfr/io/impl/audiofile-impl.cpp.o] Error 1
CMakeFiles/Makefile2:136: recipe for target 'CMakeFiles/kfr_io.dir/all' failed
make[1]: *** [CMakeFiles/kfr_io.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
ghost commented 2 years ago

you need to use clang for kfr the c api will not build with gcc

dancazarin commented 1 year ago

C API indeed requires Clang to provide the best possible performance but the issue you mentioned has been fixed in the latest release.

jcelerier commented 1 year ago

thank you - I still want my software to be available to build on linux distros without the user having to install clang (even though my official releases are built with it)