Makefile 1.28 KB
Newer Older
Adam Blank's avatar
Adam Blank committed
1
CC = clang-with-asan
Caleb C. Sander's avatar
Caleb C. Sander committed
2
CFLAGS = -Iinclude -Wall -Wextra
Adam Blank's avatar
Adam Blank committed
3

Caleb C. Sander's avatar
Caleb C. Sander committed
4
TESTS = $(sort $(patsubst tests/%-input.txt,%-result,$(wildcard tests/*-input.txt)))
Adam Blank's avatar
Adam Blank committed
5

Caleb C. Sander's avatar
Caleb C. Sander committed
6
all: test recovery
Adam Blank's avatar
Adam Blank committed
7
8

out/%.o: src/%.c
Caleb C. Sander's avatar
Caleb C. Sander committed
9
	$(CC) $(CFLAGS) -c $^ -o $@
Adam Blank's avatar
Adam Blank committed
10

Caleb C. Sander's avatar
Caleb C. Sander committed
11
bin/test_tree: out/test_tree.o out/directory_tree.o
Adam Blank's avatar
Adam Blank committed
12
13
	$(CC) $(CFLAGS) $^ -o $@

14
bin/recover: out/recover.o out/fat16.o out/directory_tree.o
Adam Blank's avatar
Adam Blank committed
15
16
	$(CC) $(CFLAGS) $^ -o $@

Caleb C. Sander's avatar
Caleb C. Sander committed
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
tests/%-actual.txt tests/%-actual-files: bin/test_tree tests/%-input.txt
	rm -rf $(@:.txt=-files)
	mkdir $(@:.txt=-files)
	cd $(@:.txt=-files) && $(patsubst %,../../%,$^) > ../../$(@:-files=.txt)

tests/%-expected-files: tests/%-expected-files.tar.gz
	rm -rf $@
	tar -xzf $^ -C $(@D)

%-result: tests/%-expected.txt tests/%-actual.txt tests/%-expected-files tests/%-actual-files
	diff -u $(wordlist 1,2,$^) && diff -ur $(wordlist 3,4,$^) \
		&& echo PASSED test $(@:-result=). \
		|| (echo FAILED test $(@:-result=). Aborting.; false)

test: $(TESTS)
Caleb C. Sander's avatar
Caleb C. Sander committed
32
33
34
35
36

usb.dmg:
	curl "https://com.puter.systems/20fa/projects/assets/00/usb.dmg" -o $@

recovery: bin/recover usb.dmg
Caleb C. Sander's avatar
Caleb C. Sander committed
37
38
39
	rm -rf $@
	mkdir $@
	cd $@ && $(patsubst %,../%,$^)
Adam Blank's avatar
Adam Blank committed
40
41

clean:
Caleb C. Sander's avatar
Caleb C. Sander committed
42
43
44
45
46
	rm -rf out/* bin/* tests/*-actual* tests/*-expected-files usb.dmg recovery

.PRECIOUS: out/%.o bin/test_tree bin/recover \
	tests/%-actual.txt tests/%-actual-files tests/%-expected-files \
	usb.dmg recovery