diff options
author | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2025-05-20 10:29:33 +0200 |
---|---|---|
committer | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2025-05-20 10:29:33 +0200 |
commit | 3829a704150a06b2767d542b39179377a592da0f (patch) | |
tree | 316a1e01f3306d717739e6d73b25f5215c2cf8f0 /Makefile | |
parent | cc383b7b2d89f05b724460b4d5cb385525911671 (diff) | |
download | imp-3829a704150a06b2767d542b39179377a592da0f.tar.gz imp-3829a704150a06b2767d542b39179377a592da0f.zip |
folder structure
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 70 |
1 files changed, 38 insertions, 32 deletions
@@ -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) |