From 8ff968d20910579b78b314fc3d7e8ffeea97c0d0 Mon Sep 17 00:00:00 2001 From: Kyler Date: Thu, 27 Nov 2025 23:05:10 -0700 Subject: [PATCH] Converted to new build system --- SLS_C/Makefile | 77 ----------------------------------- SLS_C/Makefile.nmake | 95 -------------------------------------------- SLS_C/README.md | 22 +++++----- SLS_C/build.py | 24 +++++++++-- 4 files changed, 31 insertions(+), 187 deletions(-) delete mode 100644 SLS_C/Makefile delete mode 100644 SLS_C/Makefile.nmake diff --git a/SLS_C/Makefile b/SLS_C/Makefile deleted file mode 100644 index fe8affe..0000000 --- a/SLS_C/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -# Makefile for SLS project with automatic header dependencies - -CC ?= gcc -CFLAGS ?= -std=c99 -Wall -Wextra -Werror -g -Iinclude -MMD -MP -LDFLAGS ?= -CTESTFLAGS ?= -std=c99 -Wall -Wextra -Wno-unused-function -Werror -g -O0 -Iinclude -MMD -MP - -SRCDIR := src -OBJDIR := obj -BINDIR := bin -TESTDIR := tests - -TARGET := $(BINDIR)/sls -TEST_TARGET := $(BINDIR)/sls_tests - -SOURCES := $(wildcard $(SRCDIR)/*.c) -OBJECTS := $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SOURCES)) -NON_MAIN_OBJECTS := $(filter-out $(OBJDIR)/main.o,$(OBJECTS)) - -TEST_SOURCES := $(wildcard $(TESTDIR)/*.c) -TEST_OBJECTS := $(patsubst $(TESTDIR)/%.c,$(OBJDIR)/%.o,$(TEST_SOURCES)) - -# Include dependency files if they exist --include $(OBJECTS:.o=.d) $(TEST_OBJECTS:.o=.d) - -.PHONY: all build run test clean - -# Default: build main program -all: $(TARGET) - -# Compile object files -build: $(OBJECTS) - -# Rule to compile .c -> .o (handles both src and tests) -$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR) - $(CC) $(CFLAGS) -c $< -o $@ - -$(OBJDIR)/%.o: $(TESTDIR)/%.c | $(OBJDIR) - $(CC) $(CTESTFLAGS) -c $< -o $@ - -# Link main program -$(TARGET): $(OBJECTS) | $(BINDIR) - $(CC) $(LDFLAGS) $^ -o $@ -lm - -# Run main program -run: $(TARGET) - @echo "Running $(TARGET)..." - ./$(TARGET) - -test_cases: ../SLS_Tests/yaml_to_c_tests.py ../SLS_Tests/cases.yaml - python3 ../SLS_Tests/yaml_to_c_tests.py ../SLS_Tests/cases.yaml ./tests/lexer_tests.c - -# Build test runner executable -$(TEST_TARGET): $(TEST_OBJECTS) $(NON_MAIN_OBJECTS) | $(BINDIR) - $(CC) $(LDFLAGS) $^ -o $@ -lm - -build_tests: test_cases $(TEST_TARGET) - -# Run tests -debug: build_tests - gdb ./$(TEST_TARGET) - -# Run tests -test: test_cases $(TEST_TARGET) - @echo "Running tests..." - ./$(TEST_TARGET) - -# Create directories if missing -$(BINDIR): - mkdir -p $(BINDIR) - -$(OBJDIR): - mkdir -p $(OBJDIR) - -# Remove build artifacts -clean: - rm -rf $(OBJDIR) $(BINDIR) diff --git a/SLS_C/Makefile.nmake b/SLS_C/Makefile.nmake deleted file mode 100644 index b35fc67..0000000 --- a/SLS_C/Makefile.nmake +++ /dev/null @@ -1,95 +0,0 @@ -# MSVC nmake build file for SLS - -CC = cl -CFLAGS = /std:c11 /Zi /I include -LDFLAGS = - -SRCDIR = src -OBJDIR = obj -BINDIR = bin -TESTDIR = tests - -TARGET = $(BINDIR)\sls.exe -TEST_TARGET = $(BINDIR)\sls_tests.exe - -# === LIST FILES MANUALLY (edit as needed) === -SOURCES = \ - $(SRCDIR)\main.c \ - $(SRCDIR)\lexer.c \ - $(SRCDIR)\string.c - -OBJECTS = \ - $(OBJDIR)\main.obj \ - $(OBJDIR)\lexer.obj \ - $(OBJDIR)\string.obj - -TEST_SOURCES = \ - $(TESTDIR)\extra_tests.c \ - $(TESTDIR)\lexer_test_helpers.c \ - $(TESTDIR)\lexer_tests.c \ - $(TESTDIR)\string_tests.c \ - $(TESTDIR)\tests.c - -TEST_OBJECTS = \ - $(OBJDIR)\extra_tests.obj \ - $(OBJDIR)\lexer_test_helpers.obj \ - $(OBJDIR)\lexer_tests.obj \ - $(OBJDIR)\string_tests.obj \ - $(OBJDIR)\tests.obj - -# ============================================ - -# Default target -all: build - -# === BUILD MAIN PROGRAM === -build: $(TARGET) - -$(TARGET): dirs $(OBJECTS) - link $(OBJECTS) /OUT:$@ $(LDFLAGS) - -# === COMPILE RULES === -$(OBJDIR)\main.obj: $(SRCDIR)\main.c - $(CC) $(CFLAGS) /c $(SRCDIR)\main.c /Fo$(OBJDIR)\main.obj - -$(OBJDIR)\lexer.obj: $(SRCDIR)\lexer.c - $(CC) $(CFLAGS) /c $(SRCDIR)\lexer.c /Fo$(OBJDIR)\lexer.obj - -$(OBJDIR)\string.obj: $(SRCDIR)\string.c - $(CC) $(CFLAGS) /c $(SRCDIR)\string.c /Fo$(OBJDIR)\string.obj - -$(OBJDIR)\extra_tests.obj: $(TESTDIR)\extra_tests.c - $(CC) $(CFLAGS) /c $(TESTDIR)\extra_tests.c /Fo$(OBJDIR)\extra_tests.obj - -$(OBJDIR)\lexer_test_helpers.obj: $(TESTDIR)\lexer_test_helpers.c - $(CC) $(CFLAGS) /c $(TESTDIR)\lexer_test_helpers.c /Fo$(OBJDIR)\lexer_test_helpers.obj - -$(OBJDIR)\lexer_tests.obj: $(TESTDIR)\lexer_tests.c - $(CC) $(CFLAGS) /c $(TESTDIR)\lexer_tests.c /Fo$(OBJDIR)\lexer_tests.obj - -$(OBJDIR)\string_tests.obj: $(TESTDIR)\string_tests.c - $(CC) $(CFLAGS) /c $(TESTDIR)\string_tests.c /Fo$(OBJDIR)\string_tests.obj - -$(OBJDIR)\tests.obj: $(TESTDIR)\tests.c - $(CC) $(CFLAGS) /c $(TESTDIR)\tests.c /Fo$(OBJDIR)\tests.obj - -# === RUN EXECUTABLE === -run: $(TARGET) - $(TARGET) - -# === TEST BUILD & RUN === -test: $(TEST_TARGET) - $(TEST_TARGET) - -$(TEST_TARGET): dirs $(TEST_OBJECTS) $(OBJDIR)\lexer.obj $(OBJDIR)\string.obj - link $(TEST_OBJECTS) $(OBJDIR)\lexer.obj $(OBJDIR)\string.obj /OUT:$@ $(LDFLAGS) - -# === CREATE DIRECTORIES === -dirs: - if not exist $(OBJDIR) mkdir $(OBJDIR) - if not exist $(BINDIR) mkdir $(BINDIR) - -# === CLEAN === -clean: - rmdir /s /q $(OBJDIR) - rmdir /s /q $(BINDIR) diff --git a/SLS_C/README.md b/SLS_C/README.md index a1f375c..4edd583 100644 --- a/SLS_C/README.md +++ b/SLS_C/README.md @@ -4,20 +4,20 @@ This is the C implementation for the YREA SLS interpreter. ## Compiling, Running, and Testing +Interpreter binary location: +- Linux: `./bin/sls` +- Windows: `.\bin\sls.exe` + ### Linux (GCC) -Build Project: `make build` -Build and Run Project: `make run` -Build and Run Tests: `make test` - -Interpreter binary location: `./bin/sls` +Build Project: `python3 build.py all` +Build and Run Project: `python3 build.py run` +Build and Run Tests: `python3 build.py test` ### Windows (MSVC) -Use a developer shell for all nmake commands. +*__For Windows users:__ Use a VS developer shell for all build commands.* -Build Project: `nmake /f Makefile.nmake build` -Build and Run Project: `nmake /f Makefile.nmake run` -Build and Run Tests: `nmake /f Makefile.nmake test` - -Interpreter binary location: `.\bin\sls.exe` +Build Project: `python build.py all` +Build and Run Project: `python build.py run` +Build and Run Tests: `python build.py test` diff --git a/SLS_C/build.py b/SLS_C/build.py index 20e477a..02786f1 100644 --- a/SLS_C/build.py +++ b/SLS_C/build.py @@ -35,19 +35,35 @@ def detect_compiler(): CC, CC_KIND = detect_compiler() +# --------------------------------------------------------------------- +# PYTHON DETECTION +# --------------------------------------------------------------------- +def detect_python(): + if os.name == "nt": + return "python" + return "python3" + +PYTHON = detect_python() + # --------------------------------------------------------------------- # GIT COMMIT HASH # --------------------------------------------------------------------- def git_commit_hash(): try: - result = subprocess.check_output( + result_hash = subprocess.check_output( ["git", "describe", "--always", "--dirty", "--abbrev=7"], cwd=".", stderr=subprocess.DEVNULL, text=True - ) - return result.strip() + ).strip() + result_date = subprocess.check_output( + ["git", "show", "-s", "--format=%ci"], + cwd=".", + stderr=subprocess.DEVNULL, + text=True + ).strip() + return f"{result_hash} {result_date}" except Exception: return "unknown" @@ -126,7 +142,7 @@ def generate_tests(): if out.exists() and out.stat().st_mtime > yaml.stat().st_mtime: return True - run(["python3", str(script), str(yaml), str(out)]) + run([PYTHON, str(script), str(yaml), str(out)]) return True