Makefile · 1532 bytes Raw Blame History
1 # Makefile for fit - Terminal-based merge conflict resolver
2 .NOTPARALLEL:
3
4 FC := gfortran
5 FFLAGS := -O2 -ffree-line-length-none -J build/
6 LDFLAGS :=
7
8 SRC_DIR := src
9 APP_DIR := app
10 BUILD_DIR := build
11 BIN_DIR := bin
12
13 TARGET := $(BIN_DIR)/fit
14
15 # Source files (order matters - modules first)
16 MODULES := $(SRC_DIR)/terminal_control.f90 \
17 $(SRC_DIR)/pane_state.f90 \
18 $(SRC_DIR)/conflict_parser.f90 \
19 $(SRC_DIR)/resolution_engine.f90 \
20 $(SRC_DIR)/keyboard_input.f90 \
21 $(SRC_DIR)/tui_layout.f90
22
23 MAIN := $(APP_DIR)/main.f90
24
25 # Object files
26 MOD_OBJS := $(patsubst $(SRC_DIR)/%.f90,$(BUILD_DIR)/%.o,$(MODULES))
27 MAIN_OBJ := $(BUILD_DIR)/main.o
28
29 .PHONY: all clean install test release
30
31 all: $(TARGET)
32
33 $(BUILD_DIR):
34 mkdir -p $(BUILD_DIR)
35
36 $(BIN_DIR):
37 mkdir -p $(BIN_DIR)
38
39 # Build modules in order
40 $(BUILD_DIR)/%.o: $(SRC_DIR)/%.f90 | $(BUILD_DIR)
41 $(FC) $(FFLAGS) -c $< -o $@
42
43 # Build main program
44 $(MAIN_OBJ): $(MAIN) $(MOD_OBJS) | $(BUILD_DIR)
45 $(FC) $(FFLAGS) -c $< -o $@
46
47 # Link everything
48 $(TARGET): $(MOD_OBJS) $(MAIN_OBJ) | $(BIN_DIR)
49 $(FC) $(FFLAGS) $(LDFLAGS) -o $@ $^
50
51 release: FFLAGS := -O3 -ffree-line-length-none -J build/
52 release: clean all
53
54 test: $(TARGET)
55 @echo "Running tests..."
56 @if [ -d test ]; then \
57 cd test && bash run_tests.sh || true; \
58 else \
59 echo "No tests found"; \
60 fi
61
62 install: $(TARGET)
63 install -Dm755 $(TARGET) $(DESTDIR)/usr/bin/fit
64
65 clean:
66 rm -rf $(BUILD_DIR) $(BIN_DIR)
67
68 # For flat installation (RPM builds)
69 fit: $(TARGET)
70 cp $(TARGET) ./fit