Roadmap to HISE 5
-
I've readded support for IPP on Linux - https://github.com/christophhart/HISE/pull/754
Edit: Hold off merging this, I have an idea I want to try to make it a little more cross-distro friendly.
-
@d-healey Can the OneAPI thingie on Linux also add the library search path etc?
Ideally you would never have to set USE_IPP manually and it will pick up the definitions made by the IPP headers like it‘s doing on Windows now.
-
@Christoph-Hart said in Roadmap to HISE 5:
@d-healey Can the OneAPI thingie on Linux also add the library search path etc?
Ideally you would never have to set USE_IPP manually and it will pick up the definitions made by the IPP headers like it‘s doing on Windows now.
I'll look into it.
What I'm thinking is probably going to be the most cross-distro solution is to have the user add the root folder to their bashrc file (environment variable). I also want to do this for FFTW so it builds with the static library instead of the shared library.
-
@Christoph-Hart Can you tell me how on Windows, when compiling HISE, it knows where to find the IPP files without the paths being specified in Projucer? I'm looking through the source at the moment but not seeing it.
Edit: Ah I think I figured it out. The installer is setting some environment variables or something on Windows, and has all the fancy integration with VS so it just works.
I'll see how close I can get on Linux, probably have to manually set the env variables though.
-
The installer is setting some environment variables or something on Windows
I think it's all handled by the VisualStudio OneAPI extension, that's why I removed all the manual preprocessors.
In the first module that is included in HISE (
hi_lac
), I'm then just picking up the preprocessors defined by the included IPP headers like this:#if JUCE_WINDOWS #if _IPP_SEQUENTIAL_STATIC || _IPP_SEQUENTIAL_DYNAMIC || _IPP_PARALLEL_STATIC || _IPP_PARALLEL_DYNAMIC #define USE_IPP 1 #else #define USE_IPP 0 #endif #else #define USE_IPP 0 #endif
It might be enough to just change the first line to
#if JUCE_WINDOWS || JUCE_LINUX
and then set environment variables for global library / header search paths -
@Christoph-Hart Yep that looks like it, I've been poking around in VS too to see where those macros are declared.
There doesn't seem to be any nice integration like that for gcc/g++/make so it will require a little more manual work but I'll try and avoid the need for USE_IPP and make it as painless as possible.
-
@d-healey oops, I edited my post below while you were replying...
-
@Christoph-Hart said in Roadmap to HISE 5:
It might be enough to just change the first line to #if JUCE_WINDOWS || JUCE_LINUX
Those macros
_IPP_SEQUENTIAL_STATIC || _IPP_SEQUENTIAL_DYNAMIC || _IPP_PARALLEL_STATIC || _IPP_PARALLEL_DYNAMIC
seem to be created by VS, unless I'm misunderstanding them, so they won't be picked up on Linux. -
@d-healey Ah yes, you're right, I thought they are defined in the <ipp.h> header.
I think the closest you can get on Linux is:
- Make sure that the IPP headers / libraries are in a system path that is globally accessible => this might require some environment variable setup, we can add this to the readme build instructions.
- Define
_IPP_SEQUENTIAL_STATIC=1
in your build setup. If you want to compile HISE with IPP on Linux you'll have to put that into the preprocessor definitions (as this "emulates" the OneAPI configuration). If you compile a plugin, then the HISE exporter just needs to add this to the ExtraDefinitionsLinux field - I can rewrite the logic to pick up the setting from theUseIpp
property in the Hise compiler settings, but a manual preprocessor in said field should also do the trick for now.
-
@Christoph-Hart said in Roadmap to HISE 5:
Define _IPP_SEQUENTIAL_STATIC=1 in your build setup.
In the extra preprocessor definitions?
Edit: Yes that seems to work, it might have some unexpected effect though
I'm seeing this in the output
/home/dave/intel/oneapi/ipp/latest/include/ipp/ippdefs.h:107:169: note: ‘#pragma message: defines _IPP_PARALLEL_DYNAMIC/_IPP_PARALLEL_STATIC/_IPP_SEQUENTIAL_DYNAMIC/_IPP_SEQUENTIAL_STATIC do not have any effect in current configuration’ 107 | #pragma message ("defines _IPP_PARALLEL_DYNAMIC/_IPP_PARALLEL_STATIC/_IPP_SEQUENTIAL_DYNAMIC/_IPP_SEQUENTIAL_STATIC do not have any effect in current configuration")
Using USE_IPP=1 doesn't have this.
-
@Christoph-Hart Ok I've got it working with this setup.
In ./bashrc add some environment variables
#IPP export IPPROOT=/home/dave/intel/oneapi/ipp/latest # Set this path to correct folder on your system export CPATH=$IPPROOT/include:$CPATH export LIBRARY_PATH=$IPPROOT/lib:$LIBRARY_PATH export LD_LIBRARY_PATH=$IPPROOT/lib:$LD_LIBRARY_PATH
Compiling HISE:
AddUSE_IPP=1
to Extra Preprocessor Definitions (avoids the issue I mentioned above).
Add-lippcore -lippvm -lipps -lippi -lippcv
to Extra Linker Flags.Compiling Projects:
Check the Use IPP checkbox in project preferences.
This automatically adds the flags and definition to the autogenerated juce projectEdit: It doesn't seem to cause any issues to leave those extra linker flags in even when not using IPP, we could also add the flags for fftw too.
I'll keep working on this tomorrow, I'd like to make it using FFTW3 just as easy.
-
@Christoph-Hart That's what I got from this:
I should mention that I'm rarely here any more, so I may miss your reply. I do still check in from time to time.
-
Edit: It doesn't seem to cause any issues to leave those extra linker flags in even when not using IPP, we could also add the flags for fftw too.
I'm pretty sure the compilation will fail if you haven't IPP installed and trying to link with the libraries. Have you checked this on a vanilla system?
-
@Christoph-Hart said in Roadmap to HISE 5:
Have you checked this on a vanilla system?
I have not, I will test
Update: Yep, good call, you were correct.
-
I just wanted to chime in and say I really appreciate your work, and that the recent additions are awesome. Thank you!
-
I'm just finalising the implementation. I'm using an environment variable for IPP on Linux as discussed, and the USE_IPP flag.
I'm also using an environment variable for FFTW3 on both Linux and Windows. On Windows I also need to pass a path for the fftw header and library which is annoying. I can go into more detail if needed.
Anyway I'll clean up and test and update my PR then we can discuss.
Btw, should that quotation mark in the middle be at the end?
prebuildCommand="%PREBUILD_COMMAND%"%STRIP_SYMBOLS_WIN%/>