undar-lang/src/Makefile

76 lines
1.8 KiB
Makefile

# Compiler configurations
# -----------------------
# Native build (gcc)
CC_NATIVE = gcc
CFLAGS_NATIVE = -g -O2 -std=c89 -Wall -Wextra -Werror -Wno-unused-parameter -I.
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)
ARCH_SRC_EMSCRIPTEN = arch/emscripten/main.c
ARCH_SRC_LINUX = arch/linux/main.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 $(COMMON_SRC:.c=.o)))
OBJ_WASM = $(addprefix $(OBJ_DIR_WASM)/,$(notdir $(COMMON_SRC:.c=.o)))
# 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) $(ARCH_SRC_LINUX)
$(CC_NATIVE) $(LDFLAGS_NATIVE) $^ $(LDLIBS_NATIVE) -o $@
# WASM build rules
# ----------------
wasm: emscripten
emscripten: $(EXEC_WASM)
$(EXEC_WASM): $(OBJ_WASM) $(ARCH_SRC_EMSCRIPTEN)
$(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 -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/