build: detecta Windows i tria generador CMake (Ninja o MinGW Makefiles)
This commit is contained in:
1 parent
15a7c4e18a
commit
cc529afeb2
1 file changed
+34
-12
@@ -1,13 +1,35 @@
|
|||||||
PROJECT := aee_2026
|
PROJECT := aee_2026
|
||||||
BUILDDIR := build
|
BUILDDIR := build
|
||||||
JOBS ?= $(shell nproc 2>/dev/null || echo 4)
|
|
||||||
|
|
||||||
# VERSION (única font de veritat: source/utils/defines.hpp)
|
# Detecció de plataforma. En Windows CMake defaulteja a "NMake Makefiles"
|
||||||
VERSION := v$(shell grep 'constexpr const char\* VERSION' source/utils/defines.hpp | sed -E 's/.*VERSION = "([^"]+)".*/\1/')
|
# (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
|
# 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).
|
# entorns sense accés a git, p.ex. Docker/emscripten).
|
||||||
GIT_HASH := $(shell git rev-parse --short=7 HEAD 2>/dev/null)
|
GIT_HASH := $(shell git rev-parse --short=7 HEAD 2>$(NULDEV))
|
||||||
ifeq ($(GIT_HASH),)
|
ifeq ($(GIT_HASH),)
|
||||||
GIT_HASH := unknown
|
GIT_HASH := unknown
|
||||||
endif
|
endif
|
||||||
@@ -26,11 +48,11 @@ CMAKE_DEFS := -DGIT_HASH=$(GIT_HASH)
|
|||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
all:
|
all:
|
||||||
@cmake -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
||||||
@cmake --build $(BUILDDIR) -j$(JOBS)
|
@cmake --build $(BUILDDIR) -j$(JOBS)
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
@cmake -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Debug $(CMAKE_DEFS)
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Debug $(CMAKE_DEFS)
|
||||||
@cmake --build $(BUILDDIR) -j$(JOBS)
|
@cmake --build $(BUILDDIR) -j$(JOBS)
|
||||||
|
|
||||||
run: all
|
run: all
|
||||||
@@ -57,7 +79,7 @@ rebuild: clean all
|
|||||||
# del pack encara que res no hagi canviat dins data/. L'empaquetat també es fa
|
# 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`.
|
# automàticament a cada `make`/`make debug` via el target CMake `resource_pack`.
|
||||||
pack:
|
pack:
|
||||||
@cmake -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
||||||
@cmake --build $(BUILDDIR) --target pack_resources
|
@cmake --build $(BUILDDIR) --target pack_resources
|
||||||
@./$(BUILDDIR)/pack_resources data $(BUILDDIR)/resources.pack
|
@./$(BUILDDIR)/pack_resources data $(BUILDDIR)/resources.pack
|
||||||
|
|
||||||
@@ -74,23 +96,23 @@ controllerdb:
|
|||||||
# CODE QUALITY (delegados a cmake)
|
# CODE QUALITY (delegados a cmake)
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
format:
|
format:
|
||||||
@cmake -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
||||||
@cmake --build $(BUILDDIR) --target format
|
@cmake --build $(BUILDDIR) --target format
|
||||||
|
|
||||||
format-check:
|
format-check:
|
||||||
@cmake -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
||||||
@cmake --build $(BUILDDIR) --target format-check
|
@cmake --build $(BUILDDIR) --target format-check
|
||||||
|
|
||||||
tidy:
|
tidy:
|
||||||
@cmake -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
||||||
@cmake --build $(BUILDDIR) --target tidy
|
@cmake --build $(BUILDDIR) --target tidy
|
||||||
|
|
||||||
tidy-fix:
|
tidy-fix:
|
||||||
@cmake -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
||||||
@cmake --build $(BUILDDIR) --target tidy-fix
|
@cmake --build $(BUILDDIR) --target tidy-fix
|
||||||
|
|
||||||
cppcheck:
|
cppcheck:
|
||||||
@cmake -S . -B $(BUILDDIR) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
@cmake -S . -B $(BUILDDIR) $(CMAKE_GEN) -DCMAKE_BUILD_TYPE=Release $(CMAKE_DEFS)
|
||||||
@cmake --build $(BUILDDIR) --target cppcheck
|
@cmake --build $(BUILDDIR) --target cppcheck
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|||||||
Reference in new issue
Block a user