/
Makefile
45 lines (33 loc) · 868 Bytes
/
Makefile
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
.PHONY: all force clean
C_SOURCES := $(wildcard src/*.c)
C_TARGETS := $(patsubst src/%.c,bin/%,$(C_SOURCES))
S_SOURCES := $(wildcard src/*.s)
S_TARGETS := $(patsubst src/%.s,bin/%,$(S_SOURCES))
TARGETS := $(C_TARGETS) $(S_TARGETS)
FLAGS := -ansi -pedantic -Wall -Wextra -Wshadow -Wmissing-prototypes
all: CFLAGS += -Os
all: bin $(TARGETS)
debug: CFLAGS += -g
debug: bin $(TARGETS)
bin:
@echo '[MD] bin'
@mkdir -p bin
bin/%: src/%.c
@if [[ ! -L $< ]]; then \
echo '[CC] $(@F)'; \
$(CC) $(FLAGS) $(CFLAGS) -o $@ $<; \
else \
echo '[LN] $(@F)'; \
source="$$(readlink '$<' | cut -d. -f1)"; \
cd bin; \
ln -sf $${source} $(@F); \
fi
bin/%: src/%.s
@echo '[AS] $(@F)'
@$(CC) -s -nostdlib -o $@ $<
bin/cmp: src/cmp.c
@echo '[CC] $(@F)';
@$(CC) $(FLAGS) $(CFLAGS) -Wno-implicit-fallthrough -o $@ $<
clean:
@echo '[RM] bin'
@rm -rf bin