-
-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathMakefile
More file actions
74 lines (65 loc) · 2.15 KB
/
Copy pathMakefile
File metadata and controls
74 lines (65 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# Fixed-Point Fundamentals
# Build all lessons and run tests
CC = gcc
CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -Werror -Wshadow -Wconversion
CFLAGS += -O2 -g
# Lesson directories
LESSONS = 00-why-not-floating-point \
01-fixed-point-fundamentals \
02-arithmetic-operations \
03-overflow-and-saturation \
04-rounding-strategies \
05-conversion \
06-practical-patterns
.PHONY: all clean test help
all: build
build:
@echo "Building all lessons..."
@for lesson in $(LESSONS); do \
if [ -d "lessons/$$lesson/src" ] && [ -n "$$(ls -A lessons/$$lesson/src/*.c 2>/dev/null)" ]; then \
echo " Building $$lesson..."; \
$(CC) $(CFLAGS) -I lessons/$$lesson/src \
lessons/$$lesson/src/*.c \
-o lessons/$$lesson/$$lesson 2>/dev/null || true; \
fi \
done
@echo "Done."
test:
@echo "Running all tests..."
@for lesson in $(LESSONS); do \
if [ -d "lessons/$$lesson/src/tests" ] && [ -n "$$(ls -A lessons/$$lesson/src/tests/*.c 2>/dev/null)" ]; then \
echo " Testing $$lesson..."; \
$(CC) $(CFLAGS) -I lessons/$$lesson/src \
lessons/$$lesson/src/*.c \
lessons/$$lesson/src/tests/*.c \
-o lessons/$$lesson/test_$$lesson 2>/dev/null && \
./lessons/$$lesson/test_$$lesson || true; \
fi \
done
@echo "Done."
examples:
@echo "Building examples..."
@for lesson in $(LESSONS) 07-when-to-use-what; do \
if [ -d "lessons/$$lesson/examples" ] && [ -n "$$(ls -A lessons/$$lesson/examples/*.c 2>/dev/null)" ]; then \
echo " Building $$lesson examples..."; \
for ex in lessons/$$lesson/examples/*.c; do \
name=$$(basename $$ex .c); \
$(CC) $(CFLAGS) $$ex -o lessons/$$lesson/examples/$$name 2>/dev/null || true; \
done \
fi \
done
@echo "Done."
clean:
@echo "Cleaning..."
@find lessons -type f -perm +111 -delete 2>/dev/null || \
find lessons -type f -executable -delete 2>/dev/null || true
@echo "Done."
help:
@echo "Fixed-Point Fundamentals"
@echo ""
@echo "Targets:"
@echo " all Build all lesson source files"
@echo " test Run all tests"
@echo " examples Build all examples"
@echo " clean Remove built files"
@echo " help Show this message"