summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: eacfd6328e3c4f2ced458cb6cf26a1a42862dc89 (plain) (blame)
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
75
76
77
MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-builtin-variables
MAKEFLAGS += --no-print-directory
MAKEFLAGS += --warn-undefined-variables


srcdir   := .
builddir := tmp


LIBUNIT_PREFIX := /opt/local/unit


LIBUNIT_CFLAGS := -isystem$(LIBUNIT_PREFIX)/include
LIBUNIT_LIBS   := -L$(LIBUNIT_PREFIX)/lib -lunit

CFLAGS  := -Wall -Wextra -Werror -std=gnu2x -O3 $(LIBUNIT_CFLAGS)
ASFLAGS :=
LDFLAGS :=
LIBS    := $(LIBUNIT_LIBS) -lpthread -lc -lgcc

AR := ar
AS := as
CC := cc
LD := $(CC) $(CFLAGS)


FIND  := find
GREP  := grep
MKDIR := mkdir
SED   := sed
SORT  := sort


SRCDIR := $(srcdir)/src
SRC    := $(shell $(FIND) $(SRCDIR) -type f | $(GREP) '\.c$$' | $(SORT))
ASM    := $(patsubst $(srcdir)/%.c,$(builddir)/%.s,$(SRC))
OBJ    := $(patsubst %.s,%.o,$(ASM))
BIN    := $(builddir)/unit_c_app

SRCDIRS   := $(shell $(FIND) $(SRCDIR) -type d | $(SED) 's,$$,/,')
BUILDDIRS := $(patsubst $(srcdir)/%, $(builddir)/%, $(SRCDIRS))


.PHONY: all
all: $(BIN)


.SECONDEXPANSION:


$(ASM): $(builddir)/%.s: $(srcdir)/%.c Makefile | $$(@D)/
	$(info CC	$@)
	$(CC) -S $(CFLAGS) -o $@ $<

$(OBJ): %.o: %.s Makefile | $$(@D)/
	$(info AS	$@)
	$(AS) $(ASFLAGS) -o $@ $<

$(BIN): $(OBJ) Makefile | $$(@D)/
	$(info LD	$@)
	$(LD) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)

$(BUILDDIRS): %/: | $$(dir %)
	$(info MKDIR	$@)
	$(MKDIR) $@

$(builddir)/:
	$(info MKDIR	$@)
	$(MKDIR) $@



ifdef V
else
.SILENT:
endif