91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Makefile
		
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Makefile
		
	
	
	
# 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/
 |