kfr
kfr copied to clipboard
Build fails on GCC-8
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
you need to use clang for kfr the c api will not build with gcc
C API indeed requires Clang to provide the best possible performance but the issue you mentioned has been fixed in the latest release.
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)