| 1 | # Simple, but not-so-simple, Makefile |
| 2 | # (for karaoke_dsp Fortran module + test driver) |
| 3 | # 2025, mfw |
| 4 | |
| 5 | FC := gfortran |
| 6 | FFLAGS := -O2 -Wall |
| 7 | MODDIR := src/karaoke_dsp |
| 8 | BINDIR := build |
| 9 | MODFLAGS := -J $(BINDIR) |
| 10 | SRCS := $(MODDIR)/dsp.f90 |
| 11 | DRIVER := $(MODDIR)/dsp_driver.f90 |
| 12 | MODULE_OBJ:= $(BINDIR)/dsp.o |
| 13 | DRIVER_OBJ:= $(BINDIR)/dsp_driver.o |
| 14 | EXE := $(BINDIR)/dsp_test |
| 15 | |
| 16 | .PHONY: all clean |
| 17 | |
| 18 | all: $(EXE) |
| 19 | |
| 20 | # ensure build directory exists |
| 21 | $(BINDIR): |
| 22 | mkdir -p $@ |
| 23 | |
| 24 | # compile module |
| 25 | $(MODULE_OBJ): $(SRCS) | $(BINDIR) |
| 26 | $(FC) $(FFLAGS) $(MODFLAGS) -c $< -o $@ |
| 27 | |
| 28 | # compile driver (depends on the module .mod file in $(BINDIR)) |
| 29 | $(DRIVER_OBJ): $(DRIVER) $(MODULE_OBJ) |
| 30 | $(FC) $(FFLAGS) $(MODFLAGS) -c $< -o $@ |
| 31 | |
| 32 | # link into executable |
| 33 | $(EXE): $(MODULE_OBJ) $(DRIVER_OBJ) |
| 34 | $(FC) $(FFLAGS) -o $@ \ |
| 35 | $(MODFLAGS) \ |
| 36 | $(MODULE_OBJ) $(DRIVER_OBJ) |
| 37 | |
| 38 | clean: |
| 39 | rm -rf $(BINDIR) |