Closed emviveros closed 3 years ago
Did you look how to compile Camomile before trying to include externals?
Thanks Pierre for your response..
I was able to compile Camomile on command line following the guide in the readme page of the repository and works fine!
And you still have the using the XCode graphical interface or is it okay?
I don't know if I understand you all.. But let's go...
If you ask for the relevance of using Xcode Graphical interface for me, I really prefer an automated solution without using Xcode GUI. The compilation with 3 lines are the best. (I think this is the wrong answer)
Maybe you need to know my experience with compilating things... My ability with C and C++ code is coding for Arduino stuff, and compiling pd stuff with lib-pd-builder and crosscompile lib-pd-builder stuff from linux to arm, win and linux archs. So very much the work of setting the compilation process is done. (maybe know these helps to help)
I tried to compile again Camomile and Camomile with Else in the following ways:
Camomile (vanilla)
Camomile.xcworkspace
and build it. It returns the same error above when trying to compile Camomile with Else external:
Camomile with Else
cd Dependencies/LibPdBuild/MacOSX && cmake .. -GXcode && cd ../../..
xcodebuild -workspace Camomile.xcworkspace -scheme Camomile-libpd -configuration Release
and build Failed:
Sorry there was the word "problem" missing in my previous comment.
The first line with cmake prépare the libpd project, you should always do that otherwise it won't compile libpd. And generating/compiling the libpd project fixes the problem related to the missing libpd at link. The second line compiles libpd and Camomile but is equivalent to the compile action cmb+b on the Xcode app. Both use the Xcode build system. So even if you wants to use Xcode app directly (without the command line), you still have to generate the libpd project using cmake before.
The new problem with the duplicate symbol must be related to the else library. I guess you might have declared the method several times
Cool... I'm trying to compile first in command line way... In Xcode GUI I'm stucked in the same error, even with cloned libpd from github. On the other hand using command line I solved some duplicated global variables in else code and now I have a new error:
Ld /Users/esteban/src/camomileTests/Camomile/Plugins/Camomile.vst3/Contents/MacOS/Camomile normal x86_64
cd /Users/esteban/src/camomileTests/Camomile/Instrument/Builds/MacOSX
export MACOSX_DEPLOYMENT_TARGET=10.9
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -bundle -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -L/Users/esteban/src/camomileTests/Camomile/Plugins -L../../../Dependencies/LibPdBuild -F/Users/esteban/src/camomileTests/Camomile/Plugins -filelist /Users/esteban/Library/Developer/Xcode/DerivedData/Camomile-ebvfxpubvslcoycrkocchrdssbpr/Build/Intermediates.noindex/Camomile.build/Release/Camomile\ -\ VST3.build/Objects-normal/x86_64/Camomile.LinkFileList -mmacosx-version-min=10.9 -dead_strip -stdlib=libc++ -bundle -lCamomile -lpd-multi -framework Accelerate -framework AudioToolbox -framework Carbon -framework Cocoa -framework CoreAudio -framework CoreMIDI -framework IOKit -framework QuartzCore -framework WebKit -Xlinker -dependency_info -Xlinker /Users/esteban/Library/Developer/Xcode/DerivedData/Camomile-ebvfxpubvslcoycrkocchrdssbpr/Build/Intermediates.noindex/Camomile.build/Release/Camomile\ -\ VST3.build/Objects-normal/x86_64/Camomile_dependency_info.dat -o /Users/esteban/src/camomileTests/Camomile/Plugins/Camomile.vst3/Contents/MacOS/Camomile
Undefined symbols for architecture x86_64:
"_s__X", referenced from:
_messbox_save in lto.o
"_s_pointer", referenced from:
_hot_pointer in lto.o
_hot_list in lto.o
_hot_proxy_pointer in lto.o
_hot_proxy_list in lto.o
_hot_proxy_set in lto.o
_hot_proxy_doanything in lto.o
_hot_arm in lto.o
...
"_alloca", referenced from:
_float2bits_split in lto.o
_float2bits_bang in lto.o
"_s_symbol", referenced from:
_dir_new in lto.o
_format_new in lto.o
_hot_symbol in lto.o
_hot_proxy_symbol in lto.o
_hot_proxy_doanything in lto.o
_hot_arm in lto.o
_routetype_new in lto.o
...
"_s_list", referenced from:
_args_bang in lto.o
_bicoeff_bang in lto.o
_bicoeff_new in lto.o
_bounds_proxy_any in lto.o
_gop_bang in lto.o
_gop_new in lto.o
_pos_bang in lto.o
...
"_s_float", referenced from:
_adsr_new in lto.o
_asr_new in lto.o
_autofade_new in lto.o
_autofade2_new in lto.o
_bendin_new in lto.o
_bendout_new in lto.o
_bicoeff_new in lto.o
...
"_s_anything", referenced from:
_break_new in lto.o
_button_new in lto.o
_changed_new in lto.o
_dir_new in lto.o
_float2bits_new in lto.o
_function_new in lto.o
_hot_new in lto.o
...
"_s_bang", referenced from:
_changed_new in lto.o
_click_new in lto.o
_hot_arm in lto.o
_lb_new in lto.o
_loadbanger_new in lto.o
_seq_new in lto.o
_nbang_new in lto.o
...
"_s_signal", referenced from:
_above_new in lto.o
_add_new in lto.o
_adsr_new in lto.o
_allpass_2nd_new in lto.o
_allpass_rev_new in lto.o
_asr_new in lto.o
_autofade_new in lto.o
...
"_s_", referenced from:
_buffer_get in lto.o
_buffer_redraw in lto.o
_buffer_validate in lto.o
_buffer_init in lto.o
_hammerpanel_symbol in lto.o
_hammerpanel_path in lto.o
_canvas_mouse_new in lto.o
...
(maybe you meant: _s_inter_freepdinstance, _s_inter_free , _s_inter_newpdinstance , _s_stuff_newpdinstance , _s_stuff_freepdinstance )
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
** BUILD FAILED **
The following build commands failed:
Ld /Users/esteban/src/camomileTests/Camomile/Plugins/Camomile.vst3/Contents/MacOS/Camomile normal x86_64
(1 failure)
Any tip?
In Xcode GUI I'm stucked in the same error, even with cloned libpd from github.
You should also generate the CMake project using:
cd Dependencies/LibPdBuild/MacOSX && cmake .. -GXcode && cd ../../..
and of course, you should use the same scheme Camomile-libpd
...now I have a new error:
The errors might be related to the missing compile definition "PDINSTANCE=1". You should add this to the projucer projects.
The errors might be related to the missing compile definition "PDINSTANCE=1". You should add this to the projucer projects.
Now the "Header Search Paths" field in Configurations in Projucer project have the entries:
PD_INTERNAL=1
JUCE_VST3_CAN_REPLACE_VST2=0
PD=1
PDINSTANCE=1
And now I have an error but I can't understand what I need to do...
The codes with problems signaled:
Except float2bits, all depend of random.h
I might have fixed float2bits
There are some missing include in float2bits.c (alloca.h for linux/macos or malloc for Windows I think) and I think you will fix random problems if you don't use inline methods or if you force the method to be always inline.
I might have fixed float2bits
Passed... Now only lack random.h objects
I think you will fix random problems if you don't use inline methods or if you force the method to be always inline.
I don't really know what this means :) Matt Barber coded this for me.
please give me an example of the needed change
please give me an example of the needed change
or if it isn't too much to ask, send me a PR?
The simplest solution would be to declare the function random_frand
and random_trand
in the header random.h without inline
and to write the function in the c file random.c (of course, you have to include random.c in the project but I guess you already do that).
Well, I'm really a dummy when it comes to programming, so... I just included random_frand inside every object without "inline" and removed it from random.h
@emviveros - see if at least brown~ now will work
wait, I have to do also the same for trand
ok, now maybe it all works, hopefully...
there's a bunch of other "inline" thingies still in random.h, so not sure that will still be a problem. I only took care of random_frand and random_trand
I replaced from else github files:
And have this error now:
let's do this via telegram?
Why the functions in the separate codes need to have different names?
I need to modify rescale~.c, peak~.c and rms~.c because of error "symbol multiply defined!" (post #5 in this tread) to pass.
There is a another solution don't simple rename the fuctions repeated in different externals sources?
let's do this via telegram?
Now!
The functions should be declared as static if you declare them in all the c files that need it
static uint32_t random_trand(uint32_t* s1, uint32_t* s2, uint32_t* s3 ){
// This function is provided for speed in inner loops where the
// state variables are loaded into registers.
// Thus updating the instance variables can
// be postponed until the end of the loop.
*s1 = ((*s1 & (uint32_t)- 2) << 12) ^ (((*s1 << 13) ^ *s1) >> 19);
*s2 = ((*s2 & (uint32_t)- 8) << 4) ^ (((*s2 << 2) ^ *s2) >> 25);
*s3 = ((*s3 & (uint32_t)-16) << 17) ^ (((*s3 << 3) ^ *s3) >> 11);
return *s1 ^ *s2 ^ *s3;
}
static float random_frand(uint32_t* s1, uint32_t* s2, uint32_t* s3)
{
// return a float from -1.0 to +0.999...
union { uint32_t i; float f; } u; // union for floating point conversion of result
u.i = 0x40000000 | (random_trand(s1, s2, s3) >> 9);
return u.f - 3.f;
}
thanks :) I suspected so. We did it and it seems to be working now ;) thanks a lot!
Yes.. Compilation end successfully! Now I'm going to test and if all's ok, I post here the steps needed to compile Camomile_Else in OSx.
Thanks a lot Pierre and Porres!! :)
Thanks for the effort guys. I'll try to translate to Win10 and post here after Esteban will post his steps. Thanks (btw Camomile + Else...wooooowwww!)
www.elgallorojorecords.bandcamp.com/ https://elgallorojorecords.bandcamp.com/ soundcloud.com/alfonsosantimone www.facebook.com/alfonsosantimone
On Tue, Oct 6, 2020 at 8:02 PM Esteban Viveros notifications@github.com wrote:
Yes.. Compilation end successfully! Now I'm going to test and if all's ok, I post here the steps needed to compile Camomile_Else in OSx.
Thanks a lot Pierre and Porres!! :)
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/pierreguillot/Camomile/issues/214#issuecomment-704450303, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAYUVYVCIJPOQ7VAOU4TBULSJNLVFANCNFSM4SD633UQ .
Well.. I tried to open the patch All_objects.pd from else and some objects failed to open. In Camomile terminal I have these messages:
Camomile 1.0.7 for Pd 0.51.1
pd.stalFx - no graph-on-parent: symbol /Users/esteban/Desktop/else_example_camomile.pd
else/table~
... couldn't create
else/nbang
... couldn't create
else/hann~
... couldn't create
else/bin.shift~
... couldn't create
else/args
... couldn't create
else/blocksize~
... couldn't create
else/click
... couldn't create
else/properties
... couldn't create
else/loadbanger
... couldn't create
else/lb
... couldn't create
else/initmess
... couldn't create
else/break
... couldn't create
else/any2symbol
... couldn't create
else/changed
... couldn't create
else/order
... couldn't create
else/hot
... couldn't create
else/setmess
... couldn't create
else/pack2
... couldn't create
else/routeall
... couldn't create
else/routetype
... couldn't create
else/sig2float~
... couldn't create
else/s2f~
... couldn't create
else/float2sig~
... couldn't create
else/f2s~
... couldn't create
else/dir
... couldn't create
else/sysrt.in
... couldn't create
else/sysrt.out
... couldn't create
else/ctl.in
... couldn't create
else/ctl.out
... couldn't create
else/touch.in
... couldn't create
else/touch.out
... couldn't create
else/pgm.in
... couldn't create
else/pgm.out
... couldn't create
else/bend.in
... couldn't create
else/bend.out
... couldn't create
else/note.in
... couldn't create
else/note.out
Here the complete log message provided by camomile terminal. camomile_else_terminal_error01.txt
Although there are these errors I was able to run simple patches in PdStal and PdStalFx always when there are no abstractions involved.
But are some work to do for provide support for all Else library.
testes video camomile else.zip pdPatches_testing Camomile-Else.zip
let's take one at a time... first, some of these are abstractions. One of them is sysrt.in, which is very simple and I can't see why it could go wrong as it's just a vanilla abstraction using basically just "selecct", here it is
I didn't try but did you check if it is not just prefix "else/" that causes the problem ? because the else objects are now like vanilla objects
yeah, we figure it's something to do with that. But many objects in the else library are abstractions that use the "else/object" format, so maybe that's the issue.
Also, it's unclear to me how to use abstractions that rely on externals in camomile, can you help us?
I guess that all the externals compiled with Camomile behave as plain vanilla objects so as long as the abstractions calling the externals are in the same path of the main Camomile pd patch everything should work fine. But let's see what @pierreguillot thinks about it.
Ok, so I tested loading a patch (named All_compiled_objects.pd) only containing compiled objects, and it was almost a complete success! The object it had a problem with was "symbol2any". Here's the relevant issues.
tried /Users/porres/Documents/Pd/externals/else/All_compiled_objects.pd and succeeded warning: old method 'click' for class 'canvas' renamed 'click_aliased'
tried /Users/porres/Documents/Pd/externals/else/symbol2any.pd_darwin and succeeded
/Users/porres/Documents/Pd/externals/else/symbol2any.pd_darwin: dlopen(/Users/porres/Documents/Pd/externals/else/symbol2any.pd_darwin, 10): Symbol not found: _s_list Referenced from: /Users/porres/Documents/Pd/externals/else/symbol2any.pd_darwin Expected in: flat namespace in /Users/porres/Documents/Pd/externals/else/symbol2any.pd_darwin
symbol2any ... couldn't create ... you might be able to track this down from the Find menu.
So, the issue seems to be not being able to find "_s_list ". This must refer to this line of code https://github.com/porres/pd-else/blob/master/Classes/Source/symbol2any.c#L88
The problem is that this doesn't give me any issue with the external itself and I'm also doing the same thing for several other compiled externals. So... I don't know, pretty weird, not sure how to fix this.
I guess that all the externals compiled with Camomile behave as plain vanilla objects so as long as the abstractions calling the externals are in the same path of the main Camomile pd patch everything should work fine.
yeah, I guess so. My problem is with how to call objects inside abstractions then. Cause it seems we can't use something like "else/hann~". So I wonder what is the best practice instead.
I use the "else/object" format in my abstractions because it's a way that guarantees the right objects are called. Like, if you have another library with an object with the same name, there can be some issues that [declare] won't be able to deal with.
The only way [declare] works is if you don't have anything else called on preferences path or startup. Because if you have a library called as such, it gets priority in the search path.
One other way would be to use "./" instead of "else/"... but I suspect that might not work in camomile as well!
If I have to just include the object name in the abstractions called in camomile, then maybe the best would be to ship a set of abstractions specially for camomile
as for the warning "old method 'click' for class 'canvas' renamed 'click_aliased", that must be something related to my "click" object. I made some changes, but I don't know if it will make a difference => https://github.com/porres/pd-else/blob/master/Classes/Source/click.c
ok, so the symbol2any issue is that it wasn't compiled so it seems, trying again ;)
Clone Else Repository
cd ~/
git clone https://github.com/porres/pd-else.git
Clone Camomile Repository
git clone --recursive https://github.com/pierreguillot/Camomile.git
Create in Camomile directory the folder ~/Camomile/Source/Pd/External and Copy the source codes of Else in this folder. Copy Else “shared” folder into ~/Camomile/Source/Pd/External to.
mkdir ~/Camomile/Source/Pd/Externals
cp ~/pd-else/Classes/Source/*.* ~/Camomile/Source/Pd/Externals
cp ~/pd-else/Classes/Aliases/*.* ~/Camomile/Source/Pd/Externals
cp -R ~/pd-else/shared ~/Camomile/Source/Pd/Externals
Replace ~/Camomile/Source/Pd/x_libpd_multi.c for this x_libpd_multi.c
Open file by file and set External Folder, set Configuration Settings "Header Search Paths” and export to Xcode.
cd Camomile
open .
For each file, in Projucer manually:
For each file:
PD=1
PDINSTANCE=1
CAMOMILE=1
For each file:
../../../Source/Pd/Externals/
../../../Source/Pd/Externals/shared
Open Camomile.xcworkspace in Xcode
Uncheck “Camomile - AU” label in Target Membership of the autogenerated file “include_juce_audio_plugin_client_AU.r" in "JUCE Library Code” folder
Go back to terminal and in Camomile folder run:
cd Dependencies/LibPdBuild/MacOSX && cmake .. -GXcode && cd ../../..
Build in Xcode (Command+B) or in Terminal running:
xcodebuild -workspace Camomile.xcworkspace -scheme Camomile-libpd -configuration Release
After Successful compilation, binaries are in "~/Camomile/Plugins" folder.
2020-10-08 Added CAMOMILE=1 preprocessor flag in step 5
@pierreguillot, What's the better way to include ELSE externals abstractions in Camomile-ELSE compilation?
So, I guess one needs to have a folder with all abstractions and call them. The abstractions can be on the same folder of the patch or maybe in some subfolder ("else_abs" for instance).
The thing is that the abstractions themselves cannot call objects (either compiled or abstractions) from the else library using prefixes, like "else/sine~" or even "./sine~", right???
So, because of this, I created a separate folder with abstractions that will properly run in Camomile, where all objects are just called by their names without prefixes. And I have this separately because I want to keep using "else/sine~" in my regular external folder distribution.
but anyway, all is fine compiling the else library now! We just need to figure out a way to deal with my "click" object overwritting some internal Pd Vanilla class, and I hope to have fixed that by renaming the object to "canvas.click", let's see!
it seems that if I use [declare -path else] in my abstractions I can guarantee they'll load even if you have other libraries with objects with the same name pre installed! I guess I'll use that instead.
I recommend you to use relative path but you can use the declare object also. It is exactly like Pd app except that your library is included as part of Vanilla objects. If necessary check the console and you'll see where Pd looks for objects, abstractions, etc.
If you want to do a Camomile-Else project, I recommend you to do fork of Camomile and to include the Else project as a submodule. This way all the Else specific parts will be done on it and you'll be able to setup a CI system or whatever. And I think most of the questions are now more related to the structure of the Else library.
I recommend you to use relative path
How exactly? Like having a subfolder in the same folder of the patch with the abstractions and do "folder/object"?
@porres
So, I guess one needs to have a folder with all abstractions and call them. The abstractions can be on the same folder of the patch or maybe in some subfolder ("else_abs" for instance).
Yes we can deal with this workflow.. But I thinking in a design for the Else public: patching yes, but not programming a lot.. at least that's what I imagine when I think of the facilities that ELSE brings.
@pierreguillot
If you want to do a Camomile-Else project, I recommend you to do fork of Camomile and to include the Else project as a submodule.
Thanks again and again... I believe that this is the best solution. I have the energy to take this forward, but still not much knowledge. I hope to count on everyone's help to make it happen.
@pierreguillot
This way all the Else specific parts will be done on it and you'll be able to setup a CI system or whatever. And I think most of the questions are now more related to the structure of the Else library.
Ok! Time to close the issue once the task of compile Camomile with Else externals on OSx is completed.
At this time without a "Camomile-ELSE" like fork, the workflow to use Camomile with ELSE library in OSx is:
@pierreguillot , could you help us with something please? Sorry to bug you, but I'm just too dummy...
So, my click object interferes with an internal function in Vanilla and my idea is to provide a compilation flag to basically disable the object (which doesn't have any use in camomile anyway). But how can we do this? :)
I've made a first draft at https://github.com/porres/pd-else/blob/master/Classes/Source/click.c
I have an "#ifdef PD" in the "click_new" section so the object compiles fine
https://github.com/porres/pd-else/blob/master/Classes/Source/click.c#L145
and I have an #undef PD is we have a "#ifdef CAMOMILE", so when we compile for camomile it should disable the object.
I hope that's half way through it and on the right track, but how would one tell the object we are compiling for camomile? I supposed that at some point in the make file I had to include "#define CAMOMILE 1" but that didn't work.
I supposed that at some point in the make file I had to include "#define CAMOMILE 1" but that didn't work.
yeah, of course, cause "#" in the makefile just comments the code out :) hahahah, but "define" without "#" doesn't work either...
Not knowing if this is already defined elsewhere in the makefiles but what you want to add is:
CPPFLAGS="-DCAMOMILE"
i think
i think
it's working :) thanks!
Where can I put this flag???
maybe here??
Hi! I'm trying to compile camomile with support to Else library by @porres.
I'm following the instructions in the video on: https://github.com/pierreguillot/Camomile/issues/138#issuecomment-628092966
After add all objects of Else lib and add manually the folder with some Else dependencies headers manually in Xcode project before start compile failed. And after (525 warnings), it return one fatal issue:
The system is a Macbook Pro 2011, OSx 10.13.6 High Sierra. Xcode 10.2.1. Projucer JUCE v6.0.1 Build date: 7 Jul 2020.
Now I will describe all steps I took (maybe can be used to create documentation in future):
Cloned pdlib repository
Cloned camomile repository
Added the sources of Else library in the fresh created folder
<projectFolder>/camomile/Source/Pd/Externals
. I added 238 c sources and 1 folder namedshared
with some dependencies to build Else library. in theshared
folder are 6 sources codes (.c files) and it's respective headers (.h files).Opened the files
CamomileFx.jucer
,CamomileLV2.jucer
,Camomile.jucer
in Projucer and manually add the theExternals
folder in each project and save the project and build the Xcode workspace project file. (described at 40s of the video reference)After opened the Xcode workspace generated in file
Camomile.xcworkspace
I added each object in x_libpd_multi.c file. Like described in video reference at 3:10.Added
<projectFolder>/camomile/Source/Pd/Externals/shared
in Xcode Headers Path: 6.1 Clicking in the root tree of project: 6.2 Clicking in "Build Settings": 6.3 and in Search Path -> Header Search Path I added$SRCROOT/Source/Pd/Externals/shared
in Debug and Releases fields (it solved issues relative to headers not found from else dependencies):Uncheck include_juce_audio_plugin_client_AU.r files option in Xcode project like described in video reference at 2:10.
After that I tried to build Camomile (Cmmd+B) and have the error described above.
Any advance are welcomed and I'm at disposal for all tests needed.