mirror of
https://codeberg.org/armin/terion.git
synced 2026-10-11 16:41:53 +02:00
116 lines
No EOL
4.4 KiB
Makefile
116 lines
No EOL
4.4 KiB
Makefile
# Terion — stereo analyzer VST3/AU
|
|
# A thin wrapper around CMake, with macOS signing / un-quarantining helpers.
|
|
|
|
BUILD_DIR ?= build
|
|
LOCAL_JUCE ?= third_party/JUCE
|
|
HOME_JUCE := $(HOME)/JUCE
|
|
XDG_JUCE_LOWER := $(HOME)/.local/git/juce
|
|
XDG_JUCE_UPPER := $(HOME)/.local/git/JUCE
|
|
CMAKE ?= cmake
|
|
CONFIG ?= Release
|
|
JUCE_REPO ?= https://github.com/juce-framework/JUCE.git
|
|
JOBS ?= $(shell sysctl -n hw.ncpu 2>/dev/null || nproc 2>/dev/null || echo 4)
|
|
# Codesign identity: leave empty for ad-hoc ("-") signing.
|
|
CODESIGN_ID ?=
|
|
|
|
VST3_DIR := $(HOME)/Library/Audio/Plug-Ins/VST3/Terion.vst3
|
|
AU_DIR := $(HOME)/Library/Audio/Plug-Ins/Components/Terion.component
|
|
|
|
# Prefer a local JUCE checkout (~/JUCE, then ~/.local/git/{juce,JUCE}) if
|
|
# present, otherwise use the vendored copy in the repo.
|
|
ifeq ($(strip $(JUCE_DIR)),)
|
|
ifneq ($(wildcard $(HOME_JUCE)/CMakeLists.txt),)
|
|
JUCE_DIR := $(HOME_JUCE)
|
|
else ifneq ($(wildcard $(XDG_JUCE_LOWER)/CMakeLists.txt),)
|
|
JUCE_DIR := $(XDG_JUCE_LOWER)
|
|
else ifneq ($(wildcard $(XDG_JUCE_UPPER)/CMakeLists.txt),)
|
|
JUCE_DIR := $(XDG_JUCE_UPPER)
|
|
else
|
|
JUCE_DIR := $(LOCAL_JUCE)
|
|
endif
|
|
endif
|
|
|
|
.PHONY: all juce configure build install sign unquarantine uninstall clean deepclean help
|
|
|
|
all: configure
|
|
$(CMAKE) --build $(BUILD_DIR) --config $(CONFIG) -j$(JOBS)
|
|
|
|
# Ensure a JUCE source tree is available: use a local checkout
|
|
# (~/JUCE or ~/.local/git/{juce,JUCE}), else clone into third_party/.
|
|
juce:
|
|
@if [ ! -f "$(JUCE_DIR)/CMakeLists.txt" ]; then \
|
|
if [ ! -d "$(dir $(JUCE_DIR))" ]; then mkdir -p "$(dir $(JUCE_DIR))"; fi; \
|
|
echo "JUCE not found at $(JUCE_DIR) — cloning into it..."; \
|
|
git clone --depth 1 "$(JUCE_REPO)" "$(JUCE_DIR)"; \
|
|
else \
|
|
echo "JUCE already present at $(JUCE_DIR)."; \
|
|
fi
|
|
|
|
# The build target auto-installs plugins via JUCE's COPY_PLUGIN_AFTER_BUILD.
|
|
configure: juce
|
|
$(CMAKE) -S . -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=$(CONFIG) -DTERION_JUCE_DIR=$(JUCE_DIR)
|
|
|
|
build:
|
|
$(CMAKE) --build $(BUILD_DIR) --config $(CONFIG) -j$(JOBS)
|
|
@echo "Plugins built into $(BUILD_DIR)/Terion_artefacts/$(CONFIG)."
|
|
|
|
# Ad-hoc (or identity) codesign both plugin bundles, recursively.
|
|
sign:
|
|
@if [ -d "$(VST3_DIR)" ]; then \
|
|
echo "Signing VST3 ..."; \
|
|
codesign --force --deep --sign "$(if $(CODESIGN_ID),$(CODESIGN_ID),-)" "$(VST3_DIR)"; \
|
|
else \
|
|
echo "VST3 bundle not found at $(VST3_DIR) — run 'make build' first."; \
|
|
fi
|
|
@if [ -d "$(AU_DIR)" ]; then \
|
|
echo "Signing AU ..."; \
|
|
codesign --force --deep --sign "$(if $(CODESIGN_ID),$(CODESIGN_ID),-)" "$(AU_DIR)"; \
|
|
else \
|
|
echo "AU bundle not found at $(AU_DIR) — run 'make build' first."; \
|
|
fi
|
|
|
|
# Strip Gatekeeper quarantine / provenance attributes from the installed bundles.
|
|
unquarantine:
|
|
@if [ -d "$(VST3_DIR)" ]; then \
|
|
echo "Removing quarantine from VST3 ..."; \
|
|
xattr -dr com.apple.quarantine "$(VST3_DIR)" 2>/dev/null || true; \
|
|
xattr -dr com.apple.provenance "$(VST3_DIR)" 2>/dev/null || true; \
|
|
fi
|
|
@if [ -d "$(AU_DIR)" ]; then \
|
|
echo "Removing quarantine from AU ..."; \
|
|
xattr -dr com.apple.quarantine "$(AU_DIR)" 2>/dev/null || true; \
|
|
xattr -dr com.apple.provenance "$(AU_DIR)" 2>/dev/null || true; \
|
|
fi
|
|
|
|
install: build sign unquarantine
|
|
@echo "Terion VST3/AU installed, signed, and un-quarantined."
|
|
@echo " VST3: $(VST3_DIR)"
|
|
@echo " AU: $(AU_DIR)"
|
|
|
|
uninstall:
|
|
rm -rf "$(VST3_DIR)"
|
|
rm -rf "$(AU_DIR)"
|
|
@echo "Uninstalled Terion from the user Audio Plug-Ins directories."
|
|
|
|
clean:
|
|
rm -rf $(BUILD_DIR)
|
|
|
|
# Fully remove generated artefacts, including the vendored JUCE copy.
|
|
deepclean: clean
|
|
rm -rf build Terion_artefacts third_party
|
|
|
|
help:
|
|
@echo "Targets:"
|
|
@echo " all configure + build"
|
|
@echo " juce clone JUCE into third_party/JUCE if missing (else use ~/JUCE or ~/.local/git/{juce,JUCE})"
|
|
@echo " configure run CMake configure against $(BUILD_DIR)"
|
|
@echo " build compile the configured tree"
|
|
@echo " sign codesign both installed plugin bundles (ad-hoc by default)"
|
|
@echo " unquarantine strip Gatekeeper quarantine/provenance xattrs"
|
|
@echo " install build + sign + unquarantine into ~/Library/Audio/Plug-Ins"
|
|
@echo " uninstall remove installed plugins"
|
|
@echo " clean remove $(BUILD_DIR)"
|
|
@echo " deepclean remove build dir, artefacts, and third_party/"
|
|
@echo ""
|
|
@echo "Variables: BUILD_DIR= JUCE_DIR= CONFIG= JOBS= CMAKE= JUCE_REPO="
|
|
@echo " CODESIGN_ID= (e.g. 'Developer ID Application: X' — empty = ad-hoc)"
|