ccrma / chugins

Repository for ChuGins
MIT License
114 stars 47 forks source link

Faust 2023 #67

Closed DBraun closed 11 months ago

DBraun commented 1 year ago

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:

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:

otool -L /usr/local/lib/chuck/Faust.chug
/usr/local/lib/chuck/Faust.chug:
    @rpath/libFaucK.dylib (compatibility version 0.0.0, current version 0.0.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1971.0.0)
    /System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI (compatibility version 1.0.0, current version 69.0.0)
    /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1319.100.3)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1500.65.0)

On Windows, you need sndfile.dll in the right place, but the scripts set this up.

sletz commented 1 year ago

Great !

gewang commented 1 year ago

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

DBraun commented 1 year ago

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: @.***>

gewang commented 1 year ago

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?

DBraun commented 1 year ago

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.

sletz commented 1 year ago

Faust libraries can be included in the plugin, we do that for faustgen~ Max/MSP external, see image Then accessed using the -I path/to/library Faust compiler option. See code to do that for macOS and windows.

gewang commented 1 year ago

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

DBraun commented 1 year ago

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.

DBraun commented 1 year ago
Screenshot 2023-05-21 at 12 58 24 PM

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

DBraun commented 1 year ago

I updated assuming https://github.com/ccrma/chuck/pull/316 gets approved

nshaheed commented 1 year ago

TODO

nshaheed commented 1 year ago

TODO linux:

DBraun commented 1 year ago

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.chugto /usr/local/lib/chuck/Faust.chugafter running sh build_unix.sh

gewang commented 11 months ago

Faust 2023 due its complex build system, has been migrated to to its own repo, with author @DBraun being the pointperson to maintain it on the various operating systems. Thank you!