I guess you don't have wget
installed. I rewrote it to use curl
instead. Pull the updated version and try again.
Compiling puredata externals
That seemed to work, but then I received the following errors during the first process:
dpkg-deb: error: '/tmp/pkgs//libcurl4-openssl-dev_7.52.1-5+deb9u4_armhf.deb' is not a debian format archive
dpkg: error processing archive /tmp/pkgs//libcurl4-openssl-dev_7.52.1-5+deb9u4_armhf.deb (--install):
subprocess dpkg-deb --control returned error exit status 2
and then, a while later:
dpkg: dependency problems prevent configuration of liboauth-dev:
liboauth-dev depends on libcurl4-gnutls-dev | libcurl4-dev; however:
Package libcurl4-gnutls-dev is not installed.
Package libcurl4-dev is not installed.
dpkg: error processing package liboauth-dev (--install):
dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.24-11+deb9u3) ...
Processing triggers for man-db (2.7.6.1-2) ...
Errors were encountered while processing:
/tmp/pkgs//libcurl4-openssl-dev_7.52.1-5+deb9u4_armhf.deb
liboauth-dev
I tried the next steps anyway just in case, no dice. Would it be worth trying to reinstall wget and going back to your original script?
giuliomoro actually, is there any chance I could grab those compiled versions from you please? I feel like it'd be worthwhile trying this process with a clear head, but would really appreciate seeing if they work before I try other options for current project.
Feel like I'm so close! I found that connecting Bela to the internet was much easier than I imagined, so I ran apt-get update just in case, and followed your instructions directly over ssh. Now when I try to make it, I get the following error:
'''
ls: cannot access '/m_pd.h': No such file or directory
++++ info: using Makefile.pdlibbuilder version 0.5.0
pd-lib-builder/Makefile.pdlibbuilder:744: Where is Pd API m_pd.h? Do 'make help' for info.
++++ info: making target all in lib purest_json
++++ info: making src/json-encode.o in lib purest_json
cc -DPD -I "" -DUNIX -fPIC -DVERSION='"1.4.2"' -I"src/uthash/src" -std=c99 -Wall -Wextra -Wshadow -Winline -Wstrict-aliasing -O3 -ffast-math -funroll-loops -fomit-frame-pointer -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard -o src/json-encode.o -c src/json-encode.c
In file included from src/json-encode.c:31:0:
src/json-encode.h:27:18: fatal error: m_pd.h: No such file or directory
#include "m_pd.h"
^
compilation terminated.
pd-lib-builder/Makefile.pdlibbuilder:899: recipe for target 'src/json-encode.o' failed
make: *** [src/json-encode.o] Error 1
'''
I can see m_pd.h referenced further up this thread but not sure where to go from here - ran the help, tried adding same PD_INCLUDE lines as emerson.
cmm could grab those compiled versions from you please? I
that wouldn't work: you need the dependencies to be installed for those to work.
cmm dpkg-deb: error: '/tmp/pkgs//libcurl4-openssl-dev_7.52.1-5+deb9u4_armhf.deb' is not a debian format archive
So what happened here is that the download failed because the URL of the package is obsolete (and the board - who we trust to provide the URLs) does not know about it because it's not connected to the internet. wget
would have not helped.
cmm I can see m_pd.h referenced further up this thread but not sure where to go from here - ran the help, tried adding same PD_INCLUDE lines as emerson.
yes I am a bit confused as to why I did not have to do it earlier. On this other board I have now I have to do:
make PDINCLUDEDIR=/usr/local/include/libpd/
giuliomoro thank you!! It's working now. This makes transferring presets between Max and Pd/Bela much easier (it's what we use to store the Kellycaster data). Will put the results online soon.
Hi,
I know, it's probably all in here but even after four days of trying I'm not able to run Pure Data patches on Bela that make use of externals, because I'm too new to all this.
Is there someone who could write a step by step guide of how to get this working starting at a very basic level? With 'very' I mean something like: "first you have to create a directory on the board, the necessary command is: XX; then you have to copy the relevant folder into this directory: /XX/YY by using this command: ZZZ" and so on? That would be so helpful!
I hope someone could help, I'm really lost. Thank you!
Each external has its own method to be built. There are a lot or similarities, though, so the guidelines above should be applicable to mostly any external, but it's impossible to be more specific than that without knowing exactly which ones you need.
What externals do you need to build?
What operating system are you using?
Hi giuliomoro,
I need to build a couple of externals, the most important ones are cyclone and ggee and I'm on OS 10.13.6.
Thank you!
With Cyclone I've come so far:
emerson Downloaded the PD fork and copied it into /root/pure-data
then went back to Bela/projects/pd-externals/externals/cyclone and tried
'make PDINCLUDEDIR=/root/pure-data/src/ PDLIBDIR=/root/Bela/projects/pd-externals install'
Then I got these error messages:
Makefile:305: pd-lib-builder/Makefile.pdlibbuilder: No such file or directory
make: *** No rule to make target 'pd-lib-builder/Makefile.pdlibbuilder'. Stop.
The attachment gives an idea what's in the directory ../cyclone.
Do you know what's wrong? Thank you!
sorry I will hopefully have time tomorrow to try this out myself. It looks like you are missing the pd-lib-builder
folder in there. Also, you can delete all of those .pd_darwin
files. As per the documentation of the pd-lib-builder/Makefile.pdlibbuilder
file, you will need to specify
# PDINCLUDEDIR:
# Directory where Pd API m_pd.h should be found, and other Pd header files.
# Overrides the default search path.
on the command line. That is the folder where the Pd header files live. On Bela, that is /usr/local/include/libpd/
So, once you re-add the missing folder, you can re-run the make
command (from within the cyclone
folder, same as you did earlier, but with an extra command-line option):
make PDINCLUDEDIR=/usr/local/include/libpd
however, this may still fail if some files are missing.
thank you for your help. I included all missing files, ran the "make" command from within the cyclone folder and received some error messages like this one:
++++ info: making shared/common/magicbit.o in lib cyclone
cc -DPD -I "/usr/local/include/libpd" -DUNIX -fPIC -Ishared -DHAVE_STRUCT_TIMESPEC -Wall -Wextra -Wshadow -Winline -Wstrict-aliasing -O3 -ffast-math -funroll-loops -fomit-frame-pointer -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard -o shared/common/magicbit.o -c shared/common/magicbit.c
shared/common/magicbit.c:6:22: fatal error: g_canvas.h: No such file or directory
#include "g_canvas.h"
^
compilation terminated.
make: *** [shared/common/magicbit.o] Error 1
pd-lib-builder/Makefile.pdlibbuilder:917: recipe for target 'shared/common/magicbit.o' failed
Within the cyclone folder I also tried:
make PDINCLUDEDIR=/root/pure-data/src/ PDLIBDIR=/root/Bela/projects/pd-externals install
And received:
root@bela ~/Bela/projects/pd-externals/cyclone# make PDINCLUDEDIR=/root/pure-data/src/ PDLIBDIR=/root/Bela/projects/pd-externals install
ls:
cannot access '/root/pure-data/src//m_pd.h'
++++ info: using Makefile.pdlibbuilder version 0.5.1
++++ info: making target install in lib cyclone
++++ info: installpath is '/root/Bela/projects/pd-externals/cyclone'
: No such file or directory
++++ info: making shared/common/magicbit.o in lib cyclone
cc -DPD -I "/root/pure-data/src/" -DUNIX -fPIC -Ishared -DHAVE_STRUCT_TIMESPEC -Wall -Wextra -Wshadow -Winline -Wstrict-aliasing -O3 -ffast-math -funroll-loops -fomit-frame-pointer -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard -o shared/common/magicbit.o -c shared/common/magicbit.c
shared/common/magicbit.c:4:18: fatal error: m_pd.h: No such file or directory
#include "m_pd.h"
^
compilation terminated.
make: *** [shared/common/magicbit.o] Error 1
pd-lib-builder/Makefile.pdlibbuilder:917: recipe for target 'shared/common/magicbit.o' failed
Do you have an idea what I could do next? It feels as if I am a bit closer now...
Thank you!
Excuse me but I couldn’t find that path on the board. Can you tell me where it is located or tell me which command I have to use to copy the files from my desktop there?
Thank you!
- Edited
Now I found some time to do it (Friday night, 2am, of course).
Preparation:
- get extra header files needed to compile Cyclone (and ggee, and others) on Bela:
- on your computer open a terminal and:
git clone https://github.com/giuliomoro/pure-data &&\
cd pure-data &&\
scp src/*h root@192.168.7.2:/usr/local/include/libpd/
- make sure that the pd-externals
folder exists on Bela:
ssh root@192.168.7.2 mkdir -p Bela/projects/pd-externals
Now, the externals:
Cyclone:
- get Cyclone from Github. Go to the releases page. The latest release requires Pd 0.49, but Bela has Pd 0.48-2. So we get the v0.3, RC-1, which requires Pd 0.48-1. Here is the direct link to the source code.
- Download the code on your computer and uncompress it by double clicking on it. This results into an
pd-cyclone-cyclone0.3rc1
. In my case, this is on my Desktop. - Open a terminal, navigate to the folder containing the
pd-cyclone-cyclone0.3rc1
folder. In my case:cd ~/Desktop
- copy the folder to the board:
scp -r pd-cyclone-cyclone0.3rc1 root@192.168.7.2:
- go on the board and go into the cyclone folder we just copied:
ssh root@192.168.7.2 cd pd-cyclone-cyclone0.3rc1/
- compile Cyclone. The README says that Cyclone uses the
pd-lib-builder
building system. The provided documentation forpd-lib-builder
says that you should invokemake
by passing the path to the folder containing the Pd includes (in our case, the/usr/local/include/libpd
path we copied the.h
files to earlier on). This may take 10 minutes or so to run, and print some warnings, but all should be fine in the end:make PDINCLUDEDIR=/usr/local/include/libpd
- once this is successful, you can
install
the externals. These go in the~/Bela/projects/pd-externals
folder we created earlier, and in order to tellpd-lib-builder
about it is to setPDLIBDIR
when callingmake install
:make PDLIBDIR=/root/Bela/projects/pd-externals install
- now if you look into the destination folder you will see all the externals (with
extension .pd_linux
):ls ~/Bela/projects/pd-externals/cyclone
- great, test it: open the IDE, create a Pd project, upload a patch like this one:
It works!
Ggee:
- I struggled to locate the most up-to-date source code. On my computer, Deken shows that there is a v0.27 version, but I cannot find that online, so I go for the v0.26 available via Sourceforge through the Pd website: https://sourceforge.net/projects/pure-data/files/libraries/ggee/ggee-0.26.tar.gz/download
- download that file, unzip it on your computer by clicking it. This results into a
ggee-0.26
folder. In my case, this is on my Desktop. - Open a terminal, navigate to the folder containing the
ggee-0.26
folder. In my case:cd ~/Desktop
- copy the folder to the board:
scp -r ggee-0.26 root@192.168.7.2:
- go on the board and go into the cyclone folder we just copied:
ssh root@192.168.7.2 cd ggee-0.26
- compile ggee. The README does not say much about compiling, so we inspect the
Makefile
and find that the path to the folder containing the Pd headers is given as thePD_INCLUDE
variable.make PD_INCLUDE=/usr/local/include/libpd
- however, the above command fails:
root@bela:~/ggee-0.26# make PD_INCLUDE=/usr/local/include/libpd cc -DPD -I. -I"/usr/local/include/libpd"/pd -Wall -W -g -DVERSION='"0.26"' -fPIC -O6 -funroll-loops -fomit-frame-pointer -o "control/constant.o" -c "control/constant.c" control/constant.c:4:18: fatal error: m_pd.h: No such file or directory #include <m_pd.h> ^ compilation terminated. Makefile:165: recipe for target 'control/constant.o' failed make: *** [control/constant.o] Error 1
- we inspect the error message and notice there that the path provided by
-I
in the compiler parameters is not, as we expected"/usr/local/include/libpd"
, but rather it is"/usr/local/include/libpd"/pd
. Further inspecting the Makefile we find the lineCFLAGS = -DPD -I. -I"$(PD_INCLUDE)"/pd -Wall -W -g
, and that is the only place where thePD_INCLUDE
variable is used. So instead of passingPD_INCLUDE=
, we can pass all the options passed byCFLAGS=
, replacing the-I
parameter with the correct one. Additionally, we can add some optimization flags here:make CFLAGS="-DPD -I. -I"/usr/local/include/libpd" -Wall -W -g -DVERSION='"0.26"' -fPIC -O6 -funroll-loops -fomit-frame-pointer -march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=neon -ftree-vectorize -ffast-math"
- now install. Further exploring the
Makefile
we find thatpkglibdir=
tellsmake
where to install the externals, so:make install pkglibdir=/root/Bela/projects/pd-externals
- now if you look into the destination folder you will see all the externals (with
extension .pd_linux
):ls ~/Bela/projects/pd-externals/ggee
- great, test it: open the IDE, create a Pd project, upload a patch like this one:
It works!
As you can see, there is no hard and fast rule for building externals, though many use pd-lib-builder
and therefore will be installed the same way as cyclone
. Some others have some different Makefile
s, but it's often fairly straightforward to observe the error, inspect the Makefile
and figure out what variable needs to be set.
giuliomoro,
this is amazingly helpful, thank you so much, I managed to get Cyclone working, hurray!
Unfortunately, I ran into an unexpected error with Ggee. When
make PD_INCLUDE=/usr/local/include/libpd
I got this:
cc -DPD -I. -I"/usr/local/include/libpd"/pd -Wall -W -g -DVERSION='"0.26"' -fPIC -O6 -funroll-loops -fomit-frame-pointer -o "control/constant.o" -c "control/constant.c"
control/constant.c:4:18: fatal error: m_pd.h: No such file or directory
#include <m_pd.h>
^
compilation terminated.
Makefile:165: recipe for target 'control/constant.o' failed
make: *** [control/constant.o] Error 1
I know, the 'm_pd.h' case has been discussed before but I don't know how to solve it here. Could you please help me?
Thank you so much for your time!
- Edited
sorry I had left a couple of bullet points in there that I copied/pasted from the cyclone
section, fixed now
Thank you. I hate to say it but I still cannot get it to work:
root@bela:~/ggee-0.26# make CFLAGS="-DPD -I. -I"/usr/local/include/libpd"/pd -Wall -W -g -DVERSION='"0.26"' -fPIC -O6 -funroll-loops -fomit-frame-pointer -march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=neon -ftree-vectorize -ffast-math"
cc -DPD -I. -I/usr/local/include/libpd/pd -Wall -W -g -DVERSION='0.26' -fPIC -O6 -funroll-loops -fomit-frame-pointer -march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=neon -ftree-vectorize -ffast-math -o "control/constant.o" -c "control/constant.c"
control/constant.c:4:18: fatal error: m_pd.h: No such file or directory
#include <m_pd.h>
^
compilation terminated.
Makefile:165: recipe for target 'control/constant.o' failed
make: *** [control/constant.o] Error 1
If I had an idea where to start figuring it out, I would...
Thank you!
I don't know how I left another typo in there, fixed again.