[PD] [PD-announce] jit_expr 0.1: Just in time compiled expr/expr~/fexpr~

Alex x37v.alex at gmail.com
Mon Mar 19 00:54:13 CET 2018


Hey Marco,

Oh yeah, I hadn't thought about mac ox SDK version issues.. I wonder if I
can do a build that supports earlier SDK. I'll have to look into it when
I'm at work tomorrow with a mac.

I believe I had your same compile issue when I first built the project on
Mac.
The issue was that there is an old version of the flex header on the system
that gets found before the more up to date version.
I resolved that by setting up the includes with cmake, in the "build"
directory:

cmake -DCMAKE_CXX_FLAGS="-I/usr/local/opt/flex/include/
-I/Applications/Pd-0.48-1.app/Contents/Resources/src/" ..

where my flex 2.6.4 headers were in /usr/local/opt/flex/include/ as
installed by homebrew. and I was building against Pd 0.48-1

Let me know if that works?

-Alex


On Sun, Mar 18, 2018 at 3:38 PM, Marco Matteo Markidis <
mm.markidis at gmail.com> wrote:

> I managed to add llvm but compilation fails.
>
> MMMarkidis:jit_expr dis$ make
>
> [  7%] [FLEX][Scanner] Building scanner with flex 2.6.4
>
> [ 15%] [BISON][Parser] Building parser with bison 3.0.4
>
> Scanning dependencies of target parse
>
> [ 23%] Building CXX object src/parse/CMakeFiles/parse.dir/scanner.cc.o
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:772:8:
> error:
>
>       member reference type 'std::istream *' (aka 'basic_istream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>                         yyin.rdbuf(std::cin.rdbuf());
>
>                         ~~~~^
>
>                             ->
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:779:9:
> error:
>
>       member reference type 'std::ostream *' (aka 'basic_ostream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>                         yyout.rdbuf(std::cout.rdbuf());
>
>                         ~~~~~^
>
>                              ->
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1112:50:
> error:
>
>       member reference type 'std::istream *' (aka 'basic_istream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>                         YY_CURRENT_BUFFER_LVALUE->yy_input_file =
> yyin.rdbuf();
>
>                                                                   ~~~~^
>
>                                                                       ->
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1232:2:
> error:
>
>       cannot initialize a member subobject of type 'std::istream *' (aka
>
>       'basic_istream<char> *') with an rvalue of type
>
>       'basic_streambuf<char_type, traits_type> *'
>
>         yyin(arg_yyin ? arg_yyin->rdbuf() : std::cin.rdbuf()),
>
>         ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1233:2:
> error:
>
>       cannot initialize a member subobject of type 'std::ostream *' (aka
>
>       'basic_ostream<char> *') with an rvalue of type
>
>       'basic_streambuf<char_type, traits_type> *'
>
>         yyout(arg_yyout ? arg_yyout->rdbuf() : std::cout.rdbuf())
>
>         ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1235:2:
> error:
>
>       use of undeclared identifier 'ctor_common'
>
>         ctor_common();
>
>         ^
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1240:14:
> error:
>
>       out-of-line definition of 'parseFlexLexer' does not match any
> declaration
>
>       in 'parseFlexLexer'
>
> yyFlexLexer::yyFlexLexer( std::istream& arg_yyin, std::ostream& arg_yyout
> ):
>
>              ^~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:30:25:
> note:
>
>       expanded from macro 'yyFlexLexer'
>
>     #define yyFlexLexer parseFlexLexer
>
>                         ^~~~~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1231:27:
> note:
>
>       type of 1st parameter of member declaration does not match definition
>
>       ('std::istream *' (aka 'basic_istream<char> *') vs 'std::istream &'
> (aka
>
>       'basic_istream<char> &'))
>
> yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout
> ):
>
>                           ^
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1241:2:
> error:
>
>       cannot initialize a member subobject of type 'std::istream *' (aka
>
>       'basic_istream<char> *') with an rvalue of type
>
>       'basic_streambuf<char_type, traits_type> *'
>
>         yyin(arg_yyin.rdbuf()),
>
>         ^    ~~~~~~~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1242:2:
> error:
>
>       cannot initialize a member subobject of type 'std::ostream *' (aka
>
>       'basic_ostream<char> *') with an rvalue of type
>
>       'basic_streambuf<char_type, traits_type> *'
>
>         yyout(arg_yyout.rdbuf())
>
>         ^     ~~~~~~~~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1244:2:
> error:
>
>       use of undeclared identifier 'ctor_common'
>
>         ctor_common();
>
>         ^
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1249:19:
> error:
>
>       out-of-line definition of 'ctor_common' does not match any
> declaration in
>
>       'parseFlexLexer'
>
> void yyFlexLexer::ctor_common()
>
>                   ^~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1287:19:
> error:
>
>       out-of-line definition of 'switch_streams' does not match any
> declaration
>
>       in 'parseFlexLexer'
>
> void yyFlexLexer::switch_streams( std::istream& new_in, std::ostream&
> new_out )
>
>                   ^~~~~~~~~~~~~~
>
> /Applications/Xcode.app/Contents/Developer/Toolchains/
> XcodeDefault.xctoolchain/usr/include/FlexLexer.h:129:31: note:
>
>       type of 1st parameter of member declaration does not match definition
>
>       ('std::istream *' (aka 'basic_istream<char> *') vs 'std::istream &'
> (aka
>
>       'basic_istream<char> &'))
>
>         virtual void switch_streams( FLEX_STD istream* new_in, FLEX_STD ...
>
>                                      ^
>
> /Applications/Xcode.app/Contents/Developer/Toolchains/
> XcodeDefault.xctoolchain/usr/include/FlexLexer.h:53:22: note:
>
>       expanded from macro 'FLEX_STD'
>
> #    define FLEX_STD std::
>
>                      ^
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1291:41:
> error:
>
>       no viable conversion from 'std::istream' (aka 'basic_istream<char>')
> to
>
>       'std::istream *' (aka 'basic_istream<char> *')
>
>         yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE  ) );
>
>                                                ^~~~~~
>
> /Applications/Xcode.app/Contents/Developer/Toolchains/
> XcodeDefault.xctoolchain/usr/include/FlexLexer.h:121:62: note:
>
>       passing argument to parameter 's' here
>
>         struct yy_buffer_state* yy_create_buffer( FLEX_STD istream* s, int
> size );
>
>                                                                     ^
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1294:7:
> error:
>
>       member reference type 'std::ostream *' (aka 'basic_ostream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>         yyout.rdbuf(new_out.rdbuf());
>
>         ~~~~~^
>
>              ->
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1302:10:
> error:
>
>       assigning to 'std::istream *' (aka 'basic_istream<char> *') from
>
>       incompatible type 'std::istream **' (aka 'basic_istream<char> **');
> remove
>
>       &
>
>                 new_in = &yyin;
>
>                        ^ ~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1306:11:
> error:
>
>       assigning to 'std::ostream *' (aka 'basic_ostream<char> *') from
>
>       incompatible type 'std::ostream **' (aka 'basic_ostream<char> **');
> remove
>
>       &
>
>                 new_out = &yyout;
>
>                         ^ ~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1315:18:
> error:
>
>       out-of-line definition of 'LexerInput' does not match any
> declaration in
>
>       'parseFlexLexer'
>
> int yyFlexLexer::LexerInput( char* buf, int max_size )
>
>                  ^~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1318:11:
> error:
>
>       member reference type 'std::istream *' (aka 'basic_istream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>         if ( yyin.eof() || yyin.fail() )
>
>              ~~~~^
>
>                  ->
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1318:25:
> error:
>
>       member reference type 'std::istream *' (aka 'basic_istream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>         if ( yyin.eof() || yyin.fail() )
>
>                            ~~~~^
>
>                                ->
>
> fatal error: too many errors emitted, stopping now [-ferror-limit=]
>
> 20 errors generated.
>
> make[3]: *** [src/parse/CMakeFiles/parse.dir/scanner.cc.o] Error 1
>
> make[2]: *** [src/parse/CMakeFiles/parse.dir/all] Error 2
>
> make[1]: *** [all] Error 2
>
> make: *** [pd] Error 2
>
> 2018-03-18 22:49 GMT+01:00 Marco Matteo Markidis <mm.markidis at gmail.com>:
>
>> Hi Alex,
>>
>> jit_expr.pd_darwin is in the same folder of help file. Usually it works...
>> On my machine, Deken puts the externals in Pd/externals and in my path I
>> have Pd/externals.
>>
>> Anyway, putting all stuff in verbose I get in console:
>>
>> /Users/dis/Documents/Pd/externals/jit_expr/jit_expr.pd_darwin:
>> dlopen(/Users/dis/Documents/Pd/externals/jit_expr/jit_expr.pd_darwin,
>> 10): Symbol not found: _futimens
>>   Referenced from: /Users/dis/Documents/Pd/extern
>> als/jit_expr/jit_expr.pd_darwin (which was built for Mac OS X 10.13)
>>   Expected in: /usr/lib/libSystem.B.dylib
>>  in /Users/dis/Documents/Pd/externals/jit_expr/jit_expr.pd_darwin
>>
>> So there is futimens function that is not found; indeed looking at
>> symbols present in my /usr/lib/libSystem.B.dylib futimens is not present.
>> So I suspect that passing from OSX 10.10.5 (my os) to OSX 10.13 (the one
>> you use to compile) something changes.
>>
>> Finally, I tried to compile jit_expr. However Cmake 3.10.2 does not find
>> LLVMConfig.cmake or llvm-config.cmake. I have several llvm installed on my
>> machine with macports, but even using find command I do not find manually
>> any of these two files.
>>
>> Best,
>> Marco
>>
>> Ps. I found a LLVM-Config.cmake but I don't know how to add this path or
>> set a LLVM_DIR.
>>
>> 2018-03-18 19:22 GMT+01:00 Alex <x37v.alex at gmail.com>:
>>
>>> Hi Marco,
>>>
>>> HMM, where did you install jit_expr.pd_darwin ? Deken initially sets up
>>> a directory for you if you tell it to, I believe. I think on mac this is in
>>> ~/Documents/Pd/extra ?
>>> Can you tell me what is in your "path" settings, on mac the "file" menu
>>> item might be just called "Pd"? I'm not sure [I'm on a linux machine right
>>> now]
>>> File -> preferences -> path
>>>
>>> -Alex
>>>
>>>
>>> On Sun, Mar 18, 2018 at 10:10 AM, Marco Matteo Markidis <
>>> mm.markidis at gmail.com> wrote:
>>>
>>>> Sorry,
>>>> I forgot to let you know all the important informations.
>>>>
>>>> Pd vanilla 48.1 64 bit, OSX, downloaded from deken binaries and
>>>> sources. help file doesn't work opening from pd browser and directly
>>>> double-clicking.
>>>>
>>>> I tried even copy pd.lib in the same folder of help & pd.darwin, but
>>>> without success.
>>>>
>>>> 2018-03-18 18:04 GMT+01:00 Alex <x37v.alex at gmail.com>:
>>>>
>>>>> Hi Marco,
>>>>>
>>>>> Which version of PD are you running? Which OS? I expect you downloaded
>>>>> jit_expr from deken?
>>>>> Does the jit_expr help file work if you open it in the pd browser?
>>>>> help -> browse -> jit_expr -> double click on the jit_expr-help.pd file?
>>>>>
>>>>> -Alex
>>>>>
>>>>>
>>>>> On Sun, Mar 18, 2018 at 9:49 AM, Marco Matteo Markidis <
>>>>> mm.markidis at gmail.com> wrote:
>>>>>
>>>>>> Dear Alex,
>>>>>>
>>>>>> very happy about this new feature... and incredibly very happy about
>>>>>> hearing just-in-time compiling dsp graph!
>>>>>> Anyway, I get only various jit/expr, jit/expr~, jit/fexpr~ couldn't
>>>>>> create...
>>>>>> I tried to change the [declare -lib] in [declare -path], jit_expr in
>>>>>> jit/expr in declare, looking to have the right 64 bit pd but nothing...
>>>>>>
>>>>>> Best,
>>>>>> Marco
>>>>>>
>>>>>> 2018-03-18 17:34 GMT+01:00 Alex <x37v.alex at gmail.com>:
>>>>>>
>>>>>>> Alexandre,
>>>>>>>
>>>>>>> I don't think it has had enough usage to be called "stable" yet, but
>>>>>>> I could see that happening down the line. In fact, I could see eventually
>>>>>>> JIT compiling the entire DSP graph.. but of course that would be
>>>>>>> significant work. At this point I just need more people to try it out and
>>>>>>> make sure it would be up to it.
>>>>>>>
>>>>>>> -Alex
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Mar 18, 2018 at 9:23 AM, Alexandre Torres Porres <
>>>>>>> porres at gmail.com> wrote:
>>>>>>>
>>>>>>>> if this is stable, wouldn't it be a nice idea to propose it as an
>>>>>>>> update to the expr~ family of objects? since it is basically an optimized
>>>>>>>> clone?
>>>>>>>>
>>>>>>>> cheers
>>>>>>>>
>>>>>>>> 2018-03-18 13:08 GMT-03:00 Alex <x37v.alex at gmail.com>:
>>>>>>>>
>>>>>>>>> jit_expr is a clone of the pure data expr/expr~/fexpr~ objects. It
>>>>>>>>> just-in-time compiles its expressions so they should be much more optimized
>>>>>>>>> than the original. If all works as designed, they should use less CPU than
>>>>>>>>> the equivalent vanilla, non-expr, patching and have a significant CPU
>>>>>>>>> advantage over the original expr objects.
>>>>>>>>>
>>>>>>>>> I've put the external, compiled for 64-bit Mac-OS and 64-bit
>>>>>>>>> Linux, up on deken: in pd, go to help menu, find externals, search for
>>>>>>>>> "jit_expr".
>>>>>>>>>
>>>>>>>>> After installing the external you should be able to change any of
>>>>>>>>> your expr family of objects to just in time compile by loading the library,
>>>>>>>>> [declare -lib jit_expr], and then prefixing the object name with "jit/",
>>>>>>>>> for example [jit/fexpr~ $x1[0] + $y1[-1]].
>>>>>>>>>
>>>>>>>>> I believe they are feature complete with the originals but I'd
>>>>>>>>> love to know if there is anything that I'm missing or any bugs that you
>>>>>>>>> discover.
>>>>>>>>> I'm not exactly sure how to profile pure data patches. If anyone
>>>>>>>>> has a good approach or original expr~/fexpr~ patches that use a lot of CPU
>>>>>>>>> you can share, let me know.
>>>>>>>>>
>>>>>>>>> Compiling in the object takes a little bit of time, so the initial
>>>>>>>>> instantiation of the object/expression will be a bit slower than the
>>>>>>>>> original, FYI.
>>>>>>>>>
>>>>>>>>> Please report any issues here:
>>>>>>>>> https://github.com/x37v/jit-expr/issues
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> BTW, if you're curious to see the llvm assembly produced by your
>>>>>>>>> expression, send the |print( message into the left most inlet of your
>>>>>>>>> object then check out the pd console.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I would love help building Windows and 32-bit Linux versions of
>>>>>>>>> the externals. I'm guessing we could also do raspi/arm builds but we'd need
>>>>>>>>> some changes to the source code as it uses llvm and explicitly generates
>>>>>>>>> code for x86 right now.
>>>>>>>>>
>>>>>>>>> The source code can be found in the git repo:
>>>>>>>>> https://github.com/x37v/jit-expr
>>>>>>>>>
>>>>>>>>> -Alex Norman
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Pd-announce mailing list
>>>>>>>>> Pd-announce at lists.iem.at
>>>>>>>>> https://lists.puredata.info/listinfo/pd-announce
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Pd-list at lists.iem.at mailing list
>>>>>>>>> UNSUBSCRIBE and account-management ->
>>>>>>>>> https://lists.puredata.info/listinfo/pd-list
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Pd-list at lists.iem.at mailing list
>>>>>>>> UNSUBSCRIBE and account-management ->
>>>>>>>> https://lists.puredata.info/listinfo/pd-list
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Pd-list at lists.iem.at mailing list
>>>>>>> UNSUBSCRIBE and account-management -> https://lists.puredata.info/li
>>>>>>> stinfo/pd-list
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Ho cambiato l'indirizzo email in mm.markidis at autistici.org . Se non
>>>>>> è un problema, scrivimi a questo nuovo indirizzo email.
>>>>>>
>>>>>> I changed my email address in mm.markidis at autistici.org . If it is
>>>>>> ok for you, please write me to this new email address.
>>>>>>
>>>>>> _______________________________________________
>>>>>> Pd-list at lists.iem.at mailing list
>>>>>> UNSUBSCRIBE and account-management -> https://lists.puredata.info/li
>>>>>> stinfo/pd-list
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Ho cambiato l'indirizzo email in mm.markidis at autistici.org . Se non è
>>>> un problema, scrivimi a questo nuovo indirizzo email.
>>>>
>>>> I changed my email address in mm.markidis at autistici.org . If it is ok
>>>> for you, please write me to this new email address.
>>>>
>>>> _______________________________________________
>>>> Pd-list at lists.iem.at mailing list
>>>> UNSUBSCRIBE and account-management -> https://lists.puredata.info/li
>>>> stinfo/pd-list
>>>>
>>>>
>>>
>>
>>
>> --
>> Ho cambiato l'indirizzo email in mm.markidis at autistici.org . Se non è un
>> problema, scrivimi a questo nuovo indirizzo email.
>>
>> I changed my email address in mm.markidis at autistici.org . If it is ok
>> for you, please write me to this new email address.
>>
>
>
>
> --
> Ho cambiato l'indirizzo email in mm.markidis at autistici.org . Se non è un
> problema, scrivimi a questo nuovo indirizzo email.
>
> I changed my email address in mm.markidis at autistici.org . If it is ok for
> you, please write me to this new email address.
>
> _______________________________________________
> Pd-list at lists.iem.at mailing list
> UNSUBSCRIBE and account-management -> https://lists.puredata.info/
> listinfo/pd-list
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20180318/0a2e2f57/attachment-0001.html>


More information about the Pd-list mailing list