JUCE FFT and Intel IPP

Hi,

I’m struggling to get Intel IPP working with JUCE via Projucer & VS2022/Clang on Windows 11, which I’m pursuing in order to potentially accelerate dsp::convolution inside my VST3 plugins.

Could somebody please help me out with a clue as to what I’ve missed?

I haven’t yet found a consolidated step-by-step guide to activating IPP, but in a game of trial and error I’ve tried several combinations of the below steps that I found around the web (including from this thread):

  1. Installing the Intel [oneAPI Base Toolkit]. (Download the Intel® oneAPI Base Toolkit)
  2. Adding #include “ipp.h” in PluginProcessor.h
  3. Setting Projucer/Exporters/VS2022/Use IPP Library (oneAPI) = Static Library
  4. Setting Projucer/Exporters/VS2022/(deprecated) Use IPP Library = Single-Threaded Static Library
  5. Setting Projucer/Exporters/VS2022/Release/Header Search Paths = C:\Program Files (x86)\Intel\oneAPI\ipp\latest\include\ipp
  6. Setting Projucer/Exporters/VS2022/Release/Extra Library Search Paths = C:\Program Files (x86)\Intel\oneAPI\ipp\latest\lib
  7. Setting Projucer/Exporters/VS2022/Extra Preprocessor Definitions = DEFINE _IPP_SEQUENTIAL_STATIC 1 (h/t @PeterRoos)
  8. Alternatively adding atop my PluginProcessor.h #define _IPP_SEQUENTIAL_STATIC 1
  9. Checking for success by trying to hit a debugger breakpoint inside juce_FFT.cpp just before line 824 (in JUCE v7.0.9): static IntelPerformancePrimitivesFFT* create (const int order)

Note, my dsp::convolution code works OK with the normal JUCE FFT, i.e. without IPP.

Using step 8, I can build but I don’t encounter the breakpoint upon execution (per step 9).

Using step 7, building produces 28 errors “macro name must be an identifier”, almost all in line 9 of “MyPlugin_SharedCode”. I can’t find a source file of this name, but my build folder does contain a MyPlugin_SharedCode.log file, which is basically a copy of my VS2022 Output window, except each instance of the error is appended with “In file included from (built-in):422:”

I found this post discussing the “macro name must be an identifier” error, and tried setting Projucer/Settings/Use Global AppConfig Header = Enabled (h/t @reuk), which unfortunately didn’t help.

Any guidance much appreciated!