Files
platform/Makefile

99 lines
2.2 KiB
Makefile
Raw Permalink Normal View History

2026-02-08 19:11:35 -06:00
# =====================
2026-02-08 12:14:24 -06:00
# Compiler settings
2026-02-08 19:11:35 -06:00
# =====================
CC = gcc
CFLAGS = -std=c11 -Wall -Wextra -O2 -Iinclude
2026-02-08 12:14:24 -06:00
2026-02-08 19:11:35 -06:00
# =====================
2026-02-08 12:14:24 -06:00
# Directories
2026-02-08 19:11:35 -06:00
# =====================
SRCDIR = src
INCDIR = include
OBJDIR = obj
TESTDIR = tests
TESTBINDIR = $(TESTDIR)/bin
2026-02-08 12:14:24 -06:00
2026-02-08 19:11:35 -06:00
# =====================
# Platform selection
# =====================
2026-02-08 12:14:24 -06:00
ifeq ($(OS),Windows_NT)
2026-02-08 19:11:35 -06:00
PLATFORM_SRC = $(SRCDIR)/win32_platform.c
EXEEXT = .exe
2026-02-08 12:14:24 -06:00
else
2026-02-08 19:11:35 -06:00
PLATFORM_SRC = $(SRCDIR)/linux_platform.c
EXEEXT =
2026-02-08 12:14:24 -06:00
endif
2026-02-08 19:11:35 -06:00
# =====================
# Tools
# =====================
RM = rm -f
MKDIR = mkdir -p
2026-02-08 12:14:24 -06:00
2026-02-08 19:11:35 -06:00
# =====================
# Library (platform backend)
# =====================
LIB_SRC = $(PLATFORM_SRC)
LIB_OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(LIB_SRC))
# =====================
# Test / final binaries
# =====================
TEST_SRCS = $(wildcard $(TESTDIR)/*.c)
TEST_BINS = $(patsubst $(TESTDIR)/%.c,$(TESTBINDIR)/%$(EXEEXT),$(TEST_SRCS))
2026-02-08 12:14:24 -06:00
2026-02-08 19:11:35 -06:00
# =====================
# Targets
# =====================
.PHONY: all test clean
2026-02-08 12:14:24 -06:00
2026-02-08 19:11:35 -06:00
# Build everything
all: $(LIB_OBJ) $(TEST_BINS)
2026-02-08 12:14:24 -06:00
2026-02-08 19:11:35 -06:00
# =====================
# Compile platform object
# =====================
$(OBJDIR)/%.o: %.c
@$(MKDIR) $(dir $@)
2026-02-08 12:14:24 -06:00
$(CC) $(CFLAGS) -c $< -o $@
2026-02-08 19:11:35 -06:00
# =====================
# Build each binary
# =====================
$(TESTBINDIR)/%$(EXEEXT): $(TESTDIR)/%.c $(LIB_OBJ)
@$(MKDIR) $(TESTBINDIR)
$(CC) $(CFLAGS) $< $(LIB_OBJ) -o $@
# =====================
# Test runner
# =====================
test: all
@echo "Running binaries..."
@SUCCESS=0; FAILURE=0; \
for bin in $(TEST_BINS); do \
echo "--------------------------------"; \
echo "Running $$bin"; \
"./$$bin"; \
EC=$$?; \
NAME=$$(basename "$$bin"); \
if [ $$EC -eq 0 ]; then \
printf "\033[0;32m%s: EXIT %d (SUCCESS)\033[0m\n" "$$NAME" "$$EC"; \
SUCCESS=$$((SUCCESS+1)); \
else \
printf "\033[0;31m%s: EXIT %d (FAILURE)\033[0m\n" "$$NAME" "$$EC"; \
FAILURE=$$((FAILURE+1)); \
fi; \
done; \
echo ""; \
echo "SUCCESS: $$SUCCESS"; \
echo "FAILURE: $$FAILURE"; \
if [ $$FAILURE -ne 0 ]; then exit 1; fi
2026-02-08 12:14:24 -06:00
2026-02-08 19:11:35 -06:00
# =====================
2026-02-08 12:14:24 -06:00
# Clean
2026-02-08 19:11:35 -06:00
# =====================
clean:
-$(RM) -r $(OBJDIR) $(TESTBINDIR)
@echo "Cleaned objects and test binaries"
2026-02-08 12:14:24 -06:00