160 lines
6.4 KiB
Makefile
160 lines
6.4 KiB
Makefile
PROJECT := aee_2026
|
|
BUILDDIR := build
|
|
|
|
# Detecció de plataforma. En Windows CMake defaulteja a "NMake Makefiles"
|
|
# (que requereix Visual Studio); forcem MinGW Makefiles per usar el g++ de
|
|
# MinGW. nproc tampoc existeix en cmd.exe → fem servir NUMBER_OF_PROCESSORS.
|
|
ifeq ($(OS),Windows_NT)
|
|
NULDEV := NUL
|
|
JOBS ?= $(NUMBER_OF_PROCESSORS)
|
|
# Si Ninja està al PATH, l'usem (més ràpid i paral·lelitza millor).
|
|
# Si no, caiem a MinGW Makefiles. Sense aquesta selecció CMake
|
|
# defaultejaria a "NMake Makefiles", que requereix Visual Studio.
|
|
HAS_NINJA := $(shell ninja --version 2>$(NULDEV))
|
|
ifneq ($(HAS_NINJA),)
|
|
CMAKE_GEN := -G "Ninja"
|
|
else
|
|
CMAKE_GEN := -G "MinGW Makefiles"
|
|
endif
|
|
else
|
|
NULDEV := /dev/null
|
|
JOBS ?= $(shell nproc 2>/dev/null || echo 4)
|
|
CMAKE_GEN :=
|
|
endif
|
|
|
|
# VERSION (única font de veritat: source/utils/defines.hpp).
|
|
# Lazy (=): només es calcula quan s'invoca un target que la usa
|
|
# (show-version/help). Evita executar grep/sed des de cmd.exe en `make debug`.
|
|
VERSION = v$(shell grep 'constexpr const char\* VERSION' source/utils/defines.hpp | sed -E 's/.*VERSION = "([^"]+)".*/\1/')
|
|
|
|
# GIT_HASH calculat al host i passat a CMake (evita problemes si CMake corre en
|
|
# entorns sense accés a git, p.ex. Docker/emscripten).
|
|
GIT_HASH := $(shell git rev-parse --short=7 HEAD 2>$(NULDEV))
|
|
ifeq ($(GIT_HASH),)
|
|
GIT_HASH := unknown
|
|
endif
|
|
|
|
CMAKE_DEFS := -DGIT_HASH=$(GIT_HASH)
|
|
|
|
.PHONY: all debug release run run-debug clean rebuild show-version pack controllerdb format format-check tidy tidy-fix cppcheck hooks-install help
|
|
|
|
# ==============================================================================
|
|
# COMPILACIÓ
|
|
# ==============================================================================
|
|
# Convenció alineada amb ../aee i ../projecte_2026:
|
|
# make → Release (binari d'ús normal)
|
|
# make debug → Debug (flux complet + `debug.yaml` per triar escena inicial)
|
|
# make release → Release + empaquetat per a distribució (TODO, pendent)
|
|
# ==============================================================================
|
|
|
|
all:
|
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
|
@cmake --build $(BUILDDIR) -j$(JOBS)
|
|
|
|
debug:
|
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Debug $(CMAKE_DEFS)
|
|
@cmake --build $(BUILDDIR) -j$(JOBS)
|
|
|
|
run: all
|
|
@./$(BUILDDIR)/$(PROJECT)
|
|
|
|
run-debug: debug
|
|
@./$(BUILDDIR)/$(PROJECT)
|
|
|
|
# Release + empaquetat per distribució (zip/dmg/tar.gz). De moment només
|
|
# compila amb CMAKE_BUILD_TYPE=Release; l'empaquetat OS-specific està
|
|
# pendent (veure Makefile de ../aee com a referència).
|
|
release: all
|
|
@echo "TODO: empaquetat per a distribució (zip/dmg/tar.gz) — pendent"
|
|
|
|
show-version:
|
|
@echo "$(PROJECT) $(VERSION) ($(GIT_HASH))"
|
|
|
|
clean:
|
|
@rm -rf $(BUILDDIR)
|
|
|
|
rebuild: clean all
|
|
|
|
# Empaqueta data/ a $(BUILDDIR)/resources.pack (format AE26). Força un rebuild
|
|
# del pack encara que res no hagi canviat dins data/. L'empaquetat també es fa
|
|
# automàticament a cada `make`/`make debug` via el target CMake `resource_pack`.
|
|
pack:
|
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
|
@cmake --build $(BUILDDIR) --target pack_resources
|
|
@./$(BUILDDIR)/pack_resources data $(BUILDDIR)/resources.pack
|
|
|
|
# Descàrrega de la base de dades de mappings de mandos. SDL només pot
|
|
# obrir-la des del filesystem (no del pack), per això viu a l'arrel del
|
|
# projecte i CMake la copia al costat del binari a cada build.
|
|
controllerdb:
|
|
@echo "Descarregant gamecontrollerdb.txt..."
|
|
@curl -fsSL https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/master/gamecontrollerdb.txt \
|
|
-o gamecontrollerdb.txt
|
|
@echo "gamecontrollerdb.txt actualitzat"
|
|
|
|
# ==============================================================================
|
|
# CODE QUALITY (delegados a cmake)
|
|
# ==============================================================================
|
|
format:
|
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
|
@cmake --build $(BUILDDIR) --target format
|
|
|
|
format-check:
|
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
|
@cmake --build $(BUILDDIR) --target format-check
|
|
|
|
tidy:
|
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
|
@cmake --build $(BUILDDIR) --target tidy
|
|
|
|
tidy-fix:
|
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
|
@cmake --build $(BUILDDIR) --target tidy-fix
|
|
|
|
cppcheck:
|
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
|
@cmake --build $(BUILDDIR) --target cppcheck
|
|
|
|
# ==============================================================================
|
|
# GIT HOOKS
|
|
# ==============================================================================
|
|
hooks-install:
|
|
@git config core.hooksPath .githooks
|
|
@echo "Git hooks activats: $(shell pwd)/.githooks"
|
|
|
|
# ==============================================================================
|
|
# AJUDA
|
|
# ==============================================================================
|
|
help:
|
|
@echo "Makefile per a $(PROJECT)"
|
|
@echo ""
|
|
@echo " Compilació:"
|
|
@echo " make - Compilar amb cmake (Release)"
|
|
@echo " make debug - Compilar amb cmake (Debug)"
|
|
@echo ""
|
|
@echo " Execució:"
|
|
@echo " make run - Compilar (Release) i executar"
|
|
@echo " make run-debug - Compilar (Debug) i executar"
|
|
@echo ""
|
|
@echo " Release:"
|
|
@echo " make release - Release + empaquetat (TODO pendent)"
|
|
@echo ""
|
|
@echo " Recursos:"
|
|
@echo " make pack - Empaquetar data/ a $(BUILDDIR)/resources.pack (format AE26)"
|
|
@echo " make controllerdb - Descarregar gamecontrollerdb.txt actualitzat (arrel)"
|
|
@echo ""
|
|
@echo " Qualitat de codi:"
|
|
@echo " make format - Formatar codi amb clang-format"
|
|
@echo " make format-check - Verificar format sense modificar"
|
|
@echo " make tidy - Anàlisi estàtic amb clang-tidy"
|
|
@echo " make tidy-fix - Anàlisi estàtic amb auto-fix"
|
|
@echo " make cppcheck - Anàlisi estàtic amb cppcheck"
|
|
@echo ""
|
|
@echo " Altres:"
|
|
@echo " make clean - Esborrar carpeta $(BUILDDIR)/"
|
|
@echo " make rebuild - clean + all"
|
|
@echo " make show-version - Mostrar versió"
|
|
@echo " make hooks-install - Activar git hooks del projecte"
|
|
@echo ""
|
|
@echo " Versió actual: $(VERSION) ($(GIT_HASH))"
|