-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
77 lines (69 loc) · 1.95 KB
/
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
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
NAME := Waste
TMP := tmp
SRC := src
INCLUDE := include
CC := gcc
CCFLAGS := -Wall -Wextra -Wpedantic -Wno-unused-parameter -std=c11
LDFLAGS :=
LDLIBS := -lSDL2 -lSDL2_ttf -lSDL2_mixer
ARGS :=
ifeq ($(BUILD), release)
# Release build - optimization and no debugging symbols
CCFLAGS += -O3 -s -flto -ffunction-sections -fdata-sections -DNDEBUG
LDFLAGS += -O3 -s -flto -Wl,--gc-sections
TAG := -release
else
# Debug build - no optimization and debugging symbols
CCFLAGS += -Og -ggdb3 -fno-inline -fno-omit-frame-pointer
LDFLAGS += -Og -ggdb3
TAG := -debug
endif
ifeq ($(OS), Windows_NT)
BD := $(NAME)_Windows
EXE := $(NAME).exe
WIN_BD := $(subst /,\\,$(BD))
WIN_TMP := $(subst /,\\,$(TMP))
TEST := start "$(NAME) " cmd /c "cd $(WIN_BD) & $(EXE) $(ARGS) & echo. & pause"
LDFLAGS += -mwindows
ifdef MSYSTEM
TEST := cmd //c $(subst /,//,$(TEST))
NUL := /dev/null
DEL := rm -f $(BD)/$(EXE) $(TMP)/*
TIME := echo " Compile Time: `date +%T`"
NL := echo ""
else
NUL := nul
DEL := attrib +r $(WIN_TMP)\\.keep >nul 2>&1 & del /f /q $(WIN_BD)\\$(EXE) $(WIN_TMP)\\*
TIME := echo: Compile Time: %time:~0,8%
NL := echo:
CCFLAGS += -IC:/MinGW/include
LDFLAGS += -LC:/MinGW/lib
endif
else
BD := $(NAME)_Linux
EXE := $(NAME)
TEST := cd $(BD) && cp -f $(EXE) /tmp/$(EXE) && chmod +x /tmp/$(EXE) && xterm -T $(NAME) -e "/tmp/$(EXE) $(ARGS)" && rm -f /tmp/$(EXE)
NUL := /dev/null
DEL := rm -f $(BD)/$(EXE) $(TMP)/*
TIME := echo " Compile Time: `date +%T`"
NL := echo ""
endif
.PHONY: all
all: info $(BD)/$(EXE)
.PHONY: info
info:
@echo ======================================
@$(TIME)
@echo ======================================
@$(NL)
$(TMP)/%$(TAG).o: $(SRC)/%.c $(wildcard $(INCLUDE)/*.h)
$(CC) $(CCFLAGS) $< -c -o $@
.PHONY: $(BD)/$(EXE)
$(BD)/$(EXE): $(patsubst $(SRC)/%.c,$(TMP)/%$(TAG).o,$(wildcard $(SRC)/*.c))
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
.PHONY: clean
clean:
-@$(DEL) >$(NUL) 2>&1
.PHONY: run test
run test:
@$(TEST)