# tinydefrag - defragmenter for exFAT and FAT volumes
#
#   make                 build ./tinydefrag for this machine
#   make universal       macOS: build an arm64 + x86_64 binary
#   make test            run the test suite (needs root on Linux)
#   make install         install to $(PREFIX)/bin (default /usr/local)

PREFIX  ?= /usr/local
CC      ?= cc
CFLAGS  ?= -O2 -g
CFLAGS  += -std=c11 -Wall -Wextra -Wshadow -Wno-unused-parameter \
           -D_FILE_OFFSET_BITS=64 -D_DEFAULT_SOURCE -D_DARWIN_C_SOURCE -D_GNU_SOURCE
LDLIBS  ?=

UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
  PLATFORM := src/platform_macos.c
  LDLIBS   += -framework CoreFoundation -framework DiskArbitration -framework IOKit
  CFLAGS   += -mmacosx-version-min=10.13
else
  PLATFORM := src/platform_linux.c
endif

SRCS := $(filter-out src/platform_%.c,$(wildcard src/*.c)) $(PLATFORM)
OBJS := $(SRCS:.c=.o)

tinydefrag: $(OBJS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)

src/%.o: src/%.c src/tinydefrag.h
	$(CC) $(CFLAGS) -c -o $@ $<

universal: clean
	$(MAKE) CFLAGS="-O2 -arch arm64 -arch x86_64" tinydefrag

test: tinydefrag
	python3 tests/run_tests.py

install: tinydefrag
	install -d $(DESTDIR)$(PREFIX)/bin
	install -m 755 tinydefrag $(DESTDIR)$(PREFIX)/bin/tinydefrag

clean:
	rm -f tinydefrag src/*.o

.PHONY: universal test install clean
