diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..34d38f8 --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +include config.mk + +all: $(TARGET) + +release: clean +release: CFLAGS = -Wall -O2 +release: $(TARGET) + +# Run the target. +run: $(TARGET) + ./$(TARGET) + +# Compile project source objects. +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(INC_DIR)/%.h + @ mkdir -p $(OBJ_DIR) + @ $(PRINT) "$(WHITE_BOLD)Compiling source object $(WHITE)$@$(WHITE_BOLD)... $(RESETCOLOR)" + $(CC) $(CFLAGS) -c $< -o $@ + +# Link to final binary. +$(TARGET): $(OBJ_FILES) + @ $(PRINT) "$(WHITE_BOLD)Linking $(WHITE)$@$(WHITE_BOLD)...$(RESETCOLOR)" + $(LINK) -o $(TARGET) $(OBJ_FILES) $(LDFLAGS) + +# Clean out objects, binaries, and built artifacts. +clean: + @ $(PRINT) "$(WHITE_BOLD)Cleaning up...$(RESETCOLOR)" + rm -rf $(OBJ_DIR)/*.o $(TARGET) + +# Get LOC. +lines: + @ wc -l $(SRC_FILES) $(INC_FILES) $(GRAM_SRC) + +.PHONY: all clean release run lines diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..3f60074 --- /dev/null +++ b/config.mk @@ -0,0 +1,24 @@ +NAME = stug + +TARGET = $(NAME).out + +SRC_DIR = src +INC_DIR = $(SRC_DIR)/include +BUILD_DIR = build +OBJ_DIR = $(BUILD_DIR)/obj + +CC = clang -std=c23 +LINK = clang +CFLAGS = -Wall -DDBG -ggdb -fsanitize=leak +LDFLAGS = -lm +PRINT = echo -e + +SRC_FILES = $(wildcard $(SRC_DIR)/*.c) +INC_FILES = $(wildcard $(INC_DIR)/*.h) +OBJ_FILES = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC_FILES)) +OBJ_FILES_NOMAIN = $(filter-out $(OBJ_DIR)/main.o, $(OBJ_FILES)) # Object files without main.c. + +RESETCOLOR = \033[0m +WHITE = $(RESETCOLOR)\033[37m +WHITE_BOLD = $(RESETCOLOR)\033[37;1m +RED_BOLD = $(RESETCOLOR)\033[31;1m diff --git a/src/include/main.h b/src/include/main.h new file mode 100644 index 0000000..4f3d6c6 --- /dev/null +++ b/src/include/main.h @@ -0,0 +1,3 @@ +#ifndef MAIN_H +#define MAIN_H +#endif diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..5b526f6 --- /dev/null +++ b/src/main.c @@ -0,0 +1,8 @@ +#include "include/main.h" +#include + +int main(int argc, char** argv) { + printf("Hello, world.\n"); + + return 0; +}