Uploading my current work to my personal gitea

This commit is contained in:
2026-05-06 22:21:57 +03:00
commit 381896c84f
9 changed files with 1026 additions and 0 deletions
+147
View File
@@ -0,0 +1,147 @@
# ============================================================
# C Cross-Platform Build System
# ============================================================
# Default Compiler (will be set based on platform)
CC = none
# Default Compiler Flags
CFLAGS = none
# Default Platform (will be detected)
PLATFORM = none
ifeq ($(OS),Windows_NT)
PLATFORM = windows
else
PLATFORM = linux
endif
# Debug flag
DEBUG = -g -DDEBUG=1
# ------------------------------------------------------------
# Include auto-generated dependency files
-include $(OBJ_FILES:.o=.d)
# ------------------------------------------------------------
# General information
INCLUDE_FLAGS = -Iinclude
# Linux-specific information
LINUX_CC = gcc
LINUX_CFLAGS = -O3 $(INCLUDE_FLAGS) -MMD -MP -Wall -Wextra -Werror -pedantic
LINUX_LDFLAGS = -O3 $(INCLUDE_FLAGS)
# Windows-specific information
WINDOWS_CC = x86_64-w64-mingw32-gcc
WINDOWS_CFLAGS = -O3 $(INCLUDE_FLAGS) -MMD -MP -Wall -Wextra -Werror -pedantic
WINDOWS_LDFLAGS = -O3 $(INCLUDE_FLAGS)
# ------------------------------------------------------------
# Project folders
SRC = src
BIN_DIR = ./bin
OBJ_DIR = ./obj
# ------------------------------------------------------------
# Detect platform based on make command arguments
ifneq (,$(findstring linux,$(MAKECMDGOALS)))
PLATFORM := linux
endif
ifneq (,$(findstring windows,$(MAKECMDGOALS)))
PLATFORM := windows
endif
# ------------------------------------------------------------
# Project source files
SRC_FILES := $(shell find $(SRC) -name '*.c')
OBJ_FILES := $(patsubst %.c,$(OBJ_DIR)/%.o,$(SRC_FILES))
TARGET = $(BIN_DIR)/stergios
# ------------------------------------------------------------
# Output binary name
ifeq ($(PLATFORM), windows)
CC = $(WINDOWS_CC)
CFLAGS = $(WINDOWS_CFLAGS)
LDFLAGS = $(WINDOWS_LDFLAGS)
OUT = $(TARGET).exe
else ifeq ($(PLATFORM), linux)
CC = $(LINUX_CC)
CFLAGS = $(LINUX_CFLAGS)
LDFLAGS = $(LINUX_LDFLAGS)
OUT = $(TARGET)
endif
# ------------------------------------------------------------
# Default Platform (will be detected)
default: $(OUT)
# ------------------------------------------------------------
# Help target: Display usage help
help:
@echo "Usage:"
@echo " make - Default Build for your operating system"
@echo " make build linux|windows - Build for your specified platform"
@echo " make debug linux|windows - Build with debug symbols for the engine"
@echo " make run linux|windows - Run the built program"
@echo " make build --debug linux|windows - Build with debug symbols for make"
@echo " make debug --debug linux|windows - Build with debug symbols for make and the engine"
@echo " make run --debug linux|windows - Run with debug symbols"
@echo " make clean - Clean the build directory"
# ------------------------------------------------------------
# Ensure build directories exist
check_dirs:
@mkdir -p $(BIN_DIR)
@mkdir -p $(OBJ_DIR)
# ------------------------------------------------------------
$(OBJ_DIR)/%.o: %.c | check_dirs
@mkdir -p $(dir $@)
@echo "Compiling $< -> $@"
$(CC) $(CFLAGS) -c $< -o $@
# ------------------------------------------------------------
$(OUT): $(OBJ_FILES) | check_dirs
@echo "Linking final executable: $(OUT)"
$(CC) $(CFLAGS) $(OBJ_FILES) -o $(OUT) $(LDFLAGS)
# ------------------------------------------------------------
# Build target
build: $(OUT)
# ------------------------------------------------------------
# Run target
run: build
ifeq ($(PLATFORM), windows)
@echo "Running application..."
@start "" "$(OUT)"
else ifeq ($(PLATFORM), linux)
@echo "Running application..."
$(OUT)
else
@echo "Specify a platform: make run linux or make run windows"
endif
# ------------------------------------------------------------
# Clean target
clean:
@echo "Cleaning object and bin directories..."
rm -rf $(OBJ_DIR)
rm -rf $(BIN_DIR)
@mkdir -p $(OBJ_DIR)
@mkdir -p $(BIN_DIR)
# ------------------------------------------------------------
# Declare linux/windows as fake targets so make doesnt fail
.PHONY: linux windows
linux:
@true
windows:
@true
# Debug flag
.PHONY: debug
debug: CFLAGS += DEBUG
debug: $(OUT)