Note that this affects all branches.
First, I’m running into the same warnings as in this post:
Lots of warnings like "parameter passing for argument of type ... changed in GCC 7.1" when compiling with GCC 8 . From the looks of it passing -Wno-psabi into all projects could fix the issue, but blanket warning disabling kind of sucks… so I’ll leave that up to you.
As for the errors:
- When unit tests are enabled, the DSP module tests
SIMDRegisterin an environment that doesn’t apply. - We need to apply
-latomicexplicitly otherwise we get an assortment of undefined references regarding atomics. This meansjuce_corewill need to be updated tort dl pthread atomicfor itslinuxLibs, and subsequently all projects will need to be resaved.
I have a patch to fix all of this:
diff --git a/modules/juce_core/juce_core.h b/modules/juce_core/juce_core.h
index 49ee367fb..40054ace2 100644
--- a/modules/juce_core/juce_core.h
+++ b/modules/juce_core/juce_core.h
@@ -41,7 +41,7 @@
dependencies:
OSXFrameworks: Cocoa IOKit
iOSFrameworks: Foundation
- linuxLibs: rt dl pthread
+ linuxLibs: rt dl pthread atomic
mingwLibs: uuid wsock32 wininet version ole32 ws2_32 oleaut32 imm32 comdlg32 shlwapi rpcrt4 winmm
END_JUCE_MODULE_DECLARATION
diff --git a/modules/juce_dsp/containers/juce_AudioBlock_test.cpp b/modules/juce_dsp/containers/juce_AudioBlock_test.cpp
index 2b18c829b..4b8163e4a 100644
--- a/modules/juce_dsp/containers/juce_AudioBlock_test.cpp
+++ b/modules/juce_dsp/containers/juce_AudioBlock_test.cpp
@@ -321,12 +321,8 @@ public:
private:
//==============================================================================
template <typename T>
- using ScalarVoid = typename std::enable_if_t < std::is_scalar <T>::value, void>;
+ using ScalarVoid = typename std::enable_if_t<std::is_scalar<T>::value, void>;
- template <typename T>
- using SIMDVoid = typename std::enable_if_t <! std::is_scalar <T>::value, void>;
-
- //==============================================================================
template <typename T = SampleType>
ScalarVoid<T> copyingTests()
{
@@ -356,6 +352,40 @@ private:
}
template <typename T = SampleType>
+ ScalarVoid<T> smoothedValueTests()
+ {
+ block.fill ((SampleType) 1.0);
+ SmoothedValue<SampleType> sv { (SampleType) 1.0 };
+ sv.reset (1, 4);
+ sv.setTargetValue ((SampleType) 0.0);
+
+ block.multiplyBy (sv);
+ expect (block.getSample (0, 2) < (SampleType) 1.0);
+ expect (block.getSample (1, 2) < (SampleType) 1.0);
+ expect (block.getSample (0, 2) > (SampleType) 0.0);
+ expect (block.getSample (1, 2) > (SampleType) 0.0);
+ expectEquals (block.getSample (0, 5), (SampleType) 0.0);
+ expectEquals (block.getSample (1, 5), (SampleType) 0.0);
+
+ sv.setCurrentAndTargetValue (-1.0f);
+ sv.setTargetValue (0.0f);
+ otherBlock.fill (-1.0f);
+ block.replaceWithProductOf (otherBlock, sv);
+ expect (block.getSample (0, 2) < (SampleType) 1.0);
+ expect (block.getSample (1, 2) < (SampleType) 1.0);
+ expect (block.getSample (0, 2) > (SampleType) 0.0);
+ expect (block.getSample (1, 2) > (SampleType) 0.0);
+ expectEquals (block.getSample (0, 5), (SampleType) 0.0);
+ expectEquals (block.getSample (1, 5), (SampleType) 0.0);
+ }
+
+ //==============================================================================
+ #if JUCE_USE_SIMD
+
+ template<typename T>
+ using SIMDVoid = typename std::enable_if_t<! std::is_scalar <T>::value, void>;
+
+ template<typename T = SampleType>
SIMDVoid<T> copyingTests()
{
auto numSIMDElements = SIMDRegister<NumericType>::SIMDNumElements;
@@ -398,37 +428,9 @@ private:
}
}
- //==============================================================================
- template <typename T = SampleType>
- ScalarVoid<T> smoothedValueTests()
- {
- block.fill ((SampleType) 1.0);
- SmoothedValue<SampleType> sv { (SampleType) 1.0 };
- sv.reset (1, 4);
- sv.setTargetValue ((SampleType) 0.0);
-
- block.multiplyBy (sv);
- expect (block.getSample (0, 2) < (SampleType) 1.0);
- expect (block.getSample (1, 2) < (SampleType) 1.0);
- expect (block.getSample (0, 2) > (SampleType) 0.0);
- expect (block.getSample (1, 2) > (SampleType) 0.0);
- expectEquals (block.getSample (0, 5), (SampleType) 0.0);
- expectEquals (block.getSample (1, 5), (SampleType) 0.0);
-
- sv.setCurrentAndTargetValue (-1.0f);
- sv.setTargetValue (0.0f);
- otherBlock.fill (-1.0f);
- block.replaceWithProductOf (otherBlock, sv);
- expect (block.getSample (0, 2) < (SampleType) 1.0);
- expect (block.getSample (1, 2) < (SampleType) 1.0);
- expect (block.getSample (0, 2) > (SampleType) 0.0);
- expect (block.getSample (1, 2) > (SampleType) 0.0);
- expectEquals (block.getSample (0, 5), (SampleType) 0.0);
- expectEquals (block.getSample (1, 5), (SampleType) 0.0);
- }
-
- template <typename T = SampleType>
+ template<typename T = SampleType>
SIMDVoid<T> smoothedValueTests() {}
+ #endif
//==============================================================================
void resetBlocks()
@@ -492,8 +494,11 @@ private:
static AudioBlockUnitTests<float> audioBlockFloatUnitTests;
static AudioBlockUnitTests<double> audioBlockDoubleUnitTests;
+
+#if JUCE_USE_SIMD
static AudioBlockUnitTests<SIMDRegister<float>> audioBlockSIMDFloatUnitTests;
static AudioBlockUnitTests<SIMDRegister<double>> audioBlockSIMDDoubleUnitTests;
+#endif
} // namespace dsp
} // namespace juce
