diff options
author | pankunull <panku_null@proton.me> | 2025-09-01 06:01:28 +0200 |
---|---|---|
committer | pankunull <panku_null@proton.me> | 2025-09-01 06:01:28 +0200 |
commit | bd2ad840f4f92930710b05a91b32b6038d62ea63 (patch) | |
tree | 1f3a3590519fda5b76358f513dc2e854a313bdad /Makefile |
lass init
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6da7a4d --- /dev/null +++ b/Makefile @@ -0,0 +1,67 @@ +# Compiler and flags +CC = gcc +CFLAGS = -Wall -O2 -lm + +# Directories +SRC_DIR = src +BIN_DIR = bin + +# Source and target names +TARGET = lass +SRC = $(SRC_DIR)/$(TARGET).c +PRE = $(BIN_DIR)/$(TARGET).i +ASM = $(BIN_DIR)/$(TARGET).s +OBJ = $(BIN_DIR)/$(TARGET).o +BIN = $(BIN_DIR)/$(TARGET) + +# Example argument for test +ARG = + +# Default: build executable +all: $(BIN) + +# Ensure bin directory exists +$(BIN_DIR): + mkdir -p $(BIN_DIR) + +# Stage 1: Preprocess +$(PRE): $(SRC) | $(BIN_DIR) + $(CC) -E $(CFLAGS) $< -o $@ + +# Stage 2: Compile to assembly +$(ASM): $(PRE) + $(CC) -S $(CFLAGS) $< -o $@ + +# Stage 3: Assemble to object file +$(OBJ): $(ASM) + $(CC) -c $(CFLAGS) $< -o $@ + +# Stage 4: Link object to executable +$(BIN): $(OBJ) + $(CC) $(CFLAGS) $< -o $@ + +# Run tests +define run_test + @name="$(1) $(2)"; \ + width=40; \ + printf "%s" "$$name"; \ + dots=$$((width - $${#name})); \ + for i in $$(seq 1 $$dots); do printf "."; done; \ + ./$(BIN) $(2) >/dev/null 2>&1; \ + ec=$$?; \ + if [ $$ec -eq 0 ] || [ $$ec -eq 2 ]; then \ + echo " OK"; \ + else \ + echo " FAILED (exit $$ec)"; \ + exit 1; \ + fi +endef + +test: $(BIN) + $(call run_test,$(TARGET),no args) + $(call run_test,$(TARGET),$(ARG)) + +# Clean all generated files +clean: + rm -v -f $(BIN_DIR)/$(TARGET).* $(BIN) + |