mirror of
https://codeberg.org/armin/ambivalence.git
synced 2026-09-01 04:10:48 +02:00
151 lines
5.4 KiB
Makefile
151 lines
5.4 KiB
Makefile
# ============================================================================
|
|
# Ambivalence - build + install (macOS / Linux)
|
|
#
|
|
# Usage:
|
|
# make clean Release build (VST3 + standalone) into build/<platform>
|
|
# make install remove stale installs, install built artifacts
|
|
# make uninstall remove installed artifacts
|
|
# make clean delete the build directory
|
|
# make version print the current git branch + commit
|
|
# make info print the resolved configuration
|
|
#
|
|
# Notes:
|
|
# - `make install` copies whatever is currently in build/<platform>, it does
|
|
# not build. Run `make` first if you want a fresh build.
|
|
# - JUCE is auto-fetched into ./build/JUCE on first build (shallow clone of
|
|
# the JUCE_VERSION tag). Override with: make JUCE_PATH=/path/to/JUCE
|
|
# - Install targets (user-level, no sudo required):
|
|
# macOS: VST3: ~/Library/Audio/Plug-Ins/VST3/Ambivalence.vst3
|
|
# Standalone: ~/Applications/Ambivalence.app
|
|
# Linux: VST3: ~/.local/lib/vst3/Ambivalence.vst3
|
|
# Standalone: ~/.local/bin/Ambivalence
|
|
# ============================================================================
|
|
|
|
PRODUCT := Ambivalence
|
|
|
|
UNAME_S := $(shell uname -s)
|
|
|
|
# ============================================================================
|
|
# JUCE location
|
|
# An explicit JUCE_PATH wins. Otherwise JUCE is shallow-cloned into
|
|
# ./build/JUCE (pinned to JUCE_VERSION) so the build is self-contained.
|
|
# ============================================================================
|
|
JUCE_REPO ?= https://github.com/juce-framework/JUCE.git
|
|
JUCE_VERSION ?= 8.0.15
|
|
JUCE_SRC ?= $(CURDIR)/build/JUCE
|
|
JUCE_PATH ?= $(JUCE_SRC)
|
|
|
|
# ============================================================================
|
|
# Platform-specific settings
|
|
# ============================================================================
|
|
ifeq ($(UNAME_S),Linux)
|
|
BUILD_DIR ?= build/linux
|
|
CONFIG ?= Release
|
|
JOBS := $(shell nproc 2>/dev/null || echo 1)
|
|
PREFIX ?= $(HOME)/.local
|
|
VST3_DIR ?= $(HOME)/.local/lib/vst3
|
|
APP_DIR := $(PREFIX)/bin
|
|
else
|
|
BUILD_DIR ?= build/macOS
|
|
CONFIG ?= Release
|
|
ARCH ?= $(shell uname -m)
|
|
ifeq ($(ARCH),universal)
|
|
OSX_ARCH := "arm64;x86_64"
|
|
else
|
|
OSX_ARCH := $(ARCH)
|
|
endif
|
|
JOBS := $(shell sysctl -n hw.ncpu)
|
|
PREFIX ?= $(HOME)
|
|
VST3_DIR ?= $(HOME)/Library/Audio/Plug-Ins/VST3
|
|
APP_DIR := $(PREFIX)/Applications
|
|
endif
|
|
|
|
CMAKE := cmake
|
|
|
|
VST3_BUNDLE := $(VST3_DIR)/$(PRODUCT).vst3
|
|
STANDALONE := $(APP_DIR)/$(PRODUCT)$(if $(filter $(UNAME_S),Linux),,.app)
|
|
|
|
# JUCE 8 no longer adds install() rules for plugins, so we copy the freshly
|
|
# built artefacts out of the build tree ourselves.
|
|
BUILD_ARTEFACT_DIR := $(BUILD_DIR)/Ambivalence_artefacts/$(CONFIG)
|
|
VST3_SRC := $(BUILD_ARTEFACT_DIR)/VST3/$(PRODUCT).vst3
|
|
STANDALONE_SRC := $(BUILD_ARTEFACT_DIR)/Standalone/$(PRODUCT)$(if $(filter $(UNAME_S),Linux),,.app)
|
|
|
|
ifdef OSX_ARCH
|
|
OSX_FLAG := -DCMAKE_OSX_ARCHITECTURES="$(OSX_ARCH)"
|
|
endif
|
|
|
|
.PHONY: all build install uninstall clean version info
|
|
|
|
all: build
|
|
|
|
build:
|
|
@command -v $(CMAKE) >/dev/null 2>&1 || { echo "error: cmake not found"; exit 1; }
|
|
@if [ -d "$(JUCE_PATH)/modules/juce_core" ]; then \
|
|
echo "==> JUCE: $(JUCE_PATH)"; \
|
|
elif [ "$(JUCE_PATH)" = "$(JUCE_SRC)" ]; then \
|
|
echo "==> JUCE: fetching $(JUCE_VERSION) into $(JUCE_SRC)"; \
|
|
mkdir -p "$(dir $(JUCE_SRC))"; \
|
|
rm -rf "$(JUCE_SRC)"; \
|
|
git clone --depth 1 --branch "$(JUCE_VERSION)" "$(JUCE_REPO)" "$(JUCE_SRC)" \
|
|
|| { rm -rf "$(JUCE_SRC)"; echo "error: failed to fetch JUCE"; exit 1; }; \
|
|
else \
|
|
echo "error: JUCE not found at '$(JUCE_PATH)'"; \
|
|
echo " run: make JUCE_PATH=/path/to/JUCE"; \
|
|
exit 1; \
|
|
fi
|
|
@echo "==> Ambivalence: clean build ($(CONFIG), $(UNAME_S))"
|
|
rm -rf "$(BUILD_DIR)"
|
|
$(CMAKE) -S . -B "$(BUILD_DIR)" \
|
|
-DJUCE_PATH="$(JUCE_PATH)" \
|
|
-DCMAKE_BUILD_TYPE="$(CONFIG)" \
|
|
$(OSX_FLAG)
|
|
$(CMAKE) --build "$(BUILD_DIR)" -j$(JOBS)
|
|
|
|
install:
|
|
@test -d "$(VST3_SRC)" -a -d "$(STANDALONE_SRC)" || { \
|
|
echo "error: built artifacts not found in $(BUILD_DIR)"; \
|
|
echo " run 'make' first to build them, then 'make install'."; \
|
|
exit 1; }
|
|
@echo "==> Ambivalence: removing stale installs"
|
|
rm -rf "$(VST3_BUNDLE)" "$(STANDALONE)"
|
|
@echo "==> Ambivalence: installing"
|
|
mkdir -p "$(VST3_DIR)" "$(APP_DIR)"
|
|
cp -R "$(VST3_SRC)" "$(VST3_DIR)/"
|
|
cp -R "$(STANDALONE_SRC)" "$(APP_DIR)/"
|
|
@echo "==> Done."
|
|
@if [ -d "$(VST3_BUNDLE)" ]; then \
|
|
echo " VST3: $(VST3_BUNDLE)"; \
|
|
else \
|
|
echo " WARNING: VST3 bundle not found at $(VST3_BUNDLE)"; \
|
|
fi
|
|
@if [ -e "$(STANDALONE)" ]; then \
|
|
echo " Standalone: $(STANDALONE)"; \
|
|
else \
|
|
echo " (standalone not installed - checked $(STANDALONE))"; \
|
|
fi
|
|
@echo " Rescan plugins in your DAW to pick up the new build."
|
|
|
|
uninstall:
|
|
@echo "==> Ambivalence: uninstalling"
|
|
rm -rf "$(VST3_BUNDLE)" "$(STANDALONE)"
|
|
@echo "==> Done."
|
|
|
|
clean:
|
|
rm -rf "$(BUILD_DIR)"
|
|
|
|
version:
|
|
@echo "branch: $$(git rev-parse --abbrev-ref HEAD)"
|
|
@echo "commit: $$(git rev-parse --short HEAD)"
|
|
|
|
info:
|
|
@echo "platform = $(UNAME_S)"
|
|
@echo "JUCE_PATH = $(JUCE_PATH)"
|
|
@echo "JUCE_REPO = $(JUCE_REPO)"
|
|
@echo "JUCE_VER = $(JUCE_VERSION)"
|
|
@echo "BUILD_DIR = $(BUILD_DIR)"
|
|
@echo "CONFIG = $(CONFIG)"
|
|
@echo "JOBS = $(JOBS)"
|
|
@echo "PREFIX = $(PREFIX)"
|
|
@echo "VST3 = $(VST3_BUNDLE)"
|
|
@echo "Standalone = $(STANDALONE)"
|