-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
114 lines (86 loc) · 2.81 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Build configuration
#VERBOSE=1
DEBUG=1
CROSS_COMPILE=
# Output Files
TARGET = nuclight
OLOC = ofiles
##########################################################################
# Check Host OS
##########################################################################
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
CFLAGS += -DLINUX
LINUX=1
endif
ifeq ($(UNAME_S),Darwin)
CFLAGS += -DOSX
OSX=1
endif
##########################################################################
# User configuration and firmware specific object files
##########################################################################
# Overall system defines for compilation
ifdef DEBUG
GCC_DEFINE= -DDEBUG
DEBUG_OPTS = -ggdb3
OPT_LEVEL = -Og
else
GCC_DEFINE=
DEBUG_OPTS =
OPT_LEVEL = -O2
endif
# Directories for sources
App_DIR=Src
Inc_DIR=Inc
INCLUDE_PATHS = -I$(Inc_DIR)
GCC_DEFINE+= -std=gnu99
CFILES =
SFILES =
OLOC = ofiles
##########################################################################
# Project-specific files
##########################################################################
# Main Files
# ==========
CFILES = $(App_DIR)/main.c $(App_DIR)/generics.c
##########################################################################
# Quietening
##########################################################################
ifdef VERBOSE
cmd = $1
Q :=
else
cmd = @$(if $(value 2),echo "$2";)$1
Q := @
endif
##########################################################################
# Compiler settings, parameters and flags
##########################################################################
GITTAG = -DGIT_DESCRIBE=\"`git describe --tags --always --dirty`\"
LDFLAGS =
CFLAGS += $(OPT_LEVEL) $(GITTAG) $(DEBUG_OPTS) -Wall $(LDFLAGS)
OBJS = $(patsubst %.c,%.o,$(CFILES))
POBJS = $(patsubst %,$(OLOC)/%,$(OBJS))
PDEPS = $(POBJS:.o=.d)
##########################################################################
##########################################################################
##########################################################################
all: build
$(OLOC)/%.o : %.c
$(Q)mkdir -p $(basename $@)
$(call cmd, \$(CC) -c $(CFLAGS) $(INCLUDE_PATHS) $(GCC_DEFINE) -MMD -o $@ $< ,\
Compiling $<)
build: $(TARGET)
$(TARGET): $(POBJS)
$(Q)$(CC) $(LDFLAGS) -o $(TARGET) $(MAP) $(POBJS)
-@echo "Completed build of" $(TARGET)
clean:
-$(call cmd, \rm -rf $(OLOC) $(TARGET) ,\
Cleaning )
print-%:
@echo $* is $($*)
pretty: clean
@astyle --style=gnu -n --quiet --recursive --indent=spaces=2 --indent-classes --indent-switches --indent-preproc-block --indent-col1-comments --break-closing-brackets --add-brackets --convert-tabs --keep-one-line-statements --indent-cases --max-code-length=120 --break-after-logical --convert-tabs "$(Inc_DIR)/*.h" "$(App_DIR)/*.c"
-@echo "Prettification complete"
-include $(PDEPS)