DSP compiling error on WIN, works fine on MAC
-
@d-healey approximately a billion times today ;)
im trying on another pc, there it says it cant find "faust/export.h"
even though faust is enabled and properly installedsigh
-
@Morphoice Does the none-faust version build?
-
@d-healey HISE built fine on the new PC, but the DSP compilation is the problem still now
-
@Morphoice said in DSP compiling error on WIN, works fine on MAC:
HISE built fine on the new PC,
Without faust?
-
@d-healey I built it with faust, I have no use for HISE without faust, it says faust enabled in HISE. just some damn path seems to be set wrong... I don't know where to change them, the include/faust/export.h is there just probably not where it expects to find it
-
@d-healey yeah I set the faust path in settings, now I get all those template class errors again I posted this afternoon....
-
@d-healey so yeah it's basically the same as with the virtual machine this afternoon, soon as I try compiling the DSP network on Windows, the project is fucked, and doesn't work on MAC anymore either...
pc says
> Create files > Sorting include dependencies > Creating C++ file for Network DspNetwork > Copying third party files > Compiling dll plugin Re-saving file: C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\AutogeneratedProject.jucer Finished saving: Visual Studio 2022 Finished saving: Xcode (macOS) Finished saving: Linux Makefile Compiling 64bit HeatBurn ... MSBuild version 17.13.19+0d9f5a35a for .NET Framework Main.cpp RNBO.cpp include_hi_dsp_library_01.cpp include_hi_dsp_library_02.cpp include_hi_tools_01.cpp include_hi_tools_02.cpp include_hi_tools_03.cpp C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\ThirdParty\src\Disintegrate.cpp(17,6): warning C4305: "=": Verkrzung von "double" in "float" [C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Builds\VisualStudio2022\HeatBurn_DynamicLibrary.vcxproj] (compiling source file '../../Source/Main.cpp') !C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(20,66): error C3203: "Disintegrate": nicht spezialisiertes Klasse Vorlage kann nicht als Vorlage-Argument fr den Vorlage-Parameter "T" verwendet werden, ein echter Typ wurde erwartet. [C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Builds\VisualStudio2022\HeatBurn_DynamicLibrary.vcxproj] (compiling source file '../../Source/Main.cpp') !C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(24,67): error C3203: "Disintegrate": nicht spezialisiertes Klasse Vorlage kann nicht als Vorlage-Argument fr den Vorlage-Parameter "T" verwendet werden, ein echter Typ wurde erwartet. [C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Builds\VisualStudio2022\HeatBurn_DynamicLibrary.vcxproj] (compiling source file '../../Source/Main.cpp') !C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(28,67): error C3203: "Disintegrate": nicht spezialisiertes Klasse Vorlage kann nicht als Vorlage-Argument fr den Vorlage-Parameter "T" verwendet werden, ein echter Typ wurde erwartet. [C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Builds\VisualStudio2022\HeatBurn_DynamicLibrary.vcxproj] (compiling source file '../../Source/Main.cpp') !C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(20,57): error C3203: "Disintegrate": nicht spezialisiertes Klasse Vorlage kann nicht als Vorlage-Argument fr den Vorlage-Parameter "T" verwendet werden, ein echter Typ wurde erwartet. [C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Builds\VisualStudio2022\HeatBurn_DynamicLibrary.vcxproj] (compiling source file '../../Source/Main.cpp') C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(20,57): der Vorlageninstanziierungskontext (der lteste zuerst) ist C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(33,47): Siehe Verweis auf die gerade kompilierte Alias Vorlage-Instanziierung "DspNetwork_impl::smoothed_parameter_t<NV>". !C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(24,58): error C3203: "Disintegrate": nicht spezialisiertes Klasse Vorlage kann nicht als Vorlage-Argument fr den Vorlage-Parameter "T" verwendet werden, ein echter Typ wurde erwartet. [C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Builds\VisualStudio2022\HeatBurn_DynamicLibrary.vcxproj] (compiling source file '../../Source/Main.cpp') C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(24,58): der Vorlageninstanziierungskontext (der lteste zuerst) ist C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(34,34): Siehe Verweis auf die gerade kompilierte Alias Vorlage-Instanziierung "DspNetwork_impl::smoothed_parameter1_t<NV>". !C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(28,58): error C3203: "Disintegrate": nicht spezialisiertes Klasse Vorlage kann nicht als Vorlage-Argument fr den Vorlage-Parameter "T" verwendet werden, ein echter Typ wurde erwartet. [C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Builds\VisualStudio2022\HeatBurn_DynamicLibrary.vcxproj] (compiling source file '../../Source/Main.cpp') C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(28,58): der Vorlageninstanziierungskontext (der lteste zuerst) ist C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(35,34): Siehe Verweis auf die gerade kompilierte Alias Vorlage-Instanziierung "DspNetwork_impl::smoothed_parameter2_t<NV>". !C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(76,49): error C3203: "Disintegrate": nicht spezialisiertes Klasse Vorlage kann nicht als Vorlage-Argument fr den Vorlage-Parameter "Processors" verwendet werden, ein echter Typ wurde erwartet. [C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Builds\VisualStudio2022\HeatBurn_DynamicLibrary.vcxproj] (compiling source file '../../Source/Main.cpp') !C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(76,40): error C3203: "Disintegrate": nicht spezialisiertes Klasse Vorlage kann nicht als Vorlage-Argument fr den Vorlage-Parameter "Processors" verwendet werden, ein echter Typ wurde erwartet. [C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Builds\VisualStudio2022\HeatBurn_DynamicLibrary.vcxproj] (compiling source file '../../Source/Main.cpp') C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(76,40): der Vorlageninstanziierungskontext (der lteste zuerst) ist C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(80,26): beim Kompilieren der Klassenvorlage "DspNetwork_impl::instance" C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Source\DspNetwork.h(80,60): Siehe Verweis auf die gerade kompilierte Alias Vorlage-Instanziierung "DspNetwork_impl::DspNetwork_t_<NV>". C:\HISE\hi_tools\hi_standalone_components\SliderPack.cpp(1389,7): warning C4189: "idx": Lokale Variable ist initialisiert aber nicht referenziert [C:\Users\admin\Dropbox\HISE\HeatBurn\DspNetworks\Binaries\Builds\VisualStudio2022\HeatBurn_DynamicLibrary.vcxproj] (compiling source file '../../JuceLibraryCode/include_hi_tools_01.cpp') include_juce_audio_basics.cpp include_juce_audio_formats.cpp include_juce_core.cpp include_juce_data_structures.cpp include_juce_dsp.cpp include_juce_events.cpp include_juce_graphics.cpp
mac simply goes
> Create files > Sorting include dependencies > Creating C++ file for Network DspNetwork > Copying third party files > Compiling dll plugin Re-saving file: /Volumes/HISE/HeatBurn/DspNetworks/Binaries/AutogeneratedProject.jucer Finished saving: Visual Studio 2017 Finished saving: Xcode (macOS) Finished saving: Linux Makefile Compiling HeatBurn ... ** BUILD FAILED ** CompileC /Volumes/HISE/HeatBurn/DspNetworks/Binaries/Builds/MacOSX/build/HeatBurn.build/Release/HeatBurn\ -\ Dynamic\ Library.build/Objects-normal/x86_64/Main.o /Volumes/HISE/HeatBurn/DspNetworks/Binaries/Source/Main.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'HeatBurn - Dynamic Library' from project 'HeatBurn') (1 failure)
-
@Morphoice About compiling DSPs on both OS, I found that a perfect cleaning is key, each time... no source folder nor build folder should be git synced between machines. And even on the same machine, I often end up emptying everything to recompile new versions after a modification.
The folders I clean are:
- general
binaries
dspNetworks/binaries
dspNetworks/ThirdParty
- the entire
AdditionalSourceCode
So be sure not to track those folders between OS. Maybe it shouldn't be an issue, I don't know, but that is what I found after days of trial and errors and now I can safely compile on both mac and win if I respect this procedure.
On top of that I often need to disable the networks
AllowCompilation
flags, re-open the project,re-enable
the flags, and only after all of those steps I can start the compilation process. This makes simple modifications, well, not so simple... - general
-
@Morphoice oh and when you do this, the networks still expect to load the old faust compiled node when there are such be, because the XML has been saved in that state. So this has to be replace with the interpreted node or errors will invite to the party...
-
@ustk said in DSP compiling error on WIN, works fine on MAC:
dspNetworks/ThirdParty
but how am I supposed to compile my third party nodes on another OS if I clear them out of the thirdparty folder?
-
@ustk it's probably not a general problem but one specific to the airwindows.h I'm using.... MSVC seems to be more strict about something in the Airwindows.h wrapper which CLANG on mac doesnt bother about.... I know nothing about template resolution so iI'm homping someone familiar with C++ can help...
here'S the file again
#pragma once #include <JuceHeader.h> #include <math.h> #include <set> #include <string> #define __audioeffect__ #define VstInt32 int32_t #define AudioEffect ::airwindows::AirWindowsBase #define AudioEffectX ::airwindows::AirWindowsBase #define audioMasterCallback ::airwindows::SampleRateCallback* #define VstPlugCategory int #define kPlugCategEffect 1 #define kVstMaxProgNameLen 64 #define kVstMaxParamStrLen 64 #define kVstMaxProductStrLen 64 #define kVstMaxVendorStrLen 64 #define vst_strncpy strncpy namespace airwindows { inline auto float2string(float f, char* text, int len) -> void { int decimals = 0; if (std::fabs(f) >= 10.0) { decimals = 1; } else if (std::fabs(f) > 1.0) { decimals = 2; } else { decimals = 3; } juce::String str(f, decimals); str.copyToUTF8(text, (size_t)len); } inline auto int2string(float i, char* text, int len) -> void { juce::String str(i); str.copyToUTF8(text, (size_t)len); } inline auto dB2string(float value, char* text, int maxLen) -> void { if (value <= 0) { vst_strncpy(text, "-oo", (size_t)maxLen); } else { float2string((float)(20. * log10(value)), text, maxLen); } } struct SampleRateCallback { SampleRateCallback() = default; auto getSampleRate() const noexcept -> double { return sampleRate; } double sampleRate{0.0}; }; class AirWindowsBase { public: AirWindowsBase(SampleRateCallback* c, int prog, int param) : numPrograms(prog), numParams(param), callback(c) {} int getNumInputs() { return numInputs; } int getNumOutputs() { return numOutputs; } int getNumParameters() { return numParams; } virtual bool getEffectName(char* name) = 0; virtual VstPlugCategory getPlugCategory() = 0; virtual bool getProductString(char* text) = 0; virtual bool getVendorString(char* text) = 0; virtual VstInt32 getVendorVersion() = 0; virtual void processReplacing(float** inputs, float** outputs, VstInt32 sampleFrames) = 0; virtual void processDoubleReplacing(double** inputs, double** outputs, VstInt32 sampleFrames) = 0; virtual void getProgramName(char* name) = 0; virtual void setProgramName(char* name) = 0; virtual VstInt32 getChunk(void** data, bool isPreset) { juce::ignoreUnused(data, isPreset); return 0; }; virtual VstInt32 setChunk(void* data, VstInt32 byteSize, bool isPreset) { juce::ignoreUnused(data, byteSize, isPreset); return 0; }; virtual float getParameter(VstInt32 index) { juce::ignoreUnused(index); return 0; } virtual void setParameter(VstInt32 index, float value) { juce::ignoreUnused(index, value); } virtual void getParameterLabel(VstInt32 index, char* text) { juce::ignoreUnused(index, text); } virtual void getParameterName(VstInt32 index, char* text) { juce::ignoreUnused(index, text); } virtual void getParameterDisplay(VstInt32 index, char* text) { juce::ignoreUnused(index, text); } virtual VstInt32 canDo(char* text) = 0; protected: void setNumInputs(int numIn) { numInputs = numIn; } void setNumOutputs(int numOut) { numOutputs = numOut; } void setUniqueID(int) {} void canProcessReplacing() {} void canDoubleReplacing() {} void programsAreChunks(bool) {} int numInputs = 0, numOutputs = 0, numPrograms = 0, numParams = 0; SampleRateCallback* callback; double getSampleRate() { return callback->getSampleRate(); } }; } // namespace airwindows #define DECLARE_AIRWINDOWS_NODE(ClassName, Namespace) template <int NV> struct ClassName final : public data::base { SNEX_NODE(ClassName); struct MetadataClass { SN_NODE_ID(#ClassName); }; static constexpr bool isModNode() { return false; }; static constexpr bool isPolyphonic() { return NV > 1; }; static constexpr bool hasTail() { return false; }; static constexpr bool isSuspendedOnSilence() { return false; }; static constexpr int getFixChannelAmount() { return 2; }; static constexpr int NumTables = 0; static constexpr int NumSliderPacks = 0; static constexpr int NumAudioFiles = 0; static constexpr int NumFilters = 0; static constexpr int NumDisplayBuffers = 0; void prepare(PrepareSpecs specs) { _sampleRateSource.sampleRate = specs.sampleRate; _tmp.setSize(specs.numChannels, specs.blockSize); } void reset() {} void handleHiseEvent(HiseEvent& e) {} template <typename T> void process(T& data) { auto buffer = juce::AudioBuffer<float>(data.getRawChannelPointers(), data.getNumChannels(), data.getNumSamples()); processInternal(buffer); } template <typename T> void processFrame(T& data) { auto** ptr = (float**)alloca(data.size() * sizeof(float*)); for (int i = 0; i < data.size(); i++) { ptr[i] = data.begin() + i; } auto buffer = juce::AudioBuffer<float>(ptr, data.size(), 1); processInternal(buffer); } auto processInternal(juce::AudioBuffer<float>& buffer) -> void { _tmp.makeCopyOf(buffer); _engine.processReplacing(_tmp.getArrayOfWritePointers(), buffer.getArrayOfWritePointers(), buffer.getNumSamples()); } int handleModulation(double& value) { return 0; } void setExternalData(ExternalData const& data, int index) {} template <int P> void setParameter(double v) { _engine.setParameter(P, static_cast<float>(v)); } void createParameters(ParameterDataList& data) { for (auto i{0}; i < airwindows::Namespace::kNumParameters; ++i) { char name[kVstMaxParamStrLen]{}; _engine.getParameterName(i, name); auto parameter = parameter::data(name, {0.0, 1.0}); registerCallback(parameter, i); parameter.setDefaultValue(_engine.getParameter(i)); data.add(std::move(parameter)); } } private : template <typename Param> auto registerCallback(Param& parameter, int i) -> void { switch (i) { case 0: registerCallback<0>(parameter); break; case 1: registerCallback<1>(parameter); break; case 2: registerCallback<2>(parameter); break; case 3: registerCallback<3>(parameter); break; case 4: registerCallback<4>(parameter); break; case 5: registerCallback<5>(parameter); break; case 6: registerCallback<6>(parameter); break; case 7: registerCallback<7>(parameter); break; case 8: registerCallback<8>(parameter); break; case 9: registerCallback<9>(parameter); break; case 10: registerCallback<10>(parameter); break; case 11: registerCallback<11>(parameter); break; case 12: registerCallback<12>(parameter); break; case 13: registerCallback<13>(parameter); break; case 14: registerCallback<14>(parameter); break; case 15: registerCallback<15>(parameter); break; case 16: registerCallback<16>(parameter); break; case 17: registerCallback<17>(parameter); break; case 18: registerCallback<18>(parameter); break; case 19: registerCallback<19>(parameter); break; case 20: registerCallback<20>(parameter); break; case 21: registerCallback<21>(parameter); break; case 22: registerCallback<22>(parameter); break; case 23: registerCallback<23>(parameter); break; case 24: registerCallback<24>(parameter); break; default: break; } jassert(false); } airwindows::SampleRateCallback _sampleRateSource{}; airwindows::Namespace::ClassName _engine{&_sampleRateSource}; juce::AudioBuffer<float> _tmp; }
-
@Morphoice said in DSP compiling error on WIN, works fine on MAC:
but how am I supposed to compile my third party nodes on another OS if I clear them out of the thirdparty folder?
I should have said the files created by Hise in there, not the actual 3rd party files you manually added in
-
@ustk ah ok I see. But the problem here is in the C++ code, something the windows compiler takes more strict than the mac, so deleting random stuff wouldnt solve it, I need someone to fix the C++ above
-
@Morphoice so are you trying to compile your fx/HISE when its on a virtual machine external drive?
I have found that Faust based nodes WONT build on anything other than a real real real drive inside the machine - external drives are a no no.
-
@Lindon again, it's a problem with the c++ code I posted above. I am compiling on either a virtual machine, external drive and a dedicated machine with an internal drive which has the exact same problem whereas all other plugins that don't use that third party node compile fine on either of the systems. so it's for sure not a problem with an external drive and sorry to say so but if we live in a world where men can be women, people can travel to space and doctors can cure aids, an external properly mounted drive sure as hell should not break a compiler. y'all conjuring up some spiritual paranormal esoteric reasons why stuff doesn't work instead of having a look at the real problem.
MSVC (Microsoft Visual C++) which is the compiler on Windows/PC handles things more strict than CLANG (the C++ compiler on MAC). Whoever made that C++ did not account for that and probably worked on mac or linux. I posted the error codes, I don't know a lot of C++ though so if just someone who is pro at C++ could have a look and point me to a solution, I'm sure it's an easy one. Please no more suggestions to arrange my computers according to the teachings of Feng Shui, y'all driving me nuts ;) No offence, though, I love you all. It's just not the solution to the problem, so can we please get the point of that and stop trying random stuff ;)
-
@Morphoice well... let me get the hell out of your way then.
-
@Morphoice Usually compilers have flags you can set to control strictness. Maybe ask Chat GPT if such flags are available on Windows
-
@Lindon Please no hard feelings man, you know I appreciate your help. An external drive is just not the problem here, I've already tracked it down as good as I can
-
Yes, looks like it's related to
Airwindows.h
.Maybe @oskarsh has an idea about this?
-
@Morphoice well I have a project that uses a single AirWindows scriptNode (its Air2) and it compiles fine on windows.
so the Additional Source code folder looks like this:
the nodes folder looks like this:
the Air2.h file in here looks like this:
// This just references the real file #include "../../DspNetworks/ThirdParty/Air2.h"
The DspNetworks/ThirdParty folder looks like this:
Where the Air2.h file looks like this:
#pragma once #include <JuceHeader.h> #include "../../AdditionalSourceCode/AirWindows.h" namespace airwindows::air2_ns { JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE("-Wmultichar") #include "../../External/airwindows/plugins/LinuxVST/src/Air2/Air2.h" #include "../../External/airwindows/plugins/LinuxVST/src/Air2/Air2.cpp" #include "../../External/airwindows/plugins/LinuxVST/src/Air2/Air2Proc.cpp" JUCE_END_IGNORE_WARNINGS_GCC_LIKE } // namespace airwindows::air2_ns namespace project { using namespace juce; using namespace hise; using namespace scriptnode; DECLARE_AIRWINDOWS_NODE(Air2, air2_ns); } // namespace project
There is an External folder at the root of my project with these included files in there...
Im using VS2022 - I have not changed any flags in there...