# --- Options de Build --- # Valeurs possibles : causeway (recommandé), dos4g (classique) EXTENDER = causeway STACK_SIZE = 64k WATCOM_WIN = D:\WatCom WATCOM_WSL = /mnt/d/WatCom NASM_WIN = /mnt/c/Program\ Files/NASM/nasm.exe # --- Configuration Dynamique du Linker --- ifeq ($(EXTENDER), causeway) # Configuration optimisée pour CauseWay L_SYS = system causeway L_OPTS = option osname='CauseWay' \ option stub=$(WATCOM_WIN)/binw/cwstub.exe \ option stack=$(STACK_SIZE) else # Configuration classique pour DOS/4GW L_SYS = system dos4g L_OPTS = option stack=$(STACK_SIZE) endif # Binaires Windows exécutés par WSL CC = $(WATCOM_WSL)/binnt64/wcc386.exe CXX = $(WATCOM_WSL)/binnt64/wpp386.exe AS = $(NASM_WIN) LINK = $(WATCOM_WSL)/binnt64/wlink.exe # --- Flags de Performance --- # On utilise wslpath pour que les outils Windows comprennent les chemins Linux INC_FLAGS = -i="$(WATCOM_WIN)\h" -i="$(WATCOM_WIN)\CustomH" CFLAGS = -bt=dos -6s -fp6 -ox -od -oh -ot -ei -zp8 $(INC_FLAGS) LFLAGS = $(L_SYS) $(L_OPTS) \ libpath "$(WATCOM_WIN)\lib386" \ libpath "$(WATCOM_WIN)\lib386\dos" \ libpath "$(WATCOM_WIN)\CustomLib" # --- Détection des Sources --- # On force le shell à trouver les fichiers SRCS_CPP := $(shell find src -name "*.cpp") SRCS_C := $(shell find src -name "*.c") SRCS_ASM := $(shell find src -name "*.asm") # Création de la liste des objets (src/main/main.cpp -> build/main.obj) OBJS := $(patsubst src/%.cpp, build/%.obj, $(SRCS_CPP)) \ $(patsubst src/%.c, build/%.obj, $(SRCS_C)) \ $(patsubst src/%.asm, build/%.obj, $(SRCS_ASM)) # --- Règles --- all: prepare build/app.exe prepare: @mkdir -p build @# Crée les sous-dossiers dans build pour correspondre à src @$(foreach dir, $(sort $(dir $(SRCS_CPP) $(SRCS_C) $(SRCS_ASM))), mkdir -p $(subst src,build,$(dir));) build/%.obj: src/%.cpp @mkdir -p $(dir $@) $(CXX) $(CFLAGS) $< -fo='$(shell wslpath -w $@)' @rm -f $*.err build/%.obj: src/%.c @mkdir -p $(dir $@) $(CC) $(CFLAGS) $< -fo='$(shell wslpath -w $@)' @rm -f $*.err build/%.obj: src/%.asm @mkdir -p $(dir $@) $(AS) -f obj $< -o '$(shell wslpath -w $@)' # --- PARTIE LINK CORRIGÉE --- build/app.exe: $(OBJS) MakeFile @if [ -z "$(OBJS)" ]; then echo "ERREUR: Aucun objet trouvé!"; exit 1; fi @echo "Generating linker file: build/link.lnk" @printf '%s\n' '$(LFLAGS)' > build/link.lnk @printf 'name %s\n' '$(shell wslpath -w $@)' >> build/link.lnk @$(foreach f,$(OBJS),printf 'file %s\n' '$(shell wslpath -w $f)' >> build/link.lnk;) @echo "Linking..." $(LINK) @build/link.lnk clean: rm -rf build # Nettoyage des logs d'erreurs rm -f *.err src/**/*.err cleanall: $(MAKE) clean $(MAKE) all