Makefile · 1856 bytes Raw Blame History
1 # Makefile for modular fuss
2 FC = gfortran
3 FFLAGS = -O2 -Wall -ffree-line-length-none
4 SRC_DIR = src
5 BUILD_DIR = build
6 BIN_DIR = .
7
8 # Module files (order matters for dependencies)
9 MODULES = types_module.f90 cache_module.f90 terminal_module.f90 git_module.f90 tree_module.f90 display_module.f90
10 MODULE_OBJS = $(MODULES:%.f90=$(BUILD_DIR)/%.o)
11
12 # Main program
13 MAIN = fuss_main.f90
14 MAIN_OBJ = $(BUILD_DIR)/fuss_main.o
15
16 # Target executable
17 TARGET = $(BIN_DIR)/fuss
18
19 # Disable parallel builds to ensure proper module compilation order
20 .NOTPARALLEL:
21
22 .PHONY: all clean
23
24 all: $(TARGET)
25
26 $(BUILD_DIR):
27 mkdir -p $(BUILD_DIR)
28
29 # Build modules with explicit dependencies
30 $(BUILD_DIR)/types_module.o: $(SRC_DIR)/types_module.f90 | $(BUILD_DIR)
31 $(FC) $(FFLAGS) -J$(BUILD_DIR) -c $< -o $@
32
33 $(BUILD_DIR)/cache_module.o: $(SRC_DIR)/cache_module.f90 $(BUILD_DIR)/types_module.o | $(BUILD_DIR)
34 $(FC) $(FFLAGS) -J$(BUILD_DIR) -I$(BUILD_DIR) -c $< -o $@
35
36 $(BUILD_DIR)/terminal_module.o: $(SRC_DIR)/terminal_module.f90 | $(BUILD_DIR)
37 $(FC) $(FFLAGS) -J$(BUILD_DIR) -c $< -o $@
38
39 $(BUILD_DIR)/git_module.o: $(SRC_DIR)/git_module.f90 $(BUILD_DIR)/types_module.o $(BUILD_DIR)/cache_module.o | $(BUILD_DIR)
40 $(FC) $(FFLAGS) -J$(BUILD_DIR) -I$(BUILD_DIR) -c $< -o $@
41
42 $(BUILD_DIR)/tree_module.o: $(SRC_DIR)/tree_module.f90 $(BUILD_DIR)/types_module.o | $(BUILD_DIR)
43 $(FC) $(FFLAGS) -J$(BUILD_DIR) -I$(BUILD_DIR) -c $< -o $@
44
45 $(BUILD_DIR)/display_module.o: $(SRC_DIR)/display_module.f90 $(BUILD_DIR)/tree_module.o $(BUILD_DIR)/types_module.o | $(BUILD_DIR)
46 $(FC) $(FFLAGS) -J$(BUILD_DIR) -I$(BUILD_DIR) -c $< -o $@
47
48 # Build main program
49 $(MAIN_OBJ): $(SRC_DIR)/$(MAIN) $(MODULE_OBJS) | $(BUILD_DIR)
50 $(FC) $(FFLAGS) -J$(BUILD_DIR) -I$(BUILD_DIR) -c $< -o $@
51
52 # Link everything
53 $(TARGET): $(MODULE_OBJS) $(MAIN_OBJ)
54 $(FC) $(FFLAGS) -o $@ $^
55
56 clean:
57 rm -rf $(BUILD_DIR) $(TARGET)