[Article] Using IPP with JUCE/CMake

Not too much meat on this bone, but it was somewhat annoying to figure out how to build/install/cache IPP in CI, so I figured it was worth sharing:

I also added support (and a test) for IPP to Pamplejuce:

4 Likes

Superlative bit of work! Thanks, Sudara!

1 Like

For Windows building with VS this works:

set_target_properties(${PROJECT_NAME} PROPERTIES VS_GLOBAL_UseIntelIPP1A "Static_Library")

1 Like

I just came across this post and wanted to add another option that we use in our GitHub Actions workflows. There is an IPP Python package which contains the static C libraries. We use this approach to fetch IPP in a cross platform build:

The libraries fetched this way end up being installed in some hidden python directory, but gladly a colleague of mine once did a bit of research on possible installation locations and came up with this CMake script that attempts to find IPP in any location we ever came across and then exposes a CMake target to link against them:

Maybe this is helpful to someone :slight_smile:

4 Likes

Thanks @jimc and @PluginPenguin — I’ll add info the the article too, the python package sounds super convenient…

1 Like

@sudara I’m playing with your very awesome pamplejuce for the AA Plugins and was just wondering if you have any plans, soon, to switch in using the python package for IPP instead of the existing curl-based install?

1 Like

I opened an issue for it: Switch to python based install of IPP · Issue #56 · sudara/pamplejuce · GitHub but it’ll be a few weeks before I can take a look.

The only potential blocker… I think the whole reason I went the OneAPI route was because I also needed MKL. I’ll have to see if that’s true, and maybe regardless make the 80% happy path IPP-only. Also for IPP-only, the easiest route might even be the very lightweight IPP offline installers Intel offers: https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#ipp

2 Likes

Hey @sudara, I was surprised to not see a thread dedicated to Pamplejuce (did I miss it?), so posting this here because it’s your most recent CMake-focused thread.

Did you see a cmake package manager was shared to the forums ~2 years ago? I’m not sure if that is something that is valid or worthwhile to include in Pamplejuce – you’ll know better than me!

That is all, carry on.

P.S. Excellent blog article but your detailed warning about the poor documentation of IPP scared me away from even wanting to use it :sweat_smile:

Yeah, good point! I think I was shy about posting it originally, or was already posting in a few topics about it?.. There’s a lot of interaction on the repo itself (but prob there should be a thread)

CPM is great. The only reason I haven’t moved Pamplejuce to it because I haven’t moved my main projects over to it (and I try to keep Pamplejuce as 1:1 as possible with what I’m personally using).

The reason I didn’t switch (yet) is just to keep things as “vanilla” as possible. I personally didn’t feel the tradeoff (and irony!) of manually copying and pasting a chunk of CMake into every project was worth a “nicer FetchContent.” But actually I wish CMake just adopted them and replaced FetchContent with CPM! The way CPM downloads git repos can make it a bit harder to work with JUCE modules in some situations (modules expect dir name = module name). However, I love the idea of CPMUsePackageLock (the beginnings of true dep management) so it’s essentially guaranteed I’ll end up moving to it…

Whups! Yeah, I keep making the article snarkier over time, sorry! Illuminating dragons is my #1 coping strategy :joy:. IMO, if you don’t need IPP for some explicit performance reason, it’s best avoided as a dependency!

1 Like