I feel like this is one of those “if you have to ask, you can’t afford it” type of questions. But is there somewhere to start to understand .mk files?
I looked at numerous examples in the mod-plugin-builder github and everyone uses very different methods and syntax that makes some sort of general sense to my simple brain. But nothing I fully understand.
I was able to hack together a .mk that compiled the *.so file locally(outside of MOD plugin builder) and copied the MOD GUI and the LV2 files into a complete LV2 directory ready to go.
But I have not been able to adapt any of them to compile or do much of anything that works with the mod-plugin-builder build command after running bootstrap.
Is there somewhere to read up on this? or some general programming concepts I should be learning?
I messaged @Austin73 to ask for a bit of explanation becuse for average joes like me, it’s beyond me. He’s been posting plugins in that form and I suspect you tried to get them working on a MOD device?
Looks like people are creating stuff but the pipeline to where users can get them to their MOD devices is unclear and complex? I suggested to take this up with @jon.
It’s something I discussed with him as well; most engineers aren’t marketeers and its a shame if fine work beign shared won’t be used because of user experience hurdles.
Sorry mate. I’m visiting my mum at present so a but tied up at times I’m back tonight so can go through it in depth if you like or just go through Gianfranco original post about - it’s pretty good as I didn’t have a clue either before that, I’m not an engineer and have no coding experience prior to this
To be honest don’t try writing them just yet just use the ones on the site. Go to the cloud builder link in Gianfranco post - use Firefox browser if you are on windows. Connect the dwarf via USB cable. Then press connect button on the site. Then o to browse and find the mk file you want to use. Press ok. Then press build. It will say building, and type a load of jargon then at the bottom it will says successful or similar. Then press install. It will then type install successful or similar. Then go to dwarf editor page, either type the name of plugin in search or type cookbook as they all have that tag. And you should be good to go.
Hope this helps, also I didn’t create the cook book or the cloud builder, I’m just a regular user that wanted to give back. So hopefully once you get comfortable you will be as prolific as me!
A bit of background is probably needed here since there are a number of paths to choose when creating new plugins. I’ve built a few plugins in Plug Data and either compiled them to a binary or exported the source code.
When on a Linux or Raspberry device, I can easily compile to the appropriate *.so and drop it into my prepared .lv2 folder with all of the needed .ttl and MOD GUI files. Which is great when running on MOD Desktop or a PiStomp.
However, I would like to prepare a github repository (started) for each plugin and have a .mk file that a MOD hardware user could upload to the Cloud Builder. I do not currently have a Dwarf or Duo.
My understanding (which may be incorrect) is even if I did have a Dwarf, I’d still need to learn how to generate/create a .mk file to instruct the Cloud Builder to find the Github files, compile them and package with the MOD GUI files.
Looking at some of the files in plugins/package, I see the .mk files start with something like:
I’m not clear on how to derive the version number.
what BUILD_CMDS and INSTALL_TARGET_CMDS to use for my source
dm-Fuzz.lv2, for example was written using Rust and uses cargo so I at least know that is not appropriate for my situation.
I’ve tried modelling my .mk on others that might be similar (just wildly guessing really) but I either get something like “no bundle found” or, more commonly, I run the bootstrap, then the ./build and nothing happens. No files created, no errrors appearing, nothing.
So I either got something wrong cloning the mod-plugin-builder or I have no clue how to put a proper .mk file together and it is possibly the former but definitely the latter.
The cloud builder expects only a mk file in my experience. I’ve been creating using Claude and gemini ai tools. Basically it’s a text file that is called fuzz. txt then save as fuzz.mk or whatever name you use in notepad or similar. You can then use the cloud builder to build and install to dwarf, duo or duoX it doesn’t install to mod desktop as far as I’m aware so you would need a mod audio hardware to use. The plugin will not have a Gui.
DaveM stuff and similar can be dragged into the dwarf using winscp. If you search DaveM plugins yiu will find a description to do it. These files will have ttl etc and creare a Gui, Lipi has created similar too so highly recommend you check his stuff out too.
Thank you Austin. I know you can submit .mk and even .pd files to the cloud builder if you want an incomplete package with no UI. I know how to make MOD GUI and create/edit the needed .ttl files. I’m only concerned with .mk and how to make a persistent, shareable build in the Cloud Builder.
The end goal is for these plugins to be potential Beta Store candidates so the .mk needs to aid in importing/building all the needed files for MOD GUI to work.
I am not trying to use a .mk to make something for MOD Desktop, I’ve already done that with just directly compiling and manually copying the correct files.
I am looking for understanding of what I need to make the .mk and/or whatever else to achieve this goal.
If you want to build plugins like Dave Mollen’s fuzz for a raspberry pi you don’t need to use mod plugin builder. On a pi, “cargo build” might be enough.
Yup, you are correct. I have his SpaceEcho and Time Warp compiled that way. So that is not, nor has it been, the question.
I just realized that I put this in the wrong forum!!! I meant to go to plugins in general. I just realized it went into the AI Cookbook section. Sorry about that! (Edit: Seriously, I went to Plugins and clicked New Topic and it dropped me in here…WTH)
I just need to figure out how to create a proper .mk for the MOD hardware/ cloud builder situation
The version is the git commit hash. The build commands should be the same or similar to what you use to compile it locally. And the install target commands can be used to copy the binary to the right location
Would anyone have a moment to see if this .mk actually compiles my Dimension D plugin along with the MOD GUI files in Cloud Builder? I’m hoping it makes something that works and has a working UI. That is, with the proper custom UI, not the tuna can one.
Thank you for your help, as I don’t have the correct hardware to test on.
It does say “All builds completed.”, but there are some remarks
you need to remove the Caps letters and the “_”, otherwise you get a “Filename contains invalid character(s)” message.
I believe that you are not able to install it and that has to do with CMake Errors.
For each device it gives one of those errors, altough after says “Build completed successfully.”
Here is the sharable link in case someone wants simply to try and install it: MOD Cloud Builder
Below is the full build log:
/usr/bin/make -j1 O=/root/mod-workdir/moddwarf-new HOSTCC="/usr/bin/gcc" HOSTCXX="/usr/bin/g++" silentoldconfig
make[1]: Entering directory '/root/mod-workdir/moddwarf-new/build/buildroot-2016.02'
GEN /root/mod-workdir/moddwarf-new/Makefile
BR2_DEFCONFIG='' KCONFIG_AUTOCONFIG=/root/mod-workdir/moddwarf-new/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/root/mod-workdir/moddwarf-new/build/buildroot-config/autoconf.h KCONFIG_TRISTATE=/root/mod-workdir/moddwarf-new/build/buildroot-config/tristate.config BR2_CONFIG=/root/mod-workdir/moddwarf-new/.config BR2_EXTERNAL=/root/mod-plugin-builder/plugins-dep HOST_GCC_VERSION="12" SKIP_LEGACY= /root/mod-workdir/moddwarf-new/build/buildroot-config/conf --silentoldconfig Config.in
make[1]: Leaving directory '/root/mod-workdir/moddwarf-new/build/buildroot-2016.02'
>>> tmpxp5qqjk8 bf8bdaa55e09daa050f167e75e215be970d7925d Downloading
Doing full clone
Cloning into bare repository 'tmpxp5qqjk8-bf8bdaa55e09daa050f167e75e215be970d7925d'...
>>> tmpxp5qqjk8 bf8bdaa55e09daa050f167e75e215be970d7925d Extracting
gzip -d -c /root/mod-workdir/download/tmpxp5qqjk8-bf8bdaa55e09daa050f167e75e215be970d7925d.tar.gz | tar --strip-components=1 -C /root/mod-workdir/moddwarf-new/build/tmpxp5qqjk8-bf8bdaa55e09daa050f167e75e215be970d7925d -xf -
>>> tmpxp5qqjk8 bf8bdaa55e09daa050f167e75e215be970d7925d Patching
>>> tmpxp5qqjk8 bf8bdaa55e09daa050f167e75e215be970d7925d Configuring
(mkdir -p /root/mod-workdir/moddwarf-new/build/tmpxp5qqjk8-bf8bdaa55e09daa050f167e75e215be970d7925d/ && cd /root/mod-workdir/moddwarf-new/build/tmpxp5qqjk8-bf8bdaa55e09daa050f167e75e215be970d7925d/ && rm -f CMakeCache.txt && PATH="/root/mod-workdir/moddwarf-new/host/bin:/root/mod-workdir/moddwarf-new/host/sbin:/root/mod-workdir/moddwarf-new/host/usr/bin:/root/mod-workdir/moddwarf-new/host/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" /root/mod-workdir/moddwarf-new/host/usr/bin/cmake /root/mod-workdir/moddwarf-new/build/tmpxp5qqjk8-bf8bdaa55e09daa050f167e75e215be970d7925d/ -DCMAKE_TOOLCHAIN_FILE="/root/mod-workdir/moddwarf-new/host/usr/share/buildroot/toolchainfile.cmake" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr" -DCMAKE_COLOR_MAKEFILE=OFF -DBUILD_DOC=OFF -DBUILD_DOCS=OFF -DBUILD_EXAMPLE=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TEST=OFF -DBUILD_TESTS=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_GUI="Off" )
CMake Warning:
Ignoring extra path from command line:
"/root/mod-workdir/moddwarf-new/build/tmpxp5qqjk8-bf8bdaa55e09daa050f167e75e215be970d7925d/"
CMake Error: The source directory "/root/mod-workdir/moddwarf-new/build/tmpxp5qqjk8-bf8bdaa55e09daa050f167e75e215be970d7925d" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
make: *** [package/pkg-generic.mk:188: /root/mod-workdir/moddwarf-new/build/tmpxp5qqjk8-bf8bdaa55e09daa050f167e75e215be970d7925d/.stamp_configured] Error 1
Build failed with exit code 2.
----------------------------------------
Starting build for duo...
/usr/bin/make -j1 O=/root/mod-workdir/modduo-new HOSTCC="/usr/bin/gcc" HOSTCXX="/usr/bin/g++" silentoldconfig
make[1]: Entering directory '/root/mod-workdir/modduo-new/build/buildroot-2016.02'
GEN /root/mod-workdir/modduo-new/Makefile
BR2_DEFCONFIG='' KCONFIG_AUTOCONFIG=/root/mod-workdir/modduo-new/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/root/mod-workdir/modduo-new/build/buildroot-config/autoconf.h KCONFIG_TRISTATE=/root/mod-workdir/modduo-new/build/buildroot-config/tristate.config BR2_CONFIG=/root/mod-workdir/modduo-new/.config BR2_EXTERNAL=/root/mod-plugin-builder/plugins-dep HOST_GCC_VERSION="12" SKIP_LEGACY= /root/mod-workdir/modduo-new/build/buildroot-config/conf --silentoldconfig Config.in
make[1]: Leaving directory '/root/mod-workdir/modduo-new/build/buildroot-2016.02'
>>> tmplp3yvc8f bf8bdaa55e09daa050f167e75e215be970d7925d Downloading
Doing full clone
Cloning into bare repository 'tmplp3yvc8f-bf8bdaa55e09daa050f167e75e215be970d7925d'...
>>> tmplp3yvc8f bf8bdaa55e09daa050f167e75e215be970d7925d Extracting
gzip -d -c /root/mod-workdir/download/tmplp3yvc8f-bf8bdaa55e09daa050f167e75e215be970d7925d.tar.gz | tar --strip-components=1 -C /root/mod-workdir/modduo-new/build/tmplp3yvc8f-bf8bdaa55e09daa050f167e75e215be970d7925d -xf -
>>> tmplp3yvc8f bf8bdaa55e09daa050f167e75e215be970d7925d Patching
>>> tmplp3yvc8f bf8bdaa55e09daa050f167e75e215be970d7925d Configuring
(mkdir -p /root/mod-workdir/modduo-new/build/tmplp3yvc8f-bf8bdaa55e09daa050f167e75e215be970d7925d/ && cd /root/mod-workdir/modduo-new/build/tmplp3yvc8f-bf8bdaa55e09daa050f167e75e215be970d7925d/ && rm -f CMakeCache.txt && PATH="/root/mod-workdir/modduo-new/host/bin:/root/mod-workdir/modduo-new/host/sbin:/root/mod-workdir/modduo-new/host/usr/bin:/root/mod-workdir/modduo-new/host/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" /root/mod-workdir/modduo-new/host/usr/bin/cmake /root/mod-workdir/modduo-new/build/tmplp3yvc8f-bf8bdaa55e09daa050f167e75e215be970d7925d/ -DCMAKE_TOOLCHAIN_FILE="/root/mod-workdir/modduo-new/host/usr/share/buildroot/toolchainfile.cmake" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr" -DCMAKE_COLOR_MAKEFILE=OFF -DBUILD_DOC=OFF -DBUILD_DOCS=OFF -DBUILD_EXAMPLE=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TEST=OFF -DBUILD_TESTS=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_GUI="Off" )
CMake Warning:
Ignoring extra path from command line:
"/root/mod-workdir/modduo-new/build/tmplp3yvc8f-bf8bdaa55e09daa050f167e75e215be970d7925d/"
CMake Error: The source directory "/root/mod-workdir/modduo-new/build/tmplp3yvc8f-bf8bdaa55e09daa050f167e75e215be970d7925d" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
make: *** [package/pkg-generic.mk:188: /root/mod-workdir/modduo-new/build/tmplp3yvc8f-bf8bdaa55e09daa050f167e75e215be970d7925d/.stamp_configured] Error 1
Build completed successfully.
----------------------------------------
Starting build for duox...
/usr/bin/make -j1 O=/root/mod-workdir/modduox-new HOSTCC="/usr/bin/gcc" HOSTCXX="/usr/bin/g++" silentoldconfig
make[1]: Entering directory '/root/mod-workdir/modduox-new/build/buildroot-2016.02'
GEN /root/mod-workdir/modduox-new/Makefile
BR2_DEFCONFIG='' KCONFIG_AUTOCONFIG=/root/mod-workdir/modduox-new/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/root/mod-workdir/modduox-new/build/buildroot-config/autoconf.h KCONFIG_TRISTATE=/root/mod-workdir/modduox-new/build/buildroot-config/tristate.config BR2_CONFIG=/root/mod-workdir/modduox-new/.config BR2_EXTERNAL=/root/mod-plugin-builder/plugins-dep HOST_GCC_VERSION="12" SKIP_LEGACY= /root/mod-workdir/modduox-new/build/buildroot-config/conf --silentoldconfig Config.in
make[1]: Leaving directory '/root/mod-workdir/modduox-new/build/buildroot-2016.02'
>>> tmpqshgsrpg bf8bdaa55e09daa050f167e75e215be970d7925d Downloading
Doing full clone
Cloning into bare repository 'tmpqshgsrpg-bf8bdaa55e09daa050f167e75e215be970d7925d'...
>>> tmpqshgsrpg bf8bdaa55e09daa050f167e75e215be970d7925d Extracting
gzip -d -c /root/mod-workdir/download/tmpqshgsrpg-bf8bdaa55e09daa050f167e75e215be970d7925d.tar.gz | tar --strip-components=1 -C /root/mod-workdir/modduox-new/build/tmpqshgsrpg-bf8bdaa55e09daa050f167e75e215be970d7925d -xf -
>>> tmpqshgsrpg bf8bdaa55e09daa050f167e75e215be970d7925d Patching
>>> tmpqshgsrpg bf8bdaa55e09daa050f167e75e215be970d7925d Configuring
(mkdir -p /root/mod-workdir/modduox-new/build/tmpqshgsrpg-bf8bdaa55e09daa050f167e75e215be970d7925d/ && cd /root/mod-workdir/modduox-new/build/tmpqshgsrpg-bf8bdaa55e09daa050f167e75e215be970d7925d/ && rm -f CMakeCache.txt && PATH="/root/mod-workdir/modduox-new/host/bin:/root/mod-workdir/modduox-new/host/sbin:/root/mod-workdir/modduox-new/host/usr/bin:/root/mod-workdir/modduox-new/host/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" /root/mod-workdir/modduox-new/host/usr/bin/cmake /root/mod-workdir/modduox-new/build/tmpqshgsrpg-bf8bdaa55e09daa050f167e75e215be970d7925d/ -DCMAKE_TOOLCHAIN_FILE="/root/mod-workdir/modduox-new/host/usr/share/buildroot/toolchainfile.cmake" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr" -DCMAKE_COLOR_MAKEFILE=OFF -DBUILD_DOC=OFF -DBUILD_DOCS=OFF -DBUILD_EXAMPLE=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TEST=OFF -DBUILD_TESTS=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_GUI="Off" )
CMake Warning:
Ignoring extra path from command line:
"/root/mod-workdir/modduox-new/build/tmpqshgsrpg-bf8bdaa55e09daa050f167e75e215be970d7925d/"
CMake Error: The source directory "/root/mod-workdir/modduox-new/build/tmpqshgsrpg-bf8bdaa55e09daa050f167e75e215be970d7925d" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
make: *** [package/pkg-generic.mk:188: /root/mod-workdir/modduox-new/build/tmpqshgsrpg-bf8bdaa55e09daa050f167e75e215be970d7925d/.stamp_configured] Error 1
Build completed successfully.
----------------------------------------
All builds completed.
I couldn’t get the mod-plugin-builder to even work on my laptop. I was hoping I could test these builds there before inflicting them on you.
I don’t know where “EXPERIMENTAL” is listed to change it and I could find no ‘docs/manual/B_Known_issues.md’ to look up possible solutions. Argh!
Laptop in question:
Distro: Linux Mint 22.3 Zena
base: Ubuntu 24.04 noble
Error at the end of ./bootstrap.sh moddwarf
[ERROR] >> Build failed in step ‘Extracting and patching toolchain components’
[ERROR] >> called in step ‘(top-level)’
[ERROR] >>
[ERROR] >> Error happened in: CT_DoExecLog[scripts/functions@376]
[ERROR] >> called from: CT_Extract[scripts/functions@2187]
[ERROR] >> called from: CT_DoExtractPatch[scripts/functions@2275]
[ERROR] >> called from: CT_PackageRun[scripts/functions@2063]
[ERROR] >> called from: CT_ExtractPatch[scripts/functions@2399]
[ERROR] >> called from: do_cc_extract[scripts/build/cc/gcc.sh@28]
[ERROR] >> called from: main[scripts/crosstool-NG.sh@667]
[ERROR] >>
[ERROR] >> For more info on this error, look at the file: ‘build.log’
[ERROR] >> There is a list of known issues, some with workarounds, in:
[ERROR] >> ‘docs/manual/B_Known_issues.md’
[ERROR] >>
[ERROR] >> NOTE: Your configuration includes features marked EXPERIMENTAL.
[ERROR] >> Before submitting a bug report, try to reproduce it without enabling
[ERROR] >> any experimental features. Otherwise, you’ll need to debug it
[ERROR] >> and present an explanation why it is a bug in crosstool-NG - or
[ERROR] >> preferably, a fix.
Gui aren’t created for the mk files so that might be an issue trying to attach. The cloud builder expects only a single text file saved as a mk.
I normally use winscp to drag the files to the dwarf that contain gui like DaveM and Lipi stuff.
Did you create it yourself or did you AI it? If I use gemini the first few tries fail so I load a working example and copy and paste the error code in for repair
I’ll run it through Claude and gemini later to see if I can fix the problems