grame-cncm / faust

Functional programming language for signal processing and sound synthesis
http://faust.grame.fr
Other
2.58k stars 322 forks source link

llvm7 compatibility #220

Closed dvzrv closed 6 years ago

dvzrv commented 6 years ago

Arch Linux is currently rebuilding against llvm 7.0.0. I was wondering, what the status is on building faust with it.

I tried to patch the 2.5.23 code base but it's pretty messy due to the many defined() checks towards every major llvm version release on nearly all includes.

I could use some help! If this is already fixed in the current HEAD, maybe cut a new release?

sletz commented 6 years ago

I did not they test on OS X yet. Your should test against master-dev first.

dvzrv commented 6 years ago

@sletz I get that I should, but currently I'm packaging 2.5.23. I'll have to fix that version first, so we can move on to llvm 7.0.0.

I guess the changes won't be much different. This is where I am so far with a patch, but still failing build (in attachment).

llvm7.patch.txt faust-2.5.23-llvm7.txt

Any help would be greatly appreciated!

sletz commented 6 years ago

Preparing a patch or better a Pull Request for master-dev branch would really help. Thanks.

sletz commented 6 years ago

Then we can possibly make a new release...

sletz commented 6 years ago

I just did the fix for master-dev here : https://github.com/grame-cncm/faust/commit/f5b00bf5caddfe5ed96ca7548e40504e7d09f4ac

dvzrv commented 6 years ago

@sletz excellent. thanks! are you able to give an ETA on a new release? any outstanding issues?

sletz commented 6 years ago

Not sure.... If not too difficult, maybe patching the 2.5.23 code base will be the fastest way...

dvzrv commented 6 years ago

@sletz, that's what I did for now. Thanks for the help though! :)

magnetophon commented 4 years ago

When compiling faust 2.20.2 with LLVM 7.1.0, I get:

[ 97%] Building CXX object CMakeFiles/dynamiclib.dir/build/source/compiler/generator/llvm/llvm_code_container.cpp.o
In file included from /build/source/compiler/../architecture/faust/gui/JSONUIDecoder.h:35,
                 from /build/source/compiler/generator/llvm/llvm_dsp_aux.hh:32,
                 from /build/source/compiler/generator/llvm/llvm_dynamic_dsp_aux.hh:25,
                 from /build/source/compiler/generator/llvm/llvm_code_container.cpp:31:
/build/source/compiler/../architecture/faust/gui/CGlue.h: In function 'void buildUIGlue(UIGlue*, UI*, bool)':
/build/source/compiler/../architecture/faust/gui/CGlue.h:284:101: warning: cast between incompatible function types from 'void (*)(void*, const char*, double*, double, double, double, double)' to 'addVerticalSliderFun' {aka 'void (*)(void*, const char*, float*, float, float, float, float)'} [-Wcast-function-type]
         glue->addVerticalSlider = reinterpret_cast<addVerticalSliderFun>(addVerticalSliderGlueDouble);
                                                                                                     ^
/build/source/compiler/../architecture/faust/gui/CGlue.h:285:107: warning: cast between incompatible function types from 'void (*)(void*, const char*, double*, double, double, double, double)' to 'addHorizontalSliderFun' {aka 'void (*)(void*, const char*, float*, float, float, float, float)'} [-Wcast-function-type]
         glue->addHorizontalSlider = reinterpret_cast<addHorizontalSliderFun>(addHorizontalSliderGlueDouble);
                                                                                                           ^
/build/source/compiler/../architecture/faust/gui/CGlue.h:286:83: warning: cast between incompatible function types from 'void (*)(void*, const char*, double*, double, double, double, double)' to 'addNumEntryFun' {aka 'void (*)(void*, const char*, float*, float, float, float, float)'} [-Wcast-function-type]
         glue->addNumEntry = reinterpret_cast<addNumEntryFun>(addNumEntryGlueDouble);
                                                                                   ^
/build/source/compiler/../architecture/faust/gui/CGlue.h:287:113: warning: cast between incompatible function types from 'void (*)(void*, const char*, double*, double, double)' to 'addHorizontalBargraphFun' {aka 'void (*)(void*, const char*, float*, float, float)'} [-Wcast-function-type]
         glue->addHorizontalBargraph = reinterpret_cast<addHorizontalBargraphFun>(addHorizontalBargraphGlueDouble);
                                                                                                                 ^
/build/source/compiler/../architecture/faust/gui/CGlue.h:288:107: warning: cast between incompatible function types from 'void (*)(void*, const char*, double*, double, double)' to 'addVerticalBargraphFun' {aka 'void (*)(void*, const char*, float*, float, float)'} [-Wcast-function-type]
         glue->addVerticalBargraph = reinterpret_cast<addVerticalBargraphFun>(addVerticalBargraphGlueDouble);
                                                                                                           ^
/build/source/compiler/generator/llvm/llvm_code_container.cpp: In constructor 'LLVMCodeContainer::LLVMCodeContainer(const string&, int, int)':
/build/source/compiler/generator/llvm/llvm_code_container.cpp:77:9: error: 'class llvm::FastMathFlags' has no member named 'setUnsafeAlgebra'
     FMF.setUnsafeAlgebra();
         ^~~~~~~~~~~~~~~~
/build/source/compiler/generator/llvm/llvm_code_container.cpp: In constructor 'LLVMCodeContainer::LLVMCodeContainer(const string&, int, int, llvm::Module*, llvm::LLVMContext*)':
/build/source/compiler/generator/llvm/llvm_code_container.cpp:97:9: error: 'class llvm::FastMathFlags' has no member named 'setUnsafeAlgebra'
     FMF.setUnsafeAlgebra();
         ^~~~~~~~~~~~~~~~
[ 98%] Building CXX object CMakeFiles/dynamiclib.dir/build/source/compiler/generator/llvm/llvm_dsp_aux.cpp.o
make[2]: *** [CMakeFiles/dynamiclib.dir/build.make:1714: CMakeFiles/dynamiclib.dir/build/source/compiler/generator/llvm/llvm_code_container.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from /build/source/compiler/generator/llvm/llvm_dsp_aux.cpp:36:
/build/source/compiler/../architecture/faust/gui/CGlue.h: In function 'void buildUIGlue(UIGlue*, UI*, bool)':
/build/source/compiler/../architecture/faust/gui/CGlue.h:284:101: warning: cast between incompatible function types from 'void (*)(void*, const char*, double*, double, double, double, double)' to 'addVerticalSliderFun' {aka 'void (*)(void*, const char*, float*, float, float, float, float)'} [-Wcast-function-type]
         glue->addVerticalSlider = reinterpret_cast<addVerticalSliderFun>(addVerticalSliderGlueDouble);
                                                                                                     ^
/build/source/compiler/../architecture/faust/gui/CGlue.h:285:107: warning: cast between incompatible function types from 'void (*)(void*, const char*, double*, double, double, double, double)' to 'addHorizontalSliderFun' {aka 'void (*)(void*, const char*, float*, float, float, float, float)'} [-Wcast-function-type]
         glue->addHorizontalSlider = reinterpret_cast<addHorizontalSliderFun>(addHorizontalSliderGlueDouble);
                                                                                                           ^
/build/source/compiler/../architecture/faust/gui/CGlue.h:286:83: warning: cast between incompatible function types from 'void (*)(void*, const char*, double*, double, double, double, double)' to 'addNumEntryFun' {aka 'void (*)(void*, const char*, float*, float, float, float, float)'} [-Wcast-function-type]
         glue->addNumEntry = reinterpret_cast<addNumEntryFun>(addNumEntryGlueDouble);
                                                                                   ^
/build/source/compiler/../architecture/faust/gui/CGlue.h:287:113: warning: cast between incompatible function types from 'void (*)(void*, const char*, double*, double, double)' to 'addHorizontalBargraphFun' {aka 'void (*)(void*, const char*, float*, float, float)'} [-Wcast-function-type]
         glue->addHorizontalBargraph = reinterpret_cast<addHorizontalBargraphFun>(addHorizontalBargraphGlueDouble);
                                                                                                                 ^
/build/source/compiler/../architecture/faust/gui/CGlue.h:288:107: warning: cast between incompatible function types from 'void (*)(void*, const char*, double*, double, double)' to 'addVerticalBargraphFun' {aka 'void (*)(void*, const char*, float*, float, float)'} [-Wcast-function-type]
         glue->addVerticalBargraph = reinterpret_cast<addVerticalBargraphFun>(addVerticalBargraphGlueDouble);
                                                                                                           ^
make[1]: *** [CMakeFiles/Makefile2:115: CMakeFiles/dynamiclib.dir/all] Error 2
make: *** [Makefile:152: all] Error 2
builder for '/nix/store/l06pwmpd4yj48iwz4nhmxv2n6cgbzknd-faust-2.20.2.drv' failed with exit code 2

LLVM 5 and 6 work fine.

sletz commented 4 years ago

Is is a real problem for you if LLVM 5 and 6 still work? In the meantime we are almost at LLVM 10.0

magnetophon commented 4 years ago

Ah, no. 7 is the default on NixOS and I thought it was the latest. Therefore I was afraid all future versions would have this bug too.

I just tested, turns out 8 and 9 work as well, so all good! Thanks for your quick replies everytime!