# Compiler configurations # ----------------------- # Native build (gcc) CC_NATIVE = gcc CFLAGS_NATIVE = -g -std=c89 -Wall -Wextra -Werror -Wno-unused-parameter -I. #-O2 LDFLAGS_NATIVE = LDLIBS_NATIVE = -lSDL2 # WASM build (emscripten) CC_WASM = emcc CFLAGS_WASM = -g -std=c89 -Wall -Wextra -Werror -Wno-unused-parameter -I. LDFLAGS_WASM = -s WASM=1 -g -s USE_SDL=2 LDLIBS_WASM = # Source and build configuration # ---------------------------- COMMON_SRC = $(wildcard *.c) # Separate architecture sources ARCH_SRC_LINUX = $(wildcard arch/linux/*.c) ARCH_SRC_EMSCRIPTEN = $(wildcard arch/emscripten/*.c) # Object directories OBJ_DIR_NATIVE = build/native/obj OBJ_DIR_WASM = build/wasm/obj # Common objects from root OBJ_NATIVE = $(addprefix $(OBJ_DIR_NATIVE)/,$(notdir $(COMMON_SRC:.c=.o))) OBJ_WASM = $(addprefix $(OBJ_DIR_WASM)/,$(notdir $(COMMON_SRC:.c=.o))) # Architecture-specific objects OBJ_ARCH_NATIVE = $(addprefix $(OBJ_DIR_NATIVE)/,$(notdir $(ARCH_SRC_LINUX:.c=.o))) OBJ_ARCH_WASM = $(addprefix $(OBJ_DIR_WASM)/,$(notdir $(ARCH_SRC_EMSCRIPTEN:.c=.o))) # Executables EXEC_NATIVE = zre EXEC_WASM = zre.wasm # Phony targets .PHONY: all clean install wasm native emscripten linux macos # Default target builds the native version all: native # Native build rules # ------------------ native: linux linux: $(EXEC_NATIVE) $(EXEC_NATIVE): $(OBJ_NATIVE) $(OBJ_ARCH_NATIVE) $(CC_NATIVE) $(LDFLAGS_NATIVE) $^ $(LDLIBS_NATIVE) -o $@ # WASM build rules # ---------------- wasm: emscripten emscripten: $(EXEC_WASM) $(EXEC_WASM): $(OBJ_WASM) $(OBJ_ARCH_WASM) $(CC_WASM) $(LDFLAGS_WASM) $^ $(LDLIBS_WASM) -o $@ # Object file rules # ----------------- $(OBJ_DIR_NATIVE)/%.o: %.c @mkdir -p $(dir $@) $(CC_NATIVE) $(CFLAGS_NATIVE) -c $< -o $@ $(OBJ_DIR_WASM)/%.o: %.c @mkdir -p $(dir $@) $(CC_WASM) $(CFLAGS_WASM) -c $< -o $@ # Architecture-specific source rules $(OBJ_DIR_NATIVE)/%.o: arch/linux/%.c @mkdir -p $(dir $@) $(CC_NATIVE) $(CFLAGS_NATIVE) -c $< -o $@ $(OBJ_DIR_WASM)/%.o: arch/emscripten/%.c @mkdir -p $(dir $@) $(CC_WASM) $(CFLAGS_WASM) -c $< -o $@ # Clean build artifacts # --------------------- clean: rm -rf $(OBJ_DIR_NATIVE) $(OBJ_DIR_WASM) $(EXEC_NATIVE) $(EXEC_WASM) # Install target (example) # ------------------------ install: native install -d $(DESTDIR)/usr/local/bin install $(EXEC_NATIVE) $(DESTDIR)/usr/local/bin/