kfr icon indicating copy to clipboard operation
kfr copied to clipboard

Build fails on GCC-8

Open jcelerier opened this issue 3 years ago • 1 comments

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

jcelerier avatar Jan 02 '22 13:01 jcelerier

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

ghost avatar Mar 30 '22 00:03 ghost

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

dancasarin avatar Oct 14 '22 07:10 dancasarin

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)

jcelerier avatar Oct 14 '22 16:10 jcelerier