Packaging fixes (#192)
* 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>
This commit is contained in:
parent
dbefe13bfb
commit
a1017be6ea
|
@ -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
|
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/AU/*.component bin/
|
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 HEADLESS=true features
|
||||||
make NOOPT=true SKIP_STRIPPING=true -j $(nproc)
|
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
|
- name: Validate LV2 metadata and binaries
|
||||||
#run: |
|
run: |
|
||||||
#export LV2_PATH=/tmp/lv2-path
|
export LV2_PATH=/tmp/lv2-path
|
||||||
#mkdir ${LV2_PATH}
|
mkdir ${LV2_PATH}
|
||||||
#cp -r bin/*.lv2 \
|
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,parameters,port-groups,port-props,options,patch,presets,resize-port,state,time,ui,units,urid,worker}.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}
|
${LV2_PATH}
|
||||||
#lv2lint -s lv2_generate_ttl -l ld-linux-x86-64.so.2 -M nopack $(lv2ls)
|
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
|
- name: Test VST2 plugin
|
||||||
# env:
|
run: |
|
||||||
# CARLA_DO_NOT_USE_JUCE_FOR_VST2: 1
|
for p in $(ls bin/*.vst/*.so); do \
|
||||||
# run: |
|
env CARLA_BRIDGE_DUMMY=1 CARLA_BRIDGE_TESTING=native \
|
||||||
# for p in $(ls bin/*.vst/*.so); do \
|
valgrind \
|
||||||
# env CARLA_BRIDGE_DUMMY=1 CARLA_BRIDGE_TESTING=native \
|
--error-exitcode=255 \
|
||||||
# valgrind \
|
--leak-check=no \
|
||||||
# --error-exitcode=255 \
|
--track-origins=yes \
|
||||||
# --leak-check=no \
|
--suppressions=./dpf/utils/valgrind-dpf.supp \
|
||||||
# --track-origins=yes \
|
/usr/lib/carla/carla-bridge-native vst2 ./${p} "" 1>/dev/null; \
|
||||||
# --suppressions=./dpf/utils/valgrind-dpf.supp \
|
done
|
||||||
# /usr/lib/carla/carla-bridge-native vst2 ./${p} "" 1>/dev/null; \
|
- name: Test VST3 plugin
|
||||||
# done
|
run: |
|
||||||
# - name: Test VST3 plugin
|
for p in $(ls bin/ | grep vst3); do \
|
||||||
# run: |
|
env CARLA_BRIDGE_DUMMY=1 CARLA_BRIDGE_TESTING=native \
|
||||||
# for p in $(ls bin/ | grep vst3); do \
|
valgrind \
|
||||||
# env CARLA_BRIDGE_DUMMY=1 CARLA_BRIDGE_TESTING=native \
|
--error-exitcode=255 \
|
||||||
# valgrind \
|
--leak-check=no \
|
||||||
# --error-exitcode=255 \
|
--track-origins=yes \
|
||||||
# --leak-check=no \
|
--suppressions=./dpf/utils/valgrind-dpf.supp \
|
||||||
# --track-origins=yes \
|
/usr/lib/carla/carla-bridge-native vst3 ./bin/${p} "" 1>/dev/null; \
|
||||||
# --suppressions=./dpf/utils/valgrind-dpf.supp \
|
done
|
||||||
# /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
|
||||||
|
|
3
Makefile
3
Makefile
|
@ -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)
|
||||||
|
|
2
dpf
2
dpf
|
@ -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)
|
#elif defined(CARLA_OS_WIN)
|
||||||
// Carla does not support system-wide install on Windows right now
|
const std::string winBinaryDir = system::join(asset::systemDir, "Carla");
|
||||||
if (false)
|
|
||||||
|
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)
|
#elif defined(CARLA_OS_WIN)
|
||||||
// Carla does not support system-wide install on Windows right now
|
const std::string winBinaryDir = system::join(asset::systemDir, "Carla");
|
||||||
if (false)
|
|
||||||
|
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/Cardinal.vst/resources/PluginManifests/%.json)
|
||||||
VST2_RESOURCES += $(PLUGIN_LIST:%=../bin/CardinalSynth.vst/resources/PluginManifests/%.json)
|
VST2_RESOURCES += $(RESOURCE_FILES:%=../bin/Cardinal.vst/resources/%)
|
||||||
VST2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalFX.vst/resources/%)
|
|
||||||
VST2_RESOURCES += $(RESOURCE_FILES:%=../bin/CardinalSynth.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/%: %
|
../bin/Cardinal.vst/resources/PluginManifests/%.json: %/plugin.json
|
||||||
-@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
|
|
||||||
-@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();
|
||||||
|
|
||||||
|
|
13
src/Makefile
13
src/Makefile
|
@ -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 CardinalFX $(CARDINAL_FX_ARGS)
|
||||||
$(MAKE) -C CardinalSynth
|
$(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 CardinalFX $(CARDINAL_FX_ARGS)
|
||||||
$(MAKE) clean -C CardinalSynth
|
$(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.
|
Loading…
Reference in New Issue