70 lines
1.6 KiB
Makefile
70 lines
1.6 KiB
Makefile
# Compiler configurations
|
|
# -----------------------
|
|
# Native build (gcc)
|
|
CC_NATIVE = gcc
|
|
CFLAGS_NATIVE = -std=c89 -Wall -Wextra -Werror -Wno-unused-parameter
|
|
LDFLAGS_NATIVE =
|
|
LDLIBS_NATIVE =
|
|
|
|
# WASM build (emscripten)
|
|
CC_WASM = emcc
|
|
CFLAGS_WASM = -std=c89 -Wall -Wextra -Werror -Wno-unused-parameter #-s WASM=1
|
|
LDFLAGS_WASM = #-s WASM=1
|
|
LDLIBS_WASM =
|
|
|
|
# Source and build configuration
|
|
# ----------------------------
|
|
SRC = $(wildcard *.c)
|
|
EXEC_NATIVE = zre
|
|
EXEC_WASM = zre.wasm
|
|
|
|
# Build directories
|
|
OBJ_DIR_NATIVE = build/native/obj
|
|
OBJ_DIR_WASM = build/wasm/obj
|
|
|
|
# Create output paths
|
|
OBJ_NATIVE = $(addprefix $(OBJ_DIR_NATIVE)/,$(notdir $(SRC:.c=.o)))
|
|
OBJ_WASM = $(addprefix $(OBJ_DIR_WASM)/,$(notdir $(SRC:.c=.o)))
|
|
|
|
# Phony targets
|
|
# -------------
|
|
.PHONY: all clean install wasm
|
|
|
|
# Default target builds both versions
|
|
all: native wasm
|
|
|
|
# Native build rules
|
|
# ------------------
|
|
native: $(EXEC_NATIVE)
|
|
|
|
$(EXEC_NATIVE): $(OBJ_NATIVE)
|
|
$(CC_NATIVE) $(LDFLAGS_NATIVE) $^ $(LDLIBS_NATIVE) -o $@
|
|
|
|
# WASM build rules
|
|
# ----------------
|
|
wasm: $(EXEC_WASM)
|
|
|
|
$(EXEC_WASM): $(OBJ_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 $@
|
|
|
|
# Clean build artifacts
|
|
# ---------------------
|
|
clean:
|
|
$(RM) -r $(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/
|