Structuring.
This commit is contained in:
@@ -1,34 +1,118 @@
|
||||
CC = gcc
|
||||
CFLAGS = -Wall -Wextra -O2
|
||||
TARGET = main2
|
||||
SRC = main2.c
|
||||
SAMPLES = test.c demo.c a.c
|
||||
CFLAGS = -Wall -Wextra -O2 -Isrc
|
||||
LDFLAGS = -lm
|
||||
|
||||
.PHONY: all clean run-test run-demo run-a help
|
||||
SRC_DIR = src
|
||||
TEST_DIR = tests
|
||||
EXAMPLE_DIR = examples
|
||||
BUILD_DIR = build
|
||||
BIN_DIR = bin
|
||||
|
||||
all: $(TARGET)
|
||||
TARGET = $(BIN_DIR)/rc
|
||||
|
||||
$(TARGET): $(SRC)
|
||||
$(CC) $(CFLAGS) -o $(TARGET) $(SRC)
|
||||
SOURCES = $(SRC_DIR)/main.c \
|
||||
$(SRC_DIR)/globals.c \
|
||||
$(SRC_DIR)/tokenizer.c \
|
||||
$(SRC_DIR)/parser.c \
|
||||
$(SRC_DIR)/interpreter.c \
|
||||
$(SRC_DIR)/native_functions.c \
|
||||
$(SRC_DIR)/string_utils.c
|
||||
|
||||
run-test: $(TARGET)
|
||||
./$(TARGET) test.c
|
||||
OBJECTS = $(SOURCES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o)
|
||||
|
||||
run-demo: $(TARGET)
|
||||
./$(TARGET) demo.c
|
||||
TESTS = $(TEST_DIR)/feature_test.rc \
|
||||
$(TEST_DIR)/endless_loop_test.rc \
|
||||
$(TEST_DIR)/math_test.rc \
|
||||
$(TEST_DIR)/string_test.rc \
|
||||
$(TEST_DIR)/string_manip_test.rc
|
||||
|
||||
run-a: $(TARGET)
|
||||
./$(TARGET) a.c
|
||||
EXAMPLES = $(EXAMPLE_DIR)/test.rc \
|
||||
$(EXAMPLE_DIR)/demo.rc \
|
||||
$(EXAMPLE_DIR)/a.rc
|
||||
|
||||
.PHONY: all clean test run-tests run-examples help dirs
|
||||
|
||||
all: dirs $(TARGET)
|
||||
|
||||
dirs:
|
||||
@mkdir -p $(BUILD_DIR) $(BIN_DIR)
|
||||
|
||||
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
$(TARGET): $(OBJECTS)
|
||||
$(CC) $(OBJECTS) -o $(TARGET) $(LDFLAGS)
|
||||
|
||||
clean:
|
||||
rm -f $(TARGET)
|
||||
rm -rf $(BUILD_DIR) $(BIN_DIR)
|
||||
|
||||
test: $(TARGET)
|
||||
@echo "=== Running All Tests ==="
|
||||
@echo ""
|
||||
@echo "Running feature tests..."
|
||||
@$(TARGET) $(TEST_DIR)/feature_test.rc 2>&1 | grep -v "Error at token" || true
|
||||
@echo ""
|
||||
@echo "Running endless loop test..."
|
||||
@$(TARGET) $(TEST_DIR)/endless_loop_test.rc 2>&1 | grep -v "Error at token" || true
|
||||
@echo ""
|
||||
@echo "Running math tests..."
|
||||
@$(TARGET) $(TEST_DIR)/math_test.rc 2>&1 | grep -v "Error at token" || true
|
||||
@echo ""
|
||||
@echo "Running string concatenation tests..."
|
||||
@$(TARGET) $(TEST_DIR)/string_test.rc 2>&1 | grep -v "Error at token" || true
|
||||
@echo ""
|
||||
@echo "Running string manipulation tests..."
|
||||
@$(TARGET) $(TEST_DIR)/string_manip_test.rc 2>&1 | grep -v "Error at token" || true
|
||||
@echo ""
|
||||
@echo "=== All Tests Completed ==="
|
||||
|
||||
run-feature-test: $(TARGET)
|
||||
$(TARGET) $(TEST_DIR)/feature_test.rc
|
||||
|
||||
run-endless-loop: $(TARGET)
|
||||
$(TARGET) $(TEST_DIR)/endless_loop_test.rc
|
||||
|
||||
run-math-test: $(TARGET)
|
||||
$(TARGET) $(TEST_DIR)/math_test.rc
|
||||
|
||||
run-string-test: $(TARGET)
|
||||
$(TARGET) $(TEST_DIR)/string_test.rc
|
||||
|
||||
run-string-manip: $(TARGET)
|
||||
$(TARGET) $(TEST_DIR)/string_manip_test.rc
|
||||
|
||||
run-example-test: $(TARGET)
|
||||
$(TARGET) $(EXAMPLE_DIR)/test.rc
|
||||
|
||||
run-example-demo: $(TARGET)
|
||||
$(TARGET) $(EXAMPLE_DIR)/demo.rc
|
||||
|
||||
run-example-a: $(TARGET)
|
||||
$(TARGET) $(EXAMPLE_DIR)/a.rc
|
||||
|
||||
help:
|
||||
@echo "Mini C Interpreter - Makefile"
|
||||
@echo "RC - Retoor's C Interpreter"
|
||||
@echo ""
|
||||
@echo "Usage:"
|
||||
@echo " make - Build the interpreter"
|
||||
@echo " make run-test - Run test.c"
|
||||
@echo " make run-demo - Run demo.c"
|
||||
@echo " make run-a - Run a.c"
|
||||
@echo " make clean - Remove compiled binaries"
|
||||
@echo " make help - Show this help message"
|
||||
@echo " make - Build the interpreter"
|
||||
@echo " make test - Run all feature tests"
|
||||
@echo " make clean - Remove all build artifacts"
|
||||
@echo ""
|
||||
@echo "Individual Tests:"
|
||||
@echo " make run-feature-test - Run feature_test.rc (negative numbers, ==, !=)"
|
||||
@echo " make run-endless-loop - Run endless_loop_test.rc (while(1) test)"
|
||||
@echo " make run-math-test - Run math_test.rc (math functions)"
|
||||
@echo " make run-string-test - Run string_test.rc (string concatenation)"
|
||||
@echo " make run-string-manip - Run string_manip_test.rc (string manipulation & slicing)"
|
||||
@echo ""
|
||||
@echo "Examples:"
|
||||
@echo " make run-example-test - Run test.rc (HTTP server)"
|
||||
@echo " make run-example-demo - Run demo.rc (HTTP server with counter)"
|
||||
@echo " make run-example-a - Run a.rc (HTTP server, 100 connections)"
|
||||
@echo ""
|
||||
@echo "Directory Structure:"
|
||||
@echo " src/ - Source code files"
|
||||
@echo " tests/ - Test programs (.rc files)"
|
||||
@echo " examples/ - Example programs (.rc files)"
|
||||
@echo " build/ - Compiled object files"
|
||||
@echo " bin/ - Final executable (rc)"
|
||||
|
||||
Reference in New Issue
Block a user