* Start cleanup for improved packaging Signed-off-by: falkTX <falktx@falktx.com> * Use the same folder for VST2 plugins Signed-off-by: falkTX <falktx@falktx.com> * Fix static build Signed-off-by: falkTX <falktx@falktx.com> * Do not set source-dir in CI builds Signed-off-by: falkTX <falktx@falktx.com> * Set a custom fallback systemdir per OS Signed-off-by: falkTX <falktx@falktx.com> * CI tweaks Signed-off-by: falkTX <falktx@falktx.com> * Build the whole pyqt on windows Signed-off-by: falkTX <falktx@falktx.com> * Mention AU in readme and differences docs Signed-off-by: falkTX <falktx@falktx.com> * Add specialized utils for macOS packaging Signed-off-by: falkTX <falktx@falktx.com> * Fix plugin-validation build Signed-off-by: falkTX <falktx@falktx.com> * Fix build Signed-off-by: falkTX <falktx@falktx.com> * Do not create window for lv2lint tests * Start enabling AU builds * Copy over mod.lv2 specs for validation * Skip main cardinal lv2lint, the custom CVPorts are not supported * au build needs carla * More CI tweaks * Build headless version for plugin validation * Fix typo * Only show missing resources error message once Signed-off-by: falkTX <falktx@falktx.com> * Fallback to system path even if using a plugin bundle Signed-off-by: falkTX <falktx@falktx.com> * CI fixes, build full carla on Windows Signed-off-by: falkTX <falktx@falktx.com> * Rename script Signed-off-by: falkTX <falktx@falktx.com> * Silly typo Signed-off-by: falkTX <falktx@falktx.com> * More CI tweaks, add windows installer Signed-off-by: falkTX <falktx@falktx.com> * Setup Carla paths for Windows Signed-off-by: falkTX <falktx@falktx.com> * Yet more tweaks Signed-off-by: falkTX <falktx@falktx.com> * Package carla on windows, use xvfb-run Signed-off-by: falkTX <falktx@falktx.com> * Test win32 build too Signed-off-by: falkTX <falktx@falktx.com> * Finalize rework Signed-off-by: falkTX <falktx@falktx.com>tags/22.03
| @@ -4,7 +4,7 @@ on: | |||||
| push: | push: | ||||
| env: | env: | ||||
| CACHE_VERSION: 7 | |||||
| CACHE_VERSION: 8 | |||||
| DEBIAN_FRONTEND: noninteractive | DEBIAN_FRONTEND: noninteractive | ||||
| HOMEBREW_NO_AUTO_UPDATE: 1 | HOMEBREW_NO_AUTO_UPDATE: 1 | ||||
| LIBGL_ALWAYS_SOFTWARE: 'true' | LIBGL_ALWAYS_SOFTWARE: 'true' | ||||
| @@ -45,7 +45,7 @@ jobs: | |||||
| run: | | run: | | ||||
| pushd deps/PawPaw; source local.env linux-aarch64; popd | pushd deps/PawPaw; source local.env linux-aarch64; popd | ||||
| make features | make features | ||||
| make NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| make unzipfx | make unzipfx | ||||
| - name: Set sha8 (non-release) | - name: Set sha8 (non-release) | ||||
| if: startsWith(github.ref, 'refs/tags/') != true | if: startsWith(github.ref, 'refs/tags/') != true | ||||
| @@ -111,7 +111,7 @@ jobs: | |||||
| run: | | run: | | ||||
| pushd deps/PawPaw; source local.env linux-armhf; popd | pushd deps/PawPaw; source local.env linux-armhf; popd | ||||
| make features | make features | ||||
| make NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| make unzipfx | make unzipfx | ||||
| - name: Set sha8 (non-release) | - name: Set sha8 (non-release) | ||||
| if: startsWith(github.ref, 'refs/tags/') != true | if: startsWith(github.ref, 'refs/tags/') != true | ||||
| @@ -173,7 +173,7 @@ jobs: | |||||
| run: | | run: | | ||||
| pushd deps/PawPaw; source local.env linux-i686; popd | pushd deps/PawPaw; source local.env linux-i686; popd | ||||
| make features | make features | ||||
| make NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| make unzipfx | make unzipfx | ||||
| - name: Set sha8 (non-release) | - name: Set sha8 (non-release) | ||||
| if: startsWith(github.ref, 'refs/tags/') != true | if: startsWith(github.ref, 'refs/tags/') != true | ||||
| @@ -227,7 +227,7 @@ jobs: | |||||
| run: | | run: | | ||||
| pushd deps/PawPaw; source local.env linux; popd | pushd deps/PawPaw; source local.env linux; popd | ||||
| make features | make features | ||||
| make NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| make unzipfx | make unzipfx | ||||
| - name: Set sha8 (non-release) | - name: Set sha8 (non-release) | ||||
| if: startsWith(github.ref, 'refs/tags/') != true | if: startsWith(github.ref, 'refs/tags/') != true | ||||
| @@ -340,18 +340,18 @@ jobs: | |||||
| run: | | run: | | ||||
| pushd deps/PawPaw; source local.env macos-universal; popd | pushd deps/PawPaw; source local.env macos-universal; popd | ||||
| make features | make features | ||||
| make NOOPT=true WITH_LTO=true -j $(sysctl -n hw.logicalcpu) | |||||
| make CIBUILD=true NOOPT=true WITH_LTO=true -j $(sysctl -n hw.logicalcpu) | |||||
| - name: Build macOS universal (AU using juce) | - name: Build macOS universal (AU using juce) | ||||
| run: | | run: | | ||||
| pushd deps/PawPaw; source local.env macos-universal; popd | pushd deps/PawPaw; source local.env macos-universal; popd | ||||
| git clone --depth=1 -b master https://github.com/juce-framework/JUCE.git jucewrapper/JUCE | git clone --depth=1 -b master https://github.com/juce-framework/JUCE.git jucewrapper/JUCE | ||||
| mkdir jucewrapper/build | mkdir jucewrapper/build | ||||
| pushd jucewrapper/build; cmake .. && make -j $(sysctl -n hw.logicalcpu); popd | |||||
| mv jucewrapper/build/*_artefacts/AU/*.component bin/ | |||||
| pushd jucewrapper/build; cmake -DCMAKE_OSX_ARCHITECTURES='arm64;x86_64' -DCMAKE_OSX_DEPLOYMENT_TARGET=10.12 -DCMAKE_BUILD_TYPE=Release .. && make -j $(sysctl -n hw.logicalcpu); popd | |||||
| mv jucewrapper/build/*_artefacts/Release/AU/*.component bin/ | |||||
| - name: Build macOS universal (packaging) | - name: Build macOS universal (packaging) | ||||
| run: | | run: | | ||||
| pushd deps/PawPaw; source local.env macos-universal; popd | pushd deps/PawPaw; source local.env macos-universal; popd | ||||
| ./dpf/utils/package-osx-bundles.sh | |||||
| ./utils/create-macos-installer.sh | |||||
| - name: Set sha8 (non-release) | - name: Set sha8 (non-release) | ||||
| if: startsWith(github.ref, 'refs/tags/') != true | if: startsWith(github.ref, 'refs/tags/') != true | ||||
| id: slug1 | id: slug1 | ||||
| @@ -519,15 +519,27 @@ jobs: | |||||
| run: | | run: | | ||||
| sudo dpkg --add-architecture i386 | sudo dpkg --add-architecture i386 | ||||
| sudo apt-get update -qq | sudo apt-get update -qq | ||||
| sudo apt-get install -yqq binutils-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64 wine-stable:i386 | |||||
| sudo apt-get install -yqq binutils-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64 wine-stable:i386 xvfb | |||||
| - name: Build extra dependencies | - name: Build extra dependencies | ||||
| run: | | run: | | ||||
| ./deps/PawPaw/bootstrap-cardinal.sh win32 | ./deps/PawPaw/bootstrap-cardinal.sh win32 | ||||
| - name: Build win32 cross-compiled | |||||
| - name: Build win32 cross-compiled (base) | |||||
| run: | | run: | | ||||
| pushd deps/PawPaw; source local.env win32; popd | pushd deps/PawPaw; source local.env win32; popd | ||||
| make features | make features | ||||
| make NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| - name: Build win64 cross-compiled (carla) | |||||
| run: | | |||||
| pushd deps/PawPaw; source local.env win32; popd | |||||
| make distclean -C carla | |||||
| make -C carla EXTERNAL_PLUGINS=true HAVE_DGL=false HAVE_HYLIA=false HAVE_JACK=false HAVE_LIBLO=false HAVE_ZYN_DEPS=false HAVE_ZYN_UI_DEPS=false USING_JUCE=false USING_JUCE_AUDIO_DEVICES=false USING_JUCE_GUI_EXTRA=false USING_RTAUDIO=false -j $(nproc) | |||||
| make -C carla TESTING=true _CARLA_LV2_PLUGIN_FILES= _CARLA_VST2_PLUGIN_FILES= dist | |||||
| make -C carla TESTING=true _CARLA_LV2_PLUGIN_FILES= _CARLA_VST2_PLUGIN_FILES= dist | |||||
| make -C carla TESTING=true _CARLA_LV2_PLUGIN_FILES= _CARLA_VST2_PLUGIN_FILES= dist | |||||
| - name: Build win64 cross-compiled (packaging) | |||||
| run: | | |||||
| pushd deps/PawPaw; source local.env win32; popd | |||||
| xvfb-run ./utils/create-windows-installer.sh 32 | |||||
| - name: Set sha8 (non-release) | - name: Set sha8 (non-release) | ||||
| if: startsWith(github.ref, 'refs/tags/') != true | if: startsWith(github.ref, 'refs/tags/') != true | ||||
| id: slug1 | id: slug1 | ||||
| @@ -546,6 +558,7 @@ jobs: | |||||
| with: | with: | ||||
| name: ${{ github.event.repository.name }}-win32-${{ github.event.pull_request.number || steps.slug.outputs.sha8 }} | name: ${{ github.event.repository.name }}-win32-${{ github.event.pull_request.number || steps.slug.outputs.sha8 }} | ||||
| path: | | path: | | ||||
| *.exe | |||||
| *.zip | *.zip | ||||
| - uses: softprops/action-gh-release@v1 | - uses: softprops/action-gh-release@v1 | ||||
| if: startsWith(github.ref, 'refs/tags/') | if: startsWith(github.ref, 'refs/tags/') | ||||
| @@ -555,6 +568,7 @@ jobs: | |||||
| draft: false | draft: false | ||||
| prerelease: false | prerelease: false | ||||
| files: | | files: | | ||||
| *.exe | |||||
| *.zip | *.zip | ||||
| win64: | win64: | ||||
| @@ -576,16 +590,29 @@ jobs: | |||||
| sudo apt-get install -yqq --allow-downgrades libpcre2-8-0/focal libpcre2-16-0/focal libpcre2-32-0/focal libpcre2-posix2/focal | sudo apt-get install -yqq --allow-downgrades libpcre2-8-0/focal libpcre2-16-0/focal libpcre2-32-0/focal libpcre2-posix2/focal | ||||
| - name: Set up dependencies | - name: Set up dependencies | ||||
| run: | | run: | | ||||
| sudo dpkg --add-architecture i386 | |||||
| sudo apt-get update -qq | sudo apt-get update -qq | ||||
| sudo apt-get install -yqq binutils-mingw-w64-x86-64 g++-mingw-w64-x86-64 mingw-w64 wine-stable | |||||
| sudo apt-get install -yqq binutils-mingw-w64-x86-64 g++-mingw-w64-x86-64 mingw-w64 wine-stable xvfb | |||||
| - name: Build extra dependencies | - name: Build extra dependencies | ||||
| run: | | run: | | ||||
| ./deps/PawPaw/bootstrap-cardinal.sh win64 | ./deps/PawPaw/bootstrap-cardinal.sh win64 | ||||
| - name: Build win64 cross-compiled | |||||
| - name: Build win64 cross-compiled (base) | |||||
| run: | | run: | | ||||
| pushd deps/PawPaw; source local.env win64; popd | pushd deps/PawPaw; source local.env win64; popd | ||||
| make features | make features | ||||
| make NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| make CIBUILD=true NOOPT=true WITH_LTO=true -j $(nproc) | |||||
| - name: Build win64 cross-compiled (carla) | |||||
| run: | | |||||
| pushd deps/PawPaw; source local.env win64; popd | |||||
| make distclean -C carla | |||||
| make -C carla EXTERNAL_PLUGINS=true HAVE_DGL=false HAVE_HYLIA=false HAVE_JACK=false HAVE_LIBLO=false HAVE_ZYN_DEPS=false HAVE_ZYN_UI_DEPS=false USING_JUCE=false USING_JUCE_AUDIO_DEVICES=false USING_JUCE_GUI_EXTRA=false USING_RTAUDIO=false all win32r -j $(nproc) | |||||
| make -C carla TESTING=true _CARLA_LV2_PLUGIN_FILES= _CARLA_VST2_PLUGIN_FILES= dist | |||||
| make -C carla TESTING=true _CARLA_LV2_PLUGIN_FILES= _CARLA_VST2_PLUGIN_FILES= dist | |||||
| make -C carla TESTING=true _CARLA_LV2_PLUGIN_FILES= _CARLA_VST2_PLUGIN_FILES= dist | |||||
| - name: Build win64 cross-compiled (packaging) | |||||
| run: | | |||||
| pushd deps/PawPaw; source local.env win64; popd | |||||
| xvfb-run ./utils/create-windows-installer.sh 64 | |||||
| - name: Set sha8 (non-release) | - name: Set sha8 (non-release) | ||||
| if: startsWith(github.ref, 'refs/tags/') != true | if: startsWith(github.ref, 'refs/tags/') != true | ||||
| id: slug1 | id: slug1 | ||||
| @@ -604,6 +631,7 @@ jobs: | |||||
| with: | with: | ||||
| name: ${{ github.event.repository.name }}-win64-${{ github.event.pull_request.number || steps.slug.outputs.sha8 }} | name: ${{ github.event.repository.name }}-win64-${{ github.event.pull_request.number || steps.slug.outputs.sha8 }} | ||||
| path: | | path: | | ||||
| *.exe | |||||
| *.zip | *.zip | ||||
| - uses: softprops/action-gh-release@v1 | - uses: softprops/action-gh-release@v1 | ||||
| if: startsWith(github.ref, 'refs/tags/') | if: startsWith(github.ref, 'refs/tags/') | ||||
| @@ -613,6 +641,7 @@ jobs: | |||||
| draft: false | draft: false | ||||
| prerelease: false | prerelease: false | ||||
| files: | | files: | | ||||
| *.exe | |||||
| *.zip | *.zip | ||||
| source-tarball: | source-tarball: | ||||
| @@ -672,17 +701,17 @@ jobs: | |||||
| sudo dpkg -i kxstudio-repos_10.0.3_all.deb | sudo dpkg -i kxstudio-repos_10.0.3_all.deb | ||||
| sudo apt-get update -qq | sudo apt-get update -qq | ||||
| # build-deps | # build-deps | ||||
| sudo apt-get install -yqq libgl1-mesa-dev liblo-dev libx11-dev libxcursor-dev libxext-dev libxrandr-dev | |||||
| sudo apt-get install -yqq liblo-dev | |||||
| # runtime testing | # runtime testing | ||||
| sudo apt-get install -yqq carla-git lilv-utils lv2-dev lv2lint valgrind | sudo apt-get install -yqq carla-git lilv-utils lv2-dev lv2lint valgrind | ||||
| - name: Build plugins | |||||
| - name: Build Cardinal | |||||
| env: | env: | ||||
| CFLAGS: -g | CFLAGS: -g | ||||
| CXXFLAGS: -g -DDPF_ABORT_ON_ERROR | CXXFLAGS: -g -DDPF_ABORT_ON_ERROR | ||||
| LDFLAGS: -static-libgcc -static-libstdc++ | LDFLAGS: -static-libgcc -static-libstdc++ | ||||
| run: | | run: | | ||||
| make features | |||||
| make NOOPT=true SKIP_STRIPPING=true -j $(nproc) | |||||
| make HEADLESS=true features | |||||
| make HEADLESS=true NOOPT=true NOPLUGINS=true STATIC_BUILD=true SKIP_STRIPPING=true -j $(nproc) | |||||
| - name: Validate LV2 ttl syntax | - name: Validate LV2 ttl syntax | ||||
| run: | | run: | | ||||
| lv2_validate \ | lv2_validate \ | ||||
| @@ -691,14 +720,14 @@ jobs: | |||||
| /usr/lib/lv2/kx-control-input-port-change-request.lv2/*.ttl \ | /usr/lib/lv2/kx-control-input-port-change-request.lv2/*.ttl \ | ||||
| /usr/lib/lv2/kx-programs.lv2/*.ttl \ | /usr/lib/lv2/kx-programs.lv2/*.ttl \ | ||||
| ./bin/*.lv2/*.ttl | ./bin/*.lv2/*.ttl | ||||
| #- name: Validate LV2 metadata and binaries | |||||
| #run: | | |||||
| #export LV2_PATH=/tmp/lv2-path | |||||
| #mkdir ${LV2_PATH} | |||||
| #cp -r bin/*.lv2 \ | |||||
| #/usr/lib/lv2/{atom,buf-size,core,data-access,kx-control-input-port-change-request,kx-programs,instance-access,midi,parameters,port-groups,port-props,options,patch,presets,resize-port,state,time,ui,units,urid,worker}.lv2 \ | |||||
| #${LV2_PATH} | |||||
| #lv2lint -s lv2_generate_ttl -l ld-linux-x86-64.so.2 -M nopack $(lv2ls) | |||||
| - name: Validate LV2 metadata and binaries | |||||
| run: | | |||||
| export LV2_PATH=/tmp/lv2-path | |||||
| mkdir ${LV2_PATH} | |||||
| cp -r bin/CardinalFX.lv2 bin/CardinalSynth.lv2 \ | |||||
| /usr/lib/lv2/{atom,buf-size,core,data-access,kx-control-input-port-change-request,kx-programs,instance-access,midi,mod,parameters,port-groups,port-props,options,patch,presets,resize-port,state,time,ui,units,urid,worker}.lv2 \ | |||||
| ${LV2_PATH} | |||||
| lv2lint -s lv2_generate_ttl -l ld-linux-x86-64.so.2 -M nopack $(lv2ls) | |||||
| - name: Test LV2 plugin | - name: Test LV2 plugin | ||||
| run: | | run: | | ||||
| export LV2_PATH=/tmp/lv2-path | export LV2_PATH=/tmp/lv2-path | ||||
| @@ -711,27 +740,25 @@ jobs: | |||||
| --suppressions=./dpf/utils/valgrind-dpf.supp \ | --suppressions=./dpf/utils/valgrind-dpf.supp \ | ||||
| /usr/lib/carla/carla-bridge-native lv2 "" ${p} 1>/dev/null; \ | /usr/lib/carla/carla-bridge-native lv2 "" ${p} 1>/dev/null; \ | ||||
| done | done | ||||
| # - name: Test VST2 plugin | |||||
| # env: | |||||
| # CARLA_DO_NOT_USE_JUCE_FOR_VST2: 1 | |||||
| # run: | | |||||
| # for p in $(ls bin/*.vst/*.so); do \ | |||||
| # env CARLA_BRIDGE_DUMMY=1 CARLA_BRIDGE_TESTING=native \ | |||||
| # valgrind \ | |||||
| # --error-exitcode=255 \ | |||||
| # --leak-check=no \ | |||||
| # --track-origins=yes \ | |||||
| # --suppressions=./dpf/utils/valgrind-dpf.supp \ | |||||
| # /usr/lib/carla/carla-bridge-native vst2 ./${p} "" 1>/dev/null; \ | |||||
| # done | |||||
| # - name: Test VST3 plugin | |||||
| # run: | | |||||
| # for p in $(ls bin/ | grep vst3); do \ | |||||
| # env CARLA_BRIDGE_DUMMY=1 CARLA_BRIDGE_TESTING=native \ | |||||
| # valgrind \ | |||||
| # --error-exitcode=255 \ | |||||
| # --leak-check=no \ | |||||
| # --track-origins=yes \ | |||||
| # --suppressions=./dpf/utils/valgrind-dpf.supp \ | |||||
| # /usr/lib/carla/carla-bridge-native vst3 ./bin/${p} "" 1>/dev/null; \ | |||||
| # done | |||||
| - name: Test VST2 plugin | |||||
| run: | | |||||
| for p in $(ls bin/*.vst/*.so); do \ | |||||
| env CARLA_BRIDGE_DUMMY=1 CARLA_BRIDGE_TESTING=native \ | |||||
| valgrind \ | |||||
| --error-exitcode=255 \ | |||||
| --leak-check=no \ | |||||
| --track-origins=yes \ | |||||
| --suppressions=./dpf/utils/valgrind-dpf.supp \ | |||||
| /usr/lib/carla/carla-bridge-native vst2 ./${p} "" 1>/dev/null; \ | |||||
| done | |||||
| - name: Test VST3 plugin | |||||
| run: | | |||||
| for p in $(ls bin/ | grep vst3); do \ | |||||
| env CARLA_BRIDGE_DUMMY=1 CARLA_BRIDGE_TESTING=native \ | |||||
| valgrind \ | |||||
| --error-exitcode=255 \ | |||||
| --leak-check=no \ | |||||
| --track-origins=yes \ | |||||
| --suppressions=./dpf/utils/valgrind-dpf.supp \ | |||||
| /usr/lib/carla/carla-bridge-native vst3 ./bin/${p} "" 1>/dev/null; \ | |||||
| done | |||||
| @@ -15,3 +15,5 @@ | |||||
| bin/ | bin/ | ||||
| build/ | build/ | ||||
| documentation.pdf | documentation.pdf | ||||
| utils/inno/resources.iss | |||||
| utils/inno/version.iss | |||||
| @@ -404,6 +404,9 @@ tarball+deps: download | |||||
| rm -f ../cardinal+deps-$(VERSION).tar.xz | rm -f ../cardinal+deps-$(VERSION).tar.xz | ||||
| tar -c --lzma $(TAR_ARGS) -f ../cardinal+deps-$(VERSION).tar.xz . | tar -c --lzma $(TAR_ARGS) -f ../cardinal+deps-$(VERSION).tar.xz . | ||||
| version: | |||||
| @echo $(VERSION) | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| .PHONY: carla deps plugins | .PHONY: carla deps plugins | ||||
| @@ -3,7 +3,7 @@ | |||||
| *Cardinal, the Rack!* | *Cardinal, the Rack!* | ||||
| Cardinal is a free and open-source virtual modular synthesizer plugin, | Cardinal is a free and open-source virtual modular synthesizer plugin, | ||||
| available as JACK standalone and LV2, VST2 and VST3 audio plugin for FreeBSD, Linux, macOS and Windows. | |||||
| available as JACK standalone and AU, LV2, VST2 and VST3 audio plugin for FreeBSD, Linux, macOS and Windows. | |||||
| It is based on the popular [VCV Rack](https://vcvrack.com/) but with a focus on being a fully self-contained plugin version. | It is based on the popular [VCV Rack](https://vcvrack.com/) but with a focus on being a fully self-contained plugin version. | ||||
| More specifically, this is a [DPF-based](https://github.com/DISTRHO/DPF/) | More specifically, this is a [DPF-based](https://github.com/DISTRHO/DPF/) | ||||
| @@ -19,7 +19,6 @@ All "Core" modules from Rack have been replaced by Cardinal equivalents, simplif | |||||
| Cardinal does not load external modules and does not connect to the official Rack library/store. | Cardinal does not load external modules and does not connect to the official Rack library/store. | ||||
| All VCV branding has been removed (to the best of our knowledge) in order to avoid any trademark issues. | All VCV branding has been removed (to the best of our knowledge) in order to avoid any trademark issues. | ||||
| Because it is using DPF, Cardinal already supports LV2 and VST2 with an extra JACK standalone mode for some systems. | |||||
| The VST3 version is in progress, already part of the build but still experimental. | The VST3 version is in progress, already part of the build but still experimental. | ||||
| @@ -36,7 +35,7 @@ All variants have MIDI input and output support. | |||||
| This variant provides 8 audio inputs and outputs and 10 CV inputs and outputs. | This variant provides 8 audio inputs and outputs and 10 CV inputs and outputs. | ||||
| NOTE: Due to VST2 format not supporting CV ports, this variant is not available for VST2. | |||||
| NOTE: Due to AU and VST2 formats not supporting CV ports, this variant is not available for those formats. | |||||
| ### Synth | ### Synth | ||||
| @@ -1 +1 @@ | |||||
| Subproject commit cc201866d35449bce0d9e02a85f641aa071437b8 | |||||
| Subproject commit 4834b2e078af3d47dde45cab88bbdfe33ec90738 | |||||
| @@ -21,6 +21,7 @@ Bellow follows a list of features comparing the official plugin to Cardinal. | |||||
| | Loads external modules | Yes | No | | | | Loads external modules | Yes | No | | | ||||
| | Supports closed-source modules | Yes | No | | | | Supports closed-source modules | Yes | No | | | ||||
| | Supports physical devices | Yes | No | Audio + MIDI only through the DAW/Host or via JACK in standalone | | | Supports physical devices | Yes | No | Audio + MIDI only through the DAW/Host or via JACK in standalone | | ||||
| | Plugin in AU format | No | Yes | | | |||||
| | Plugin in LV2 format | No | Yes | | | | Plugin in LV2 format | No | Yes | | | ||||
| | Plugin in VST2 format | Yes | Yes | | | | Plugin in VST2 format | Yes | Yes | | | ||||
| | Plugin in VST3 format | No | WIP | | | | Plugin in VST3 format | No | WIP | | | ||||
| @@ -42,7 +43,6 @@ Bellow follows a list of features comparing the official plugin to Cardinal. | |||||
| Additionally, Cardinal contains the following built-in modules not present in the official plugin or standalone: | Additionally, Cardinal contains the following built-in modules not present in the official plugin or standalone: | ||||
| * Amalgamated Harmonics | |||||
| * Aria Salvatrice modules (except Arcane related modules, due to their online requirement) | * Aria Salvatrice modules (except Arcane related modules, due to their online requirement) | ||||
| * Mog (never updated to v2) | * Mog (never updated to v2) | ||||
| * mscHack (never updated to v2) | * mscHack (never updated to v2) | ||||
| @@ -1 +1 @@ | |||||
| Subproject commit 215fc2317efe822abf5eb545f422eedbb473693d | |||||
| Subproject commit 7cd27b17fbbd196beff8c1fcc209f10e9c24f274 | |||||
| @@ -99,6 +99,11 @@ struct CarlaModule : Module { | |||||
| CardinalExpanderFromCarlaMIDIToCV* midiOutExpander = nullptr; | CardinalExpanderFromCarlaMIDIToCV* midiOutExpander = nullptr; | ||||
| std::string patchStorage; | std::string patchStorage; | ||||
| #ifdef CARLA_OS_WIN | |||||
| // must keep string pointer valid | |||||
| std::string winResourceDir; | |||||
| #endif | |||||
| CarlaModule() | CarlaModule() | ||||
| : pcontext(static_cast<CardinalPluginContext*>(APP)) | : pcontext(static_cast<CardinalPluginContext*>(APP)) | ||||
| { | { | ||||
| @@ -138,10 +143,14 @@ struct CarlaModule : Module { | |||||
| binaryDir = "/Applications/Carla.app/Contents/MacOS"; | binaryDir = "/Applications/Carla.app/Contents/MacOS"; | ||||
| resourceDir = "/Applications/Carla.app/Contents/MacOS/resources"; | resourceDir = "/Applications/Carla.app/Contents/MacOS/resources"; | ||||
| } | } | ||||
| #elif defined(CARLA_OS_WINDOWS) | |||||
| // Carla does not support system-wide install on Windows right now | |||||
| if (false) | |||||
| #elif defined(CARLA_OS_WIN) | |||||
| const std::string winBinaryDir = system::join(asset::systemDir, "Carla"); | |||||
| if (system::exists(winBinaryDir)) | |||||
| { | { | ||||
| winResourceDir = system::join(winBinaryDir, "resources"); | |||||
| binaryDir = winBinaryDir.c_str(); | |||||
| resourceDir = winResourceDir.c_str(); | |||||
| } | } | ||||
| #else | #else | ||||
| if (system::exists("/usr/local/lib/carla")) | if (system::exists("/usr/local/lib/carla")) | ||||
| @@ -209,10 +209,14 @@ struct IldaeilModule : Module { | |||||
| carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/Applications/Carla.app/Contents/MacOS"); | carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/Applications/Carla.app/Contents/MacOS"); | ||||
| carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/Applications/Carla.app/Contents/MacOS/resources"); | carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/Applications/Carla.app/Contents/MacOS/resources"); | ||||
| } | } | ||||
| #elif defined(CARLA_OS_WINDOWS) | |||||
| // Carla does not support system-wide install on Windows right now | |||||
| if (false) | |||||
| #elif defined(CARLA_OS_WIN) | |||||
| const std::string winBinaryDir = system::join(asset::systemDir, "Carla"); | |||||
| if (system::exists(winBinaryDir)) | |||||
| { | { | ||||
| const std::string winResourceDir = system::join(winBinaryDir, "resources"); | |||||
| carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, winBinaryDir.c_str()); | |||||
| carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, winResourceDir.c_str()); | |||||
| } | } | ||||
| #else | #else | ||||
| if (system::exists("/usr/local/lib/carla")) | if (system::exists("/usr/local/lib/carla")) | ||||
| @@ -1051,10 +1051,8 @@ VST2_RESOURCES += $(PLUGIN_LIST:%=../bin/CardinalSynth.vst/Contents/Resources/Pl | |||||
| VST2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalFX.vst/Contents/Resources/%) | VST2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalFX.vst/Contents/Resources/%) | ||||
| VST2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalSynth.vst/Contents/Resources/%) | VST2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalSynth.vst/Contents/Resources/%) | ||||
| else | else | ||||
| VST2_RESOURCES = $(PLUGIN_LIST:%=../bin/CardinalFX.vst/resources/PluginManifests/%.json) | |||||
| VST2_RESOURCES += $(PLUGIN_LIST:%=../bin/CardinalSynth.vst/resources/PluginManifests/%.json) | |||||
| VST2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalFX.vst/resources/%) | |||||
| VST2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalSynth.vst/resources/%) | |||||
| VST2_RESOURCES = $(PLUGIN_LIST:%=../bin/Cardinal.vst/resources/PluginManifests/%.json) | |||||
| VST2_RESOURCES += $(RESOURCE_FILES:%=../bin/Cardinal.vst/resources/%) | |||||
| endif | endif | ||||
| VST3_RESOURCES = $(PLUGIN_LIST:%=../bin/Cardinal.vst3/Contents/Resources/PluginManifests/%.json) | VST3_RESOURCES = $(PLUGIN_LIST:%=../bin/Cardinal.vst3/Contents/Resources/PluginManifests/%.json) | ||||
| @@ -1138,19 +1136,11 @@ ifeq ($(MACOS),true) | |||||
| -@mkdir -p "$(shell dirname $@)" | -@mkdir -p "$(shell dirname $@)" | ||||
| $(SILENT)ln -sf $(abspath $<) $@ | $(SILENT)ln -sf $(abspath $<) $@ | ||||
| else | else | ||||
| ../bin/CardinalFX.vst/resources/%: % | |||||
| ../bin/Cardinal.vst/resources/%: % | |||||
| -@mkdir -p "$(shell dirname $@)" | -@mkdir -p "$(shell dirname $@)" | ||||
| $(SILENT)ln -sf $(abspath $<) $@ | $(SILENT)ln -sf $(abspath $<) $@ | ||||
| ../bin/CardinalSynth.vst/resources/%: % | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| $(SILENT)ln -sf $(abspath $<) $@ | |||||
| ../bin/CardinalFX.vst/resources/PluginManifests/%.json: %/plugin.json | |||||
| -@mkdir -p "$(shell dirname $@)" | |||||
| $(SILENT)ln -sf $(abspath $<) $@ | |||||
| ../bin/CardinalSynth.vst/resources/PluginManifests/%.json: %/plugin.json | |||||
| ../bin/Cardinal.vst/resources/PluginManifests/%.json: %/plugin.json | |||||
| -@mkdir -p "$(shell dirname $@)" | -@mkdir -p "$(shell dirname $@)" | ||||
| $(SILENT)ln -sf $(abspath $<) $@ | $(SILENT)ln -sf $(abspath $<) $@ | ||||
| endif | endif | ||||
| @@ -138,7 +138,7 @@ struct Initializer | |||||
| } | } | ||||
| } | } | ||||
| if (asset::systemDir.empty()) | |||||
| if (asset::systemDir.empty() || ! system::exists(asset::systemDir)) | |||||
| { | { | ||||
| #ifdef CARDINAL_PLUGIN_SOURCE_DIR | #ifdef CARDINAL_PLUGIN_SOURCE_DIR | ||||
| // Make system dir point to source code location as fallback | // Make system dir point to source code location as fallback | ||||
| @@ -151,11 +151,21 @@ struct Initializer | |||||
| // If source code dir does not exist use install target prefix as system dir | // If source code dir does not exist use install target prefix as system dir | ||||
| else | else | ||||
| #endif | #endif | ||||
| if (system::exists(CARDINAL_PLUGIN_PREFIX "/share/cardinal")) | |||||
| { | { | ||||
| asset::bundlePath = CARDINAL_PLUGIN_PREFIX "/share/cardinal/PluginManifests"; | |||||
| #if defined(ARCH_MAC) | |||||
| asset::systemDir = "/Library/Application Support/Cardinal"; | |||||
| #elif defined(ARCH_WIN) | |||||
| if (const char* const commonprogfiles = std::getenv("COMMONPROGRAMFILES")) | |||||
| asset::systemDir = system::join(commonprogfiles, "Cardinal"); | |||||
| #else | |||||
| asset::systemDir = CARDINAL_PLUGIN_PREFIX "/share/cardinal"; | asset::systemDir = CARDINAL_PLUGIN_PREFIX "/share/cardinal"; | ||||
| templatePath = system::join(asset::systemDir, "template.vcv"); | |||||
| #endif | |||||
| if (! asset::systemDir.empty()) | |||||
| { | |||||
| asset::bundlePath = system::join(asset::systemDir, "PluginManifests"); | |||||
| templatePath = system::join(asset::systemDir, "template.vcv"); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -325,7 +325,15 @@ public: | |||||
| } | } | ||||
| if (! errorMessage.empty()) | if (! errorMessage.empty()) | ||||
| asyncDialog::create(errorMessage.c_str()); | |||||
| { | |||||
| static bool shown = false; | |||||
| if (! shown) | |||||
| { | |||||
| shown = true; | |||||
| asyncDialog::create(errorMessage.c_str()); | |||||
| } | |||||
| } | |||||
| context->window->step(); | context->window->step(); | ||||
| @@ -171,21 +171,26 @@ endif | |||||
| TARGET = rack.a | TARGET = rack.a | ||||
| ifneq ($(MACOS),true) | |||||
| CARDINAL_FX_ARGS = VST2_FILENAME=Cardinal.vst/CardinalFX$(LIB_EXT) | |||||
| CARDINAL_SYNTH_ARGS = VST2_FILENAME=Cardinal.vst/CardinalSynth$(LIB_EXT) | |||||
| endif | |||||
| all: $(TARGET) | all: $(TARGET) | ||||
| ifeq ($(MOD_BUILD),true) | ifeq ($(MOD_BUILD),true) | ||||
| $(MAKE) -C CardinalFX lv2 | $(MAKE) -C CardinalFX lv2 | ||||
| else | else | ||||
| $(MAKE) -C Cardinal | $(MAKE) -C Cardinal | ||||
| $(MAKE) -C CardinalFX | |||||
| $(MAKE) -C CardinalSynth | |||||
| $(MAKE) -C CardinalFX $(CARDINAL_FX_ARGS) | |||||
| $(MAKE) -C CardinalSynth $(CARDINAL_SYNTH_ARGS) | |||||
| endif | endif | ||||
| clean: | clean: | ||||
| rm -f $(TARGET) | rm -f $(TARGET) | ||||
| rm -rf $(BUILD_DIR) | rm -rf $(BUILD_DIR) | ||||
| $(MAKE) clean -C Cardinal | $(MAKE) clean -C Cardinal | ||||
| $(MAKE) clean -C CardinalFX | |||||
| $(MAKE) clean -C CardinalSynth | |||||
| $(MAKE) clean -C CardinalFX $(CARDINAL_FX_ARGS) | |||||
| $(MAKE) clean -C CardinalSynth $(CARDINAL_SYNTH_ARGS) | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| # Build commands | # Build commands | ||||
| @@ -235,6 +235,7 @@ endif | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| # fallback path to resource files | # fallback path to resource files | ||||
| ifneq ($(CIBUILD),true) | |||||
| ifneq ($(SYSDEPS),true) | ifneq ($(SYSDEPS),true) | ||||
| ifeq ($(EXE_WRAPPER),wine) | ifeq ($(EXE_WRAPPER),wine) | ||||
| @@ -245,6 +246,7 @@ endif | |||||
| BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_SOURCE_DIR='"$(SOURCE_DIR)"' | BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_SOURCE_DIR='"$(SOURCE_DIR)"' | ||||
| endif | |||||
| endif | endif | ||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| @@ -256,8 +258,12 @@ BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"' | |||||
| # Enable all possible plugin types and setup resources | # Enable all possible plugin types and setup resources | ||||
| ifeq ($(CARDINAL_VARIANT),main) | ifeq ($(CARDINAL_VARIANT),main) | ||||
| ifneq ($(STATIC_BUILD),true) | |||||
| all: jack lv2 vst3 | all: jack lv2 vst3 | ||||
| else | else | ||||
| all: lv2 vst3 | |||||
| endif # STATIC_BUILD | |||||
| else | |||||
| all: lv2 vst2 vst3 static | all: lv2 vst2 vst3 static | ||||
| endif | endif | ||||
| @@ -284,7 +290,7 @@ ifneq ($(CARDINAL_VARIANT),main) | |||||
| ifeq ($(MACOS),true) | ifeq ($(MACOS),true) | ||||
| VST2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).vst/Contents/Resources/%) | VST2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).vst/Contents/Resources/%) | ||||
| else | else | ||||
| VST2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).vst/resources/%) | |||||
| VST2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/Cardinal.vst/resources/%) | |||||
| endif | endif | ||||
| endif | endif | ||||
| @@ -294,7 +300,7 @@ vst3: $(VST3_RESOURCES) | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| $(TARGET_DIR)/$(NAME).%/template.vcv: ../template.vcv | |||||
| $(TARGET_DIR)/%/template.vcv: ../template.vcv | |||||
| -@mkdir -p "$(shell dirname $@)" | -@mkdir -p "$(shell dirname $@)" | ||||
| $(SILENT)ln -sf $(abspath $<) $@ | $(SILENT)ln -sf $(abspath $<) $@ | ||||
| @@ -315,7 +321,7 @@ $(TARGET_DIR)/$(NAME).lv2/modgui/documentation.pdf: ../../docs/MODDEVICES.md $(T | |||||
| (cd ../../docs/ && pandoc MODDEVICES.md -f markdown+implicit_figures -o $(abspath $@)) | (cd ../../docs/ && pandoc MODDEVICES.md -f markdown+implicit_figures -o $(abspath $@)) | ||||
| endif | endif | ||||
| $(TARGET_DIR)/$(NAME).vst/resources/%: ../Rack/res/% | |||||
| $(TARGET_DIR)/Cardinal.vst/resources/%: ../Rack/res/% | |||||
| -@mkdir -p "$(shell dirname $@)" | -@mkdir -p "$(shell dirname $@)" | ||||
| $(SILENT)ln -sf $(abspath $<) $@ | $(SILENT)ln -sf $(abspath $<) $@ | ||||
| @@ -46,6 +46,10 @@ | |||||
| # undef DEBUG | # undef DEBUG | ||||
| #endif | #endif | ||||
| #ifdef STATIC_BUILD | |||||
| # undef HAVE_LIBLO | |||||
| #endif | |||||
| #ifdef HAVE_LIBLO | #ifdef HAVE_LIBLO | ||||
| # include <lo/lo.h> | # include <lo/lo.h> | ||||
| #endif | #endif | ||||
| @@ -53,7 +53,7 @@ const std::string APP_VERSION_MAJOR = "2"; | |||||
| const std::string APP_VERSION = "2.1"; | const std::string APP_VERSION = "2.1"; | ||||
| #if defined ARCH_WIN | #if defined ARCH_WIN | ||||
| const std::string APP_OS = "win"; | const std::string APP_OS = "win"; | ||||
| #elif ARCH_MAC | |||||
| #elif defined ARCH_MAC | |||||
| const std::string APP_OS = "mac"; | const std::string APP_OS = "mac"; | ||||
| #elif defined ARCH_LIN | #elif defined ARCH_LIN | ||||
| const std::string APP_OS = "lin"; | const std::string APP_OS = "lin"; | ||||
| @@ -0,0 +1,67 @@ | |||||
| #!/bin/bash | |||||
| set -e | |||||
| if [ -d bin ]; then | |||||
| cd bin | |||||
| else | |||||
| echo "Please run this script from the root folder" | |||||
| exit | |||||
| fi | |||||
| rm -rf res | |||||
| rm -rf au | |||||
| rm -rf lv2 | |||||
| rm -rf vst2 | |||||
| rm -rf vst3 | |||||
| mkdir au lv2 vst2 vst3 | |||||
| mv *.component au/ | |||||
| mv *.lv2 lv2/ | |||||
| mv *.vst vst2/ | |||||
| mv *.vst3 vst3/ | |||||
| cp -RL lv2/Cardinal.lv2/resources res | |||||
| rm -rf lv2/*.lv2/resources | |||||
| rm -rf vst2/*.vst/Contents/Resources | |||||
| rm -rf vst3/*.vst3/Contents/Resources | |||||
| pkgbuild \ | |||||
| --identifier "studio.kx.distrho.cardinal.resources" \ | |||||
| --install-location "/Library/Application Support/Cardinal/" \ | |||||
| --root "${PWD}/res/" \ | |||||
| ../dpf-cardinal-resources.pkg | |||||
| pkgbuild \ | |||||
| --identifier "studio.kx.distrho.plugins.cardinal.components" \ | |||||
| --install-location "/Library/Audio/Plug-Ins/Components/" \ | |||||
| --root "${PWD}/au/" \ | |||||
| ../dpf-cardinal-components.pkg | |||||
| pkgbuild \ | |||||
| --identifier "studio.kx.distrho.plugins.cardinal.lv2bundles" \ | |||||
| --install-location "/Library/Audio/Plug-Ins/LV2/" \ | |||||
| --root "${PWD}/lv2/" \ | |||||
| ../dpf-cardinal-lv2bundles.pkg | |||||
| pkgbuild \ | |||||
| --identifier "studio.kx.distrho.plugins.cardinal.vst2bundles" \ | |||||
| --install-location "/Library/Audio/Plug-Ins/VST/" \ | |||||
| --root "${PWD}/vst2/" \ | |||||
| ../dpf-cardinal-vst2bundles.pkg | |||||
| pkgbuild \ | |||||
| --identifier "studio.kx.distrho.plugins.cardinal.vst3bundles" \ | |||||
| --install-location "/Library/Audio/Plug-Ins/VST3/" \ | |||||
| --root "${PWD}/vst3/" \ | |||||
| ../dpf-cardinal-vst3bundles.pkg | |||||
| cd .. | |||||
| sed -e "s|@builddir@|${PWD}/build|" utils/plugin.pkg/package.xml.in > build/package.xml | |||||
| productbuild \ | |||||
| --distribution build/package.xml \ | |||||
| --identifier "studio.kx.distrho.cardinal" \ | |||||
| --package-path "${PWD}" \ | |||||
| --version 0 \ | |||||
| Cardinal-macOS.pkg | |||||
| @@ -0,0 +1,53 @@ | |||||
| #!/bin/bash | |||||
| set -e | |||||
| if [ ! -d bin ]; then | |||||
| echo "Please run this script from the root folder" | |||||
| exit | |||||
| fi | |||||
| # args | |||||
| bit=${1} | |||||
| bit=${bit:=64} | |||||
| # setup innosetup | |||||
| dlfile="${PWD}/bin/innosetup-6.0.5.exe" | |||||
| innodir="${PWD}/build/innosetup-6.0.5" | |||||
| iscc="${innodir}/drive_c/InnoSetup/ISCC.exe" | |||||
| # download it | |||||
| if [ ! -f "${dlfile}" ]; then | |||||
| # FIXME proper dl version | |||||
| curl -L https://jrsoftware.org/download.php/is.exe?site=2 -o "${dlfile}" | |||||
| fi | |||||
| # initialize wine | |||||
| if [ ! -d "${innodir}"/drive_c ]; then | |||||
| env WINEPREFIX="${innodir}" wineboot -u | |||||
| fi | |||||
| # install innosetup in custom wineprefix | |||||
| if [ ! -f "${innodir}"/drive_c/InnoSetup/ISCC.exe ]; then | |||||
| env WINEPREFIX="${innodir}" wine "${dlfile}" /allusers /dir=C:\\InnoSetup /nocancel /norestart /verysilent | |||||
| fi | |||||
| # generate resources | |||||
| echo -n "" > utils/inno/resources.iss | |||||
| IFS=' | |||||
| ' | |||||
| for f in $(find -L bin/Cardinal.lv2/resources/ -type f); do | |||||
| d=$(dirname $(echo ${f} | sed "s|bin/Cardinal.lv2/resources/||")) | |||||
| echo "Source: \"..\\..\\$(echo ${f} | tr '/' '\\')\"; DestDir: \"{commoncf${bit}}\\Cardinal\\$(echo ${d} | tr '/' '\\')\"; Components: resources; Flags: ignoreversion;" >> utils/inno/resources.iss | |||||
| done | |||||
| # generate version | |||||
| echo "#define VERSION \"$(make version)\"" > utils/inno/version.iss | |||||
| # create the installer file | |||||
| pushd "utils/inno" | |||||
| env WINEPREFIX="${innodir}" wine "${iscc}" "win${bit}.iss" | |||||
| popd | |||||
| # move installer file where CI expects it to be | |||||
| mv utils/inno/*.exe . | |||||
| @@ -0,0 +1,54 @@ | |||||
| #include "version.iss" | |||||
| [Setup] | |||||
| ArchitecturesInstallIn64BitMode=x64 | |||||
| AppName=Cardinal | |||||
| AppPublisher=DISTRHO | |||||
| AppPublisherURL=https://github.com/DISTRHO/Cardinal/ | |||||
| AppSupportURL=https://github.com/DISTRHO/Cardinal/issues/ | |||||
| AppUpdatesURL=https://github.com/DISTRHO/Cardinal/releases/ | |||||
| AppVersion={#VERSION} | |||||
| DefaultDirName={commonpf32}\Cardinal | |||||
| DisableDirPage=yes | |||||
| DisableWelcomePage=no | |||||
| LicenseFile=..\..\LICENSE | |||||
| OutputBaseFilename=Cardinal-win32-{#VERSION}-installer | |||||
| OutputDir=. | |||||
| UsePreviousAppDir=no | |||||
| [Types] | |||||
| Name: "full"; Description: "Full installation"; | |||||
| Name: "custom"; Description: "Custom installation"; Flags: iscustom; | |||||
| [Components] | |||||
| Name: resources; Description: "Resources"; Types: full custom; Flags: fixed; | |||||
| Name: carla; Description: "Carla/Ildaeil host tools"; Types: full; | |||||
| Name: lv2; Description: "LV2 plugin"; Types: full; | |||||
| Name: vst2; Description: "VST2 plugin"; Types: full; | |||||
| Name: vst3; Description: "VST3 plugin"; Types: full; | |||||
| [Files] | |||||
| #include "resources.iss" | |||||
| ; carla | |||||
| Source: "..\..\carla\bin\carla-bridge-*.*"; DestDir: "{commoncf32}\Cardinal\Carla"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\bin\carla-discovery-*.exe"; DestDir: "{commoncf32}\Cardinal\Carla"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\bin\libcarla_utils.dll"; DestDir: "{commoncf32}\Cardinal\Carla"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\libpython3.8.dll"; DestDir: "{commoncf32}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\Qt5*.dll"; DestDir: "{commoncf32}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\iconengines\*.*"; DestDir: "{commoncf32}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\imageformats\*.*"; DestDir: "{commoncf32}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\platforms\*.*"; DestDir: "{commoncf32}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\resources\*.*"; DestDir: "{commoncf32}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\styles\*.*"; DestDir: "{commoncf32}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\resources\lib\*.*"; DestDir: "{commoncf32}\Cardinal\Carla\resources\lib"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\resources\lib\PyQt5\*.*"; DestDir: "{commoncf32}\Cardinal\Carla\resources\lib\PyQt5"; Components: carla; Flags: ignoreversion; | |||||
| ; lv2 | |||||
| Source: "..\..\bin\Cardinal.lv2\*.*"; DestDir: "{commoncf32}\LV2\Cardinal.lv2"; Components: lv2; Flags: ignoreversion; | |||||
| Source: "..\..\bin\CardinalFX.lv2\*.*"; DestDir: "{commoncf32}\LV2\CardinalFX.lv2"; Components: lv2; Flags: ignoreversion; | |||||
| Source: "..\..\bin\CardinalSynth.lv2\*.*"; DestDir: "{commoncf32}\LV2\CardinalSynth.lv2"; Components: lv2; Flags: ignoreversion; | |||||
| ; vst2 | |||||
| Source: "..\..\bin\Cardinal.vst\*.*"; DestDir: "{commoncf32}\VST2\Cardinal.vst"; Components: vst2; Flags: ignoreversion; | |||||
| ; vst3 | |||||
| Source: "..\..\bin\Cardinal.vst3\Contents\x86-win\Cardinal.vst3"; DestDir: "{commoncf64}\VST3\Cardinal.vst3\Contents\x86-win"; Components: vst3; Flags: ignoreversion; | |||||
| Source: "..\..\bin\CardinalFX.vst3\Contents\x86-win\CardinalFX.vst3"; DestDir: "{commoncf64}\VST3\CardinalFX.vst3\Contents\x86-win"; Components: vst3; Flags: ignoreversion; | |||||
| Source: "..\..\bin\CardinalSynth.vst3\Contents\x86-win\CardinalSynth.vst3"; DestDir: "{commoncf64}\VST3\CardinalSynth.vst3\Contents\x86-win"; Components: vst3; Flags: ignoreversion; | |||||
| @@ -0,0 +1,54 @@ | |||||
| #include "version.iss" | |||||
| [Setup] | |||||
| ArchitecturesInstallIn64BitMode=x64 | |||||
| AppName=Cardinal | |||||
| AppPublisher=DISTRHO | |||||
| AppPublisherURL=https://github.com/DISTRHO/Cardinal/ | |||||
| AppSupportURL=https://github.com/DISTRHO/Cardinal/issues/ | |||||
| AppUpdatesURL=https://github.com/DISTRHO/Cardinal/releases/ | |||||
| AppVersion={#VERSION} | |||||
| DefaultDirName={commonpf64}\Cardinal | |||||
| DisableDirPage=yes | |||||
| DisableWelcomePage=no | |||||
| LicenseFile=..\..\LICENSE | |||||
| OutputBaseFilename=Cardinal-win64-{#VERSION}-installer | |||||
| OutputDir=. | |||||
| UsePreviousAppDir=no | |||||
| [Types] | |||||
| Name: "full"; Description: "Full installation"; | |||||
| Name: "custom"; Description: "Custom installation"; Flags: iscustom; | |||||
| [Components] | |||||
| Name: resources; Description: "Resources"; Types: full custom; Flags: fixed; | |||||
| Name: carla; Description: "Carla/Ildaeil host tools"; Types: full; | |||||
| Name: lv2; Description: "LV2 plugin"; Types: full; | |||||
| Name: vst2; Description: "VST2 plugin"; Types: full; | |||||
| Name: vst3; Description: "VST3 plugin"; Types: full; | |||||
| [Files] | |||||
| #include "resources.iss" | |||||
| ; carla | |||||
| Source: "..\..\carla\bin\carla-bridge-*.*"; DestDir: "{commoncf64}\Cardinal\Carla"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\bin\carla-discovery-*.exe"; DestDir: "{commoncf64}\Cardinal\Carla"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\bin\libcarla_utils.dll"; DestDir: "{commoncf64}\Cardinal\Carla"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\libpython3.8.dll"; DestDir: "{commoncf64}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\Qt5*.dll"; DestDir: "{commoncf64}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\iconengines\*.*"; DestDir: "{commoncf64}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\imageformats\*.*"; DestDir: "{commoncf64}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\platforms\*.*"; DestDir: "{commoncf64}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\resources\*.*"; DestDir: "{commoncf64}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\styles\*.*"; DestDir: "{commoncf64}\Cardinal\Carla\resources"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\resources\lib\*.*"; DestDir: "{commoncf64}\Cardinal\Carla\resources\lib"; Components: carla; Flags: ignoreversion; | |||||
| Source: "..\..\carla\build\Carla\resources\lib\PyQt5\*.*"; DestDir: "{commoncf64}\Cardinal\Carla\resources\lib\PyQt5"; Components: carla; Flags: ignoreversion; | |||||
| ; lv2 | |||||
| Source: "..\..\bin\Cardinal.lv2\*.*"; DestDir: "{commoncf64}\LV2\Cardinal.lv2"; Components: lv2; Flags: ignoreversion; | |||||
| Source: "..\..\bin\CardinalFX.lv2\*.*"; DestDir: "{commoncf64}\LV2\CardinalFX.lv2"; Components: lv2; Flags: ignoreversion; | |||||
| Source: "..\..\bin\CardinalSynth.lv2\*.*"; DestDir: "{commoncf64}\LV2\CardinalSynth.lv2"; Components: lv2; Flags: ignoreversion; | |||||
| ; vst2 | |||||
| Source: "..\..\bin\Cardinal.vst\*.*"; DestDir: "{commoncf64}\VST2\Cardinal.vst"; Components: vst2; Flags: ignoreversion; | |||||
| ; vst3 | |||||
| Source: "..\..\bin\Cardinal.vst3\Contents\x86_64-win\Cardinal.vst3"; DestDir: "{commoncf64}\VST3\Cardinal.vst3\Contents\x86_64-win"; Components: vst3; Flags: ignoreversion; | |||||
| Source: "..\..\bin\CardinalFX.vst3\Contents\x86_64-win\CardinalFX.vst3"; DestDir: "{commoncf64}\VST3\CardinalFX.vst3\Contents\x86_64-win"; Components: vst3; Flags: ignoreversion; | |||||
| Source: "..\..\bin\CardinalSynth.vst3\Contents\x86_64-win\CardinalSynth.vst3"; DestDir: "{commoncf64}\VST3\CardinalSynth.vst3\Contents\x86_64-win"; Components: vst3; Flags: ignoreversion; | |||||
| @@ -0,0 +1,31 @@ | |||||
| <?xml version="1.0" encoding="utf-8" standalone="no"?> | |||||
| <installer-gui-script minSpecVersion="1"> | |||||
| <title>Cardinal</title> | |||||
| <domains enable_anywhere="false" enable_currentUserHome="false" enable_localSystem="true" /> | |||||
| <license file="@builddir@/../LICENSE" mime-type="text/plain" /> | |||||
| <options customize="always" hostArchitectures="x86_64" require-scripts="false" rootVolumeOnly="true" /> | |||||
| <pkg-ref id="studio.kx.distrho.cardinal" /> | |||||
| <welcome file="@builddir@/welcome.txt" mime-type="text/plain" /> | |||||
| <choice id="studio.kx.distrho.cardinal-res" title="Resources" description="Install resources" visible="false"> | |||||
| <pkg-ref id="studio.kx.distrho.cardinal-resources" version="0">dpf-cardinal-resources.pkg</pkg-ref> | |||||
| </choice> | |||||
| <choice id="studio.kx.distrho.cardinal-au" title="AU" description="Install AU plugins" visible="true"> | |||||
| <pkg-ref id="studio.kx.distrho.cardinal-components" version="0">dpf-cardinal-components.pkg</pkg-ref> | |||||
| </choice> | |||||
| <choice id="studio.kx.distrho.cardinal-lv2" title="LV2" description="Install LV2 plugins" visible="true"> | |||||
| <pkg-ref id="studio.kx.distrho.cardinal-lv2bundles" version="0">dpf-cardinal-lv2bundles.pkg</pkg-ref> | |||||
| </choice> | |||||
| <choice id="studio.kx.distrho.cardinal-vst2" title="VST2" description="Install VST2 plugins" visible="true"> | |||||
| <pkg-ref id="studio.kx.distrho.cardinal-vst2bundles" version="0">dpf-cardinal-vst2bundles.pkg</pkg-ref> | |||||
| </choice> | |||||
| <choice id="studio.kx.distrho.cardinal-vst3" title="VST3" description="Install VST3 plugins" visible="true"> | |||||
| <pkg-ref id="studio.kx.distrho.cardinal-vst3bundles" version="0">dpf-cardinal-vst3bundles.pkg</pkg-ref> | |||||
| </choice> | |||||
| <choices-outline> | |||||
| <line choice="studio.kx.distrho.cardinal-res"/> | |||||
| <line choice="studio.kx.distrho.cardinal-au"/> | |||||
| <line choice="studio.kx.distrho.cardinal-lv2"/> | |||||
| <line choice="studio.kx.distrho.cardinal-vst2"/> | |||||
| <line choice="studio.kx.distrho.cardinal-vst3"/> | |||||
| </choices-outline> | |||||
| </installer-gui-script> | |||||
| @@ -0,0 +1,14 @@ | |||||
| Cardinal is a free and open-source virtual modular synthesizer plugin. | |||||
| It is based on the popular VCV Rack but with a focus on being a fully self-contained plugin version. | |||||
| Cardinal provides 3 plugin variants - "main", Synth and FX. | |||||
| They are all equivalent in performance and behaviour, with only the IO and metadata that changes. | |||||
| FX and Synth variants both have 2 audio outputs, while "main" has 8. | |||||
| All variants have MIDI input and output support. | |||||
| This package provides the AU, LV2, VST2 and VST3 audio plugins for macOS. | |||||
| Notes: | |||||
| - Due to AU and VST2 not supporting CV ports, the main variant is not available for these formats. | |||||
| - The VST3 version is in progress, already part of the build but still experimental. | |||||