Closed DBraun closed 11 months ago
Great !
Thank you @DBraun for all this amazing work!! Now that chuck-1.5.0.0 is out, we have much planned on the release roadmap, including a massive chugins update release potentially in a few week (we are also preliminarily working towards a chuck package manager; but that's further down the road!). Would love to incorporate this updated Faust.chug as part of that release! BTW we now also have a dedicated pull-request review team (we call it "pr-lab"; we meet weekly, in the vr-lab, hah) and will merge this PR in that context.
Longer term, we would love to make the Faust chugin more easily available, either as part of the standard release and/or in the yet-to-come package manager. Thank you for attending to the dependencies, it really goes a long way to making distribution feasible. Some follow-up questions:
Question 1) on macOS, is it possible to build Faust.chug as a universal binary (x86_64 and arm64)? I imagine this depends on the libraries Faust.chug links against, which in turn need to have been built as universal binary (which is usually where its gets tricky). Since 1.4.1.1 we have been shipping chuck, miniAudicle, and base chugins as universal binaries. We either need to ship Faust.chug as universal binary or ship with both and have the installer install the right one. BTW if we had a package manager, it would actually be simpler, as users can choose to download for their local architecture (or the package manager could auto-select for them).
Question 2) Thank you again for attending to minimizing the dependencies; under the current system, would we only need to distribute libFaucK.dylib with Faust.chug, or would the user still need to additionally install libfaust
on their system? Is it at all possible (or advisable) to build a single, statically-linked Faust.chug for macOS and windows (or Faust.chug + libFaucK.dylib on macOS, and no other dependencies)? As you know, there are many students/newcomers who use ChucK and we would love for things to work out of the box (or as much as possible).
Thanks again @DBraun! cc'ing @nshaheed @celestebetancur @spencersalazar
Thanks! The gist is yes we probably can make universal binaries. Although some of this stuff would be a pain to do fully automatically on GitHub actions. We would use lipo to combine the arm64 and x64 libfausts into a universal.lipo x86_64.libfaust.2.a arm64.libfaust.2.a -create -output libfaust.aWe would do the same for sndfile. Then we would host those somewhere and a continuous integration could download them. It would probably be too painful to build sndfile universals on demand for each continuous integration run.Also, there won’t be a need for any other .dylib files. The current code makes Faust.chug stand fully on its own, because it statically links everything. You only need the faustlibraries in the right location.Not sure if this was your question, but you probably can’t have the same Faust.chug file work on both macOS and Windows.Happy up to follow up more later!On May 20, 2023, at 4:57 PM, Ge Wang @.***> wrote: Thank you @DBraun for all this amazing work!! Now that chuck-1.5.0.0 is out, we have much planned on the release roadmap, including a massive chugins update release potentially in a few week (we are also preliminarily working towards a chuck package manager; but that's further down the road!). Would love to incorporate this updated Faust.chug as part of that release! BTW we now also have a dedicated pull-request review team (we call it "pr-lab"; we meet in the pr-lab every week) and will merge this PR in that context. Longer term, we would love to make the Faust chugin more easily available, either as part of the standard release and/or in the yet-to-come package manager. Thank you for attending to the dependencies, it really goes a long way to making distribution feasible. Some follow-up questions: Question 1) on macOS, is it possible to build Faust.chug as a universal binary (x86_64 and arm64)? I imagine this depends on the libraries Faust.chug links against, which in turn need to have been built as universal binary (which is usually where its gets tricky). Since 1.4.1.1 we have been shipping chuck, miniAudicle, and base chugins as universal binaries. We either need to ship Faust.chug as universal binary or ship with both and have the installer install the right one. BTW if we had a package manager, it would actually be simpler, as users can choose to download for their local architecture (or the package manager could auto-select for them). Question 2) Thank you again for attending to minimizing the dependencies; under the current system, would we only need to distribute libFaucK.dylib with Faust.chug, or would the user still need to additionally install libfaust on their system? Is it at all possible (or advisable) to build a single, statically-linked Faust.chug for macOS and windows (or Faust.chug + libFaucK.dylib on macOS, and no other dependencies)? As you know, there are many students/newcomers who use ChucK and we would love for things to work out of the box (or as much as possible). Thanks again @DBraun! cc'ing @nshaheed @celestebetancur @spencersalazar
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>
thanks for the clarifications. what does it mean for "the faustlibraries in the right location" -- does that mean people still have to install libfaust separately for the chugin to work? or can we statically compile it into the chugin?
I mean that /usr/local/share/faust/all.lib should exist. If the user places the faustlibraries there it’s as if they built and installed all of Faust themselves. The .dmgs that Faust distributes are not installers like ChucK. They’re just folders, so it’s up to users to put them wherever they want. However, since we’re developing the Faust chugin, we can search for faustlibraries in arbitrary places. It’s just that /usr/local/share/faust/all.lib is standard (it’s where compiling Faust locally would place it.) It’s not possible to compile the libraries inside the chugin unfortunately. That would be cool.
thanks -- that's excellent and what we need! if anyone want to take crack (on the basis of this PR after we merge it), that would be greatly appreciated
Great! I'll try to get the faustlibraries localized with the Faust.chug then. Oh cool.. Windows can do it too. I'll try both.
Here's where I'm at on another branch: https://github.com/DBraun/chugins/tree/faust-2023-installer
The CMake does add_library(FaucK MODULE ${ALL_FILES} ${DSPLIBS})
so we end up with a Faust.chug directory containing the faustlibraries in the resources. Note that it shows up as an ordinary directory. I don't know how the equivalent faustgen mxo looks. If I change the directory to Faust.plugin then it becomes opaque, and I would have to right-click "show package contents" to see inside.
I think a potential issue is that chuck is not treating Faust.chug like a chugin (because it's kind of a directory).
I put the Faust.chug
at /usr/local/lib/chuck/Faust.chug and ran chuck sidechain-compressor.ck --verbose:10 --level:10
inside chugins/Faust/examples
[chuck]:(5:INFORM): | | examining directory '/usr/local/lib/chuck' for chugins
[chuck]:(3:SEVERE): | | loading chugin 'KasFilter.chug'
[chuck]:(3:SEVERE): | | loading chugin 'PanN.chug'
[chuck]:(3:SEVERE): | | loading chugin 'ExpDelay.chug'
[chuck]:(3:SEVERE): | | loading chugin 'WPDiodeLadder.chug'
[chuck]:(3:SEVERE): | | loading chugin 'WinFuncEnv.chug'
[chuck]:(3:SEVERE): | | loading chugin 'FIR.chug'
[chuck]:(3:SEVERE): | | loading chugin 'MagicSine.chug'
[chuck]:(3:SEVERE): | | loading chugin 'FoldbackSaturator.chug'
[chuck]:(3:SEVERE): | | loading chugin 'Multicomb.chug'
[chuck]:(3:SEVERE): | | loading chugin 'Mesh2D.chug'
[chuck]:(3:SEVERE): | | loading chugin 'WarpBuf.chug'
[chuck]:(3:SEVERE): | | loading chugin 'Sigmund.chug'
[chuck]:(3:SEVERE): | | loading chugin 'GVerb.chug'
[chuck]:(3:SEVERE): | | loading chugin 'PitchTrack.chug'
[chuck]:(3:SEVERE): | | loading chugin 'PowerADSR.chug'
[chuck]:(3:SEVERE): | | loading chugin 'Spectacle.chug'
[chuck]:(3:SEVERE): | | loading chugin 'WPKorg35.chug'
[chuck]:(3:SEVERE): | | loading chugin 'ABSaturator.chug'
[chuck]:(3:SEVERE): | | loading chugin 'Elliptic.chug'
[chuck]:(3:SEVERE): | | loading chugin 'AmbPan.chug'
[chuck]:(3:SEVERE): | | loading chugin 'Bitcrusher.chug'
[chuck]:(3:SEVERE): | | loading chugin 'ExpEnv.chug'
[chuck]:(5:INFORM): | | examining directory '/Library/Application Support/ChucK/ChuGins' for chugins
[chuck]:(5:INFORM): | | examining directory '~/Library/Application Support/ChucK/ChuGins' for chugins
So it seems to have skipped over Faust.chug
I updated assuming https://github.com/ccrma/chuck/pull/316 gets approved
TODO
TODO linux:
This is currently building and sounds good on an intel macOS 13.5.2 I'm borrowing. I don't have Windows for the next week at least.
I'm also copying ~/GitHub/chugins/Faust/package/fauck-0.0.1/Faust.chug
to /usr/local/lib/chuck/Faust.chug
after running sh build_unix.sh
This updates Faust to the latest 2.59.6. We download
libfaust
from the releases. We also have all the FaucK features from https://github.com/ccrma/chugins/pull/49:freq
,gain
,gate
. You will also tell the Faust chugin the number of voices to use before "compiling" the Faust code.Libsndfile is statically linked, meaning the macOS Faust.chug can be distributed without any dependencies. You still need faustlibraries in the right place, however.
On macOS this demonstrates how the Faust.chug has no dependencies:
On Windows, you need
sndfile.dll
in the right place, but the scripts set this up.