aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorFlavian Kaufmann <flavian@flaviankaufmann.ch>2025-05-20 10:29:33 +0200
committerFlavian Kaufmann <flavian@flaviankaufmann.ch>2025-05-20 10:29:33 +0200
commit3829a704150a06b2767d542b39179377a592da0f (patch)
tree316a1e01f3306d717739e6d73b25f5215c2cf8f0 /Makefile
parentcc383b7b2d89f05b724460b4d5cb385525911671 (diff)
downloadimp-3829a704150a06b2767d542b39179377a592da0f.tar.gz
imp-3829a704150a06b2767d542b39179377a592da0f.zip
folder structure
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile70
1 files changed, 38 insertions, 32 deletions
diff --git a/Makefile b/Makefile
index b20c925..112b109 100644
--- a/Makefile
+++ b/Makefile
@@ -1,54 +1,60 @@
-CC := gcc
-CFLAGS := -Wall -g -I.
-BISON := bison
-FLEX := flex
+CC ?= clang
+CFLAGS ?= -Wall -Wextra -g
+BISON ?= bison
+FLEX ?= flex
+SRC_DIR := src
+INC_DIR := include
BUILD_DIR := build
-PARSER_Y := parser.y
-LEXER_L := lexer.l
-DRIVER_C := driver.c
-AST_C := ast.c
-AST_H := ast.h
+PARSER_Y := $(SRC_DIR)/parser.y
+LEXER_L := $(SRC_DIR)/lexer.l
-PARSER_C := $(BUILD_DIR)/parser.tab.c
-PARSER_H := $(BUILD_DIR)/parser.tab.h
-LEXER_C := $(BUILD_DIR)/lex.yy.c
-OBJS := $(BUILD_DIR)/parser.tab.o $(BUILD_DIR)/lex.yy.o $(BUILD_DIR)/driver.o $(BUILD_DIR)/ast.o
+C_SRC := $(filter-out $(PARSER_Y:.y=.c) $(LEXER_L:.l=.c), $(wildcard $(SRC_DIR)/*.c))
-TARGET := $(BUILD_DIR)/imp
+PARSER_C := $(BUILD_DIR)/parser.tab.c
+PARSER_H := $(BUILD_DIR)/parser.tab.h
+LEXER_C := $(BUILD_DIR)/lex.yy.c
-.PHONY: all clean run
+C_OBJS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(C_SRC))
+PARSER_O := $(BUILD_DIR)/parser.tab.o
+LEXER_O := $(BUILD_DIR)/lex.yy.o
+OBJS := $(C_OBJS) $(PARSER_O) $(LEXER_O)
+
+TARGET := $(BUILD_DIR)/imp
+
+CFLAGS += -I$(INC_DIR) -MMD -MP
+DEPS := $(OBJS:.o=.d)
+
+.PHONY: all clean example
all: $(TARGET)
$(TARGET): $(OBJS)
- $(CC) $(CFLAGS) -o $@ $^
+ $(CC) $(CFLAGS) $^ -o $@
$(BUILD_DIR):
- mkdir -p $(BUILD_DIR)
+ @mkdir -p $@
+
+$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c | $(BUILD_DIR)
+ $(CC) $(CFLAGS) -c $< -o $@
$(PARSER_C) $(PARSER_H): $(PARSER_Y) | $(BUILD_DIR)
- $(BISON) -d --defines=$(PARSER_H) -o $(PARSER_C) $(PARSER_Y)
+ $(BISON) -d --defines=$(PARSER_H) -o $(PARSER_C) $<
+
+$(PARSER_O): $(PARSER_C)
+ $(CC) $(CFLAGS) -c $< -o $@
$(LEXER_C): $(LEXER_L) $(PARSER_H) | $(BUILD_DIR)
$(FLEX) -o $@ $<
-$(BUILD_DIR)/imp_parser.tab.o: $(PARSER_C) $(PARSER_H)
- $(CC) $(CFLAGS) -c $(PARSER_C) -o $@
-
-$(BUILD_DIR)/lex.yy.o: $(LEXER_C) $(PARSER_H)
- $(CC) $(CFLAGS) -c $(LEXER_C) -o $@
-
-$(BUILD_DIR)/driver.o: $(DRIVER_C) $(PARSER_H) $(AST_H) | $(BUILD_DIR)
- $(CC) $(CFLAGS) -c $(DRIVER_C) -o $@
-
-$(BUILD_DIR)/ast.o: $(AST_C) $(AST_H) | $(BUILD_DIR)
- $(CC) $(CFLAGS) -c $(AST_C) -o $@
+$(LEXER_O): $(LEXER_C)
+ $(CC) $(CFLAGS) -c $< -o $@
-run: $(TARGET)
- ./$(TARGET) example.imp
+example: $(TARGET)
+ ./$(TARGET) example/example.imp
clean:
- rm -rf $(BUILD_DIR)
+ @rm -rf $(BUILD_DIR)
+-include $(DEPS)