Makefile fix

This commit is contained in:
2026-02-08 19:11:35 -06:00
parent f183ed2147
commit 7e7d245551
3 changed files with 82 additions and 39 deletions

120
Makefile
View File

@@ -1,56 +1,98 @@
# =====================
# Compiler settings # Compiler settings
CC=gcc # =====================
CFLAGS=-std=c11 -Wall -Wextra -O2 -Iinclude CC = gcc
SHELL=/bin/sh CFLAGS = -std=c11 -Wall -Wextra -O2 -Iinclude
# =====================
# Directories # Directories
SRCDIR=src # =====================
INCDIR=include SRCDIR = src
OBJDIR=build INCDIR = include
DISTDIR=dist OBJDIR = obj
TESTDIR=tests TESTDIR = tests
TESTBINDIR = $(TESTDIR)/bin
# Platform-specific sources # =====================
# Platform selection
# =====================
ifeq ($(OS),Windows_NT) ifeq ($(OS),Windows_NT)
PLATFORM_SRC=$(SRCDIR)/win32_platform.c PLATFORM_SRC = $(SRCDIR)/win32_platform.c
OBJEXT=obj EXEEXT = .exe
LIBEXT=dll
RM=del /Q
MKDIR=if not exist "$(1)" mkdir "$(1)"
else else
PLATFORM_SRC=$(SRCDIR)/linux_platform.c PLATFORM_SRC = $(SRCDIR)/linux_platform.c
OBJEXT=o EXEEXT =
LIBEXT=so
RM=rm -f
MKDIR=mkdir -p $(1)
endif endif
# Sources and objects # =====================
SRC=$(PLATFORM_SRC) $(TESTDIR)/main.c # Tools
OBJ=$(patsubst %.c,$(OBJDIR)/%.$(OBJEXT),$(SRC)) # =====================
RM = rm -f
MKDIR = mkdir -p
# =====================
# 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))
# =====================
# Targets # Targets
.PHONY: all clean run # =====================
.PHONY: all test clean
all: $(DISTDIR)/app # Build everything
all: $(LIB_OBJ) $(TEST_BINS)
# Build main executable # =====================
$(DISTDIR)/app: $(OBJ) # Compile platform object
@$(call MKDIR,$(DISTDIR)) # =====================
$(CC) $(CFLAGS) $(OBJ) -o $@ $(OBJDIR)/%.o: %.c
@$(MKDIR) $(dir $@)
# Compile object files
$(OBJDIR)/%.$(OBJEXT): %.c
@$(call MKDIR,$(dir $@))
$(CC) $(CFLAGS) -c $< -o $@ $(CC) $(CFLAGS) -c $< -o $@
# Run the app # =====================
run: $(DISTDIR)/app # Build each binary
$(DISTDIR)/app # =====================
$(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
# =====================
# Clean # Clean
clean: # =====================
-$(RM) $(OBJ) clean:
-$(RM) $(DISTDIR)/* -$(RM) -r $(OBJDIR) $(TESTBINDIR)
@echo "Cleaned build and dist directories" @echo "Cleaned objects and test binaries"

View File

@@ -1,5 +1,6 @@
#include "../include/platform.h" #include "../include/platform.h"
#include <stdio.h> #include <stdio.h>
#include <windows.h>
void platform_print(void) void platform_print(void)
{ {