190 lines
8.1 KiB
Makefile
190 lines
8.1 KiB
Makefile
# ==============================================================================
|
|
# Makefile per a Shadertoy
|
|
#
|
|
# Tres targets:
|
|
# make → Release (cmake)
|
|
# make debug → Debug (cmake)
|
|
# make release → Release + empaquetat per a distribució a dist/
|
|
#
|
|
# El SO es detecta automàticament. La compilació sempre passa per CMake.
|
|
# ==============================================================================
|
|
|
|
PROJECT := shadertoy
|
|
APP_NAME := Shadertoy
|
|
DIR_ROOT := $(dir $(abspath $(MAKEFILE_LIST)))
|
|
BUILDDIR := build
|
|
DIST_DIR := dist
|
|
RELEASE_FOLDER := $(DIST_DIR)/_tmp
|
|
|
|
# ==============================================================================
|
|
# DETECCIÓ DE PLATAFORMA + GENERADOR CMAKE + JOBS
|
|
# ==============================================================================
|
|
ifeq ($(OS),Windows_NT)
|
|
# MSYS2/Git Bash usa /dev/null, cmd.exe pur usa NUL.
|
|
ifneq ($(MSYSTEM),)
|
|
NULDEV := /dev/null
|
|
else
|
|
NULDEV := NUL
|
|
endif
|
|
JOBS ?= $(NUMBER_OF_PROCESSORS)
|
|
HAS_NINJA := $(shell ninja --version 2>$(NULDEV))
|
|
ifneq ($(HAS_NINJA),)
|
|
CMAKE_GEN := -G "Ninja"
|
|
else
|
|
CMAKE_GEN := -G "MinGW Makefiles"
|
|
endif
|
|
UNAME_S := Windows
|
|
SHELL := cmd.exe
|
|
else
|
|
NULDEV := /dev/null
|
|
JOBS ?= $(shell nproc 2>/dev/null || echo 4)
|
|
CMAKE_GEN :=
|
|
UNAME_S := $(shell uname -s)
|
|
endif
|
|
|
|
# ==============================================================================
|
|
# VERSIÓ (data, format YYYY.MM.DD)
|
|
# ==============================================================================
|
|
ifeq ($(OS),Windows_NT)
|
|
VERSION := $(shell powershell -Command "Get-Date -Format 'yyyy.MM.dd'")
|
|
else
|
|
VERSION := $(shell date +%Y.%m.%d)
|
|
endif
|
|
|
|
# ==============================================================================
|
|
# NOMS DELS ARTEFACTES DE RELEASE
|
|
# ==============================================================================
|
|
WINDOWS_RELEASE := $(DIST_DIR)/$(PROJECT)-$(VERSION)-win32-x64.zip
|
|
MACOS_APPLE_SILICON_RELEASE := $(DIST_DIR)/$(PROJECT)-$(VERSION)-macos-apple-silicon.dmg
|
|
LINUX_RELEASE := $(DIST_DIR)/$(PROJECT)-$(VERSION)-linux.tar.gz
|
|
|
|
.PHONY: all debug release clean help _windows_release _macos_release _linux_release
|
|
|
|
# ==============================================================================
|
|
# COMPILACIÓ (delegada a CMake)
|
|
# ==============================================================================
|
|
all:
|
|
@cmake $(CMAKE_GEN) -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build $(BUILDDIR) -j$(JOBS)
|
|
|
|
debug:
|
|
@cmake $(CMAKE_GEN) -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Debug
|
|
@cmake --build $(BUILDDIR) -j$(JOBS)
|
|
|
|
# ==============================================================================
|
|
# RELEASE (auto-dispatch per SO)
|
|
# ==============================================================================
|
|
release:
|
|
ifeq ($(OS),Windows_NT)
|
|
@"$(MAKE)" _windows_release
|
|
else
|
|
ifeq ($(UNAME_S),Darwin)
|
|
@$(MAKE) _macos_release
|
|
else
|
|
@$(MAKE) _linux_release
|
|
endif
|
|
endif
|
|
|
|
clean:
|
|
@rm -rf $(BUILDDIR) $(DIST_DIR)
|
|
|
|
# ==============================================================================
|
|
# RELEASE LINUX
|
|
# ==============================================================================
|
|
_linux_release:
|
|
@echo "Creant release per a Linux - Versió: $(VERSION)"
|
|
@cmake $(CMAKE_GEN) -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build $(BUILDDIR) -j$(JOBS)
|
|
@mkdir -p $(DIST_DIR)
|
|
@rm -rf $(RELEASE_FOLDER)
|
|
@mkdir -p $(RELEASE_FOLDER)
|
|
@cp -R data $(RELEASE_FOLDER)/
|
|
@cp LICENSE $(RELEASE_FOLDER)/
|
|
@cp README.md $(RELEASE_FOLDER)/
|
|
@cp $(PROJECT) $(RELEASE_FOLDER)/
|
|
@strip -s -R .comment -R .gnu.version $(RELEASE_FOLDER)/$(PROJECT) --strip-unneeded
|
|
@rm -f $(LINUX_RELEASE)
|
|
@tar -czf $(LINUX_RELEASE) -C $(RELEASE_FOLDER) .
|
|
@echo "Release creat: $(LINUX_RELEASE)"
|
|
@rm -rf $(RELEASE_FOLDER)
|
|
|
|
# ==============================================================================
|
|
# RELEASE MACOS (Apple Silicon, .dmg amb .app bundle)
|
|
# ==============================================================================
|
|
_macos_release:
|
|
@echo "Creant release per a macOS - Versió: $(VERSION)"
|
|
@command -v create-dmg >/dev/null 2>&1 || { \
|
|
echo "Falta create-dmg. Instal·la amb: brew install create-dmg"; \
|
|
exit 1; \
|
|
}
|
|
@cmake -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release -DMACOS_BUNDLE=ON -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0
|
|
@cmake --build $(BUILDDIR) -j$(JOBS)
|
|
@mkdir -p $(DIST_DIR)
|
|
@rm -rf $(RELEASE_FOLDER)
|
|
@rm -f tmp.dmg "$(MACOS_APPLE_SILICON_RELEASE)" $(DIST_DIR)/rw.*
|
|
@mkdir -p "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks"
|
|
@mkdir -p "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS"
|
|
@mkdir -p "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
|
@cp -R data "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources/"
|
|
@cp -R release/macos/frameworks/SDL3.xcframework/macos-arm64_x86_64/SDL3.framework "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks/"
|
|
@cp release/icons/icon.icns "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources/"
|
|
@cp release/macos/Info.plist "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/"
|
|
@cp $(PROJECT) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(PROJECT)"
|
|
@cp LICENSE "$(RELEASE_FOLDER)/"
|
|
@cp README.md "$(RELEASE_FOLDER)/"
|
|
@RAW_VERSION=$$(echo "$(VERSION)" | sed 's/^v//'); \
|
|
sed -i '' '/<key>CFBundleShortVersionString<\/key>/{n;s|<string>.*</string>|<string>'"$$RAW_VERSION"'</string>|;}' "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"; \
|
|
sed -i '' '/<key>CFBundleVersion<\/key>/{n;s|<string>.*</string>|<string>'"$$RAW_VERSION"'</string>|;}' "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"
|
|
@codesign --deep --force --sign - --timestamp=none "$(RELEASE_FOLDER)/$(APP_NAME).app"
|
|
@create-dmg \
|
|
--volname "$(APP_NAME)" \
|
|
--window-pos 200 120 \
|
|
--window-size 720 300 \
|
|
--icon-size 96 \
|
|
--text-size 12 \
|
|
--icon "$(APP_NAME).app" 278 102 \
|
|
--icon "LICENSE" 441 102 \
|
|
--icon "README.md" 604 102 \
|
|
--app-drop-link 115 102 \
|
|
--hide-extension "$(APP_NAME).app" \
|
|
"$(MACOS_APPLE_SILICON_RELEASE)" \
|
|
"$(RELEASE_FOLDER)" || true
|
|
@echo "Release creat: $(MACOS_APPLE_SILICON_RELEASE)"
|
|
@rm -rf $(RELEASE_FOLDER)
|
|
@rm -f $(DIST_DIR)/rw.*
|
|
|
|
# ==============================================================================
|
|
# RELEASE WINDOWS (.zip amb DLLs)
|
|
# ==============================================================================
|
|
_windows_release:
|
|
@echo off
|
|
@echo Creant release per a Windows - Versió: $(VERSION)
|
|
@cmake $(CMAKE_GEN) -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release
|
|
@cmake --build $(BUILDDIR) -j$(JOBS)
|
|
@powershell -Command "if (-not (Test-Path '$(DIST_DIR)')) {New-Item '$(DIST_DIR)' -ItemType Directory | Out-Null}"
|
|
@powershell -Command "if (Test-Path '$(RELEASE_FOLDER)') {Remove-Item '$(RELEASE_FOLDER)' -Recurse -Force}"
|
|
@powershell -Command "New-Item '$(RELEASE_FOLDER)' -ItemType Directory | Out-Null"
|
|
@powershell -Command "Copy-Item -Path 'data' -Destination '$(RELEASE_FOLDER)' -Recurse"
|
|
@powershell -Command "Copy-Item 'LICENSE' -Destination '$(RELEASE_FOLDER)'"
|
|
@powershell -Command "Copy-Item 'README.md' -Destination '$(RELEASE_FOLDER)'"
|
|
@powershell -Command "Copy-Item 'release\windows\dll\*.dll' -Destination '$(RELEASE_FOLDER)'"
|
|
@powershell -Command "Copy-Item -Path '$(PROJECT).exe' -Destination '$(RELEASE_FOLDER)/$(APP_NAME).exe'"
|
|
@strip -s -R .comment -R .gnu.version "$(RELEASE_FOLDER)/$(APP_NAME).exe" --strip-unneeded
|
|
@powershell -Command "if (Test-Path '$(WINDOWS_RELEASE)') {Remove-Item '$(WINDOWS_RELEASE)'}"
|
|
@powershell -Command "Compress-Archive -Path '$(RELEASE_FOLDER)/*' -DestinationPath '$(WINDOWS_RELEASE)'"
|
|
@echo Release creat: $(WINDOWS_RELEASE)
|
|
@powershell -Command "Remove-Item '$(RELEASE_FOLDER)' -Recurse -Force"
|
|
|
|
# ==============================================================================
|
|
# AJUDA
|
|
# ==============================================================================
|
|
help:
|
|
@echo "Makefile per a $(PROJECT)"
|
|
@echo ""
|
|
@echo " make Compilar Release (cmake)"
|
|
@echo " make debug Compilar Debug (cmake)"
|
|
@echo " make release Compilar + empaquetar per a distribució a $(DIST_DIR)/"
|
|
@echo " make clean Esborrar $(BUILDDIR)/ i $(DIST_DIR)/"
|
|
@echo ""
|
|
@echo " Versió actual: $(VERSION)"
|