VERSION = 0.9.1
COLOR_RESET = \033[0m
COLOR_BLUE = \033[34m
COLOR_GREEN = \033[32m
COLOR_RED = \033[31m
PLUGINS := $(shell sed -n '/members *=/,/\]/p' Cargo.toml \
| sed '1d;$d' \
| tr -d '[",]' \
| sed 's/^ *//g' \
| grep -v '^\.')
default: build-core-debug build-plugins-debug build-docs
@echo "$(COLOR_GREEN)=== Default build: debug done. ===$(COLOR_RESET)"
all: build-core-release build-plugins-release build-docs strip-binaries macos-or-deb-step
@echo "$(COLOR_GREEN)=== DONE building version $(VERSION) => Release + deb/dmg. See warnings.log. ===$(COLOR_RESET)"
build-core-debug:
@rm -f warnings.log build_temp.log
@echo "$(COLOR_BLUE)=== Building main crate (.) [DEBUG] ===$(COLOR_RESET)"
RUSTFLAGS="-C link-args=-Wl,-rpath,@executable_path -C link-args=-Wl,-rpath,/usr/local/lib" \
cargo build --color=always 2>&1 | tee build_temp.log
@if [ $$? -ne 0 ]; then \
echo "$(COLOR_RED)Build failed (debug) in main crate. Stopping.$(COLOR_RESET)"; \
exit 1; \
fi
@echo "=== Warnings/Errors (debug) from main crate (.) ===" >> warnings.log
@grep -E -B2 -A3 '(^warning:|^error:|^ *--> )' build_temp.log >> warnings.log || true
@rm -f build_temp.log
build-plugins-debug:
@for plugin in $(PLUGINS); do \
echo "$(COLOR_BLUE)=== Building $$plugin [DEBUG] ===$(COLOR_RESET)"; \
cd $$plugin && \
RUSTFLAGS="-C link-args=-Wl,-rpath,@executable_path -C link-args=-Wl,-rpath,/usr/local/lib" \
cargo build --color=always 2>&1 | tee ../build_temp.log; \
if [ $$? -ne 0 ]; then \
echo "$(COLOR_RED)Build failed (debug) in plugin: $$plugin. Stopping.$(COLOR_RESET)"; \
exit 1; \
fi; \
cd ..; \
echo "=== Warnings/Errors (debug) from $$plugin ===" >> warnings.log; \
grep -E -B2 -A3 '(^warning:|^error:|^ *--> )' build_temp.log >> warnings.log || true; \
rm -f build_temp.log; \
done
build-core-release:
@echo "$(COLOR_BLUE)=== Building main crate (.) [RELEASE] ===$(COLOR_RESET)"
RUSTFLAGS="-C link-arg=-Wl,-headerpad_max_install_names -C link-args=-Wl,-rpath,@executable_path -C link-args=-Wl,-rpath,/usr/local/lib" \
cargo build --release --color=always 2>&1 | tee build_temp.log
@if [ $$? -ne 0 ]; then \
echo "$(COLOR_RED)Build failed (release) in main crate. Stopping.$(COLOR_RESET)"; \
exit 1; \
fi
@echo "=== Warnings/Errors (release) from main crate (.) ===" >> warnings.log
@grep -E -B2 -A3 '(^warning:|^error:|^ *--> )' build_temp.log >> warnings.log || true
@rm -f build_temp.log
build-plugins-release:
@for plugin in $(PLUGINS); do \
echo "$(COLOR_BLUE)=== Building $$plugin [RELEASE] ===$(COLOR_RESET)"; \
cd $$plugin && \
RUSTFLAGS="-C link-arg=-Wl,-headerpad_max_install_names -C link-args=-Wl,-rpath,@executable_path -C link-args=-Wl,-rpath,/usr/local/lib" \
cargo build --release --color=always 2>&1 | tee ../build_temp.log; \
if [ $$? -ne 0 ]; then \
echo "$(COLOR_RED)Build failed (release) in plugin: $$plugin. Stopping.$(COLOR_RESET)"; \
exit 1; \
fi; \
cd ..; \
echo "=== Warnings/Errors (release) from $$plugin ===" >> warnings.log; \
grep -E -B2 -A3 '(^warning:|^error:|^ *--> )' build_temp.log >> warnings.log || true; \
rm -f build_temp.log; \
done
build-docs:
@echo "$(COLOR_BLUE)=== Building docs => running build-single-index.js ===$(COLOR_RESET)"
cd src/public && node build-single-index.js
strip-binaries:
@echo "$(COLOR_BLUE)=== Stripping artifacts (if strip is available) ===$(COLOR_RESET)"
@which strip >/dev/null 2>&1 && \
find target -type f \
\( -name 'lib*.so' -o -name 'lib*.dylib' -o -name '*.dll' -o -name 'mumu' \) \
-exec strip {} \; 2>/dev/null || true
macos-or-deb-step:
@if [ "$$(uname)" = "Darwin" ]; then \
$(MAKE) macos-dmg-step; \
else \
$(MAKE) cargo-deb-step; \
fi
macos-dmg-step: macos-pkg-step
@echo "$(COLOR_BLUE)=== Creating macOS .dmg with Installer Package (.pkg) ===$(COLOR_RESET)"
rm -rf target/dist_macos
mkdir -p target/dist_macos
cp target/mumu.pkg target/dist_macos/
hdiutil create \
-volname "LavaInstaller" \
-srcfolder target/dist_macos \
-ov \
-format UDZO \
target/mumu.dmg
@echo "$(COLOR_GREEN)=== macOS .dmg created at target/mumu.dmg ===$(COLOR_RESET)"
macos-pkg-step:
@echo "$(COLOR_BLUE)=== Creating macOS pkg installer => pkgbuild ===$(COLOR_RESET)"
rm -rf target/pkgroot
mkdir -p target/pkgroot/usr/local/bin
mkdir -p target/pkgroot/usr/local/lib
cp target/release/mumu target/pkgroot/usr/local/bin/mumu
@for plugin in $(PLUGINS); do \
if [ -f "target/release/libmumu$$plugin.dylib" ]; then \
cp "target/release/libmumu$$plugin.dylib" target/pkgroot/usr/local/lib/; \
fi; \
done
pkgbuild \
--root target/pkgroot \
--identifier "com.example.mumu" \
--version "$(VERSION)" \
--install-location "/" \
target/mumu.pkg
cargo-deb-step:
@echo "$(COLOR_BLUE)=== Building .deb package => cargo deb ===$(COLOR_RESET)"
cargo deb
@if [ $$? -ne 0 ]; then \
echo "$(COLOR_RED)cargo-deb failed => no .deb created.$(COLOR_RESET)"; \
exit 1; \
fi
clean:
cargo clean
@for plugin in $(PLUGINS); do \
(cd $$plugin && cargo clean); \
done
rm -f warnings.log
.PHONY: default all build-core-debug build-plugins-debug build-core-release build-plugins-release build-docs strip-binaries macos-or-deb-step macos-dmg-step macos-pkg-step cargo-deb-step clean