-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathMakefile
201 lines (158 loc) · 4.79 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# version is MAJOR.minor-commit (date hash)
# if there has not been a commit since the last tag, commit and hash are left out
# MAJOR is the major version number (change when protocol changes)
# minor is the minor version number
# commit is the number of commits since the last tag
# date is the date of the build
# hash is a unique substring of the hash of the last commit
GITDESC=$(shell git describe master)
GITDESC_WORDS=$(subst -, ,$(GITDESC))
GIT_VERSION=$(word 1,$(GITDESC_WORDS))
GIT_BUILD=$(word 2,$(GITDESC_WORDS))
GIT_HASH=$(word 3,$(GITDESC_WORDS))
ifeq ($(GIT_BUILD),)
GIT_BUILD_SUFFIX=
GIT_HASH_SUFFIX=
else
GIT_BUILD_SUFFIX=-$(GIT_BUILD)
GIT_HASH_SUFFIX=$(subst -, ,-$(GIT_HASH))
endif
VERSION=$(GIT_VERSION)$(GIT_BUILD_SUFFIX) ($(shell date "+%Y-%m-%d %H:%M:%S")$(GIT_HASH_SUFFIX))
$(info VERSION $(VERSION))
MKDIR=mkdir
TOUCH=touch
RM=rm -r -f
ifeq ($(CROSS),)
PREFIX=
else
ifeq ($(CROSS),win32)
PREFIX=i686-w64-mingw32-
OS=msys
else
ifeq ($(CROSS),rpi)
PREFIX=arm-linux-gnueabihf-
OS=raspberrypi
else
$(error Unknown cross compilation selected)
endif
endif
endif
CC=$(PREFIX)gcc
CPP=$(PREFIX)g++
SPINCMP=openspin
TOOLCC=gcc
CFLAGS=-Wall -DVERSION=\""$(VERSION)"\"
LDFLAGS=
ifeq ($(OS),Windows_NT)
OS=msys
endif
ifeq ($(OS),linux)
CFLAGS+=-DLINUX
EXT=
OSINT=$(OBJDIR)/sock_posix.o $(OBJDIR)/serial_posix.o
LIBS=
else ifeq ($(OS),raspberrypi)
CFLAGS+=-DLINUX -DRASPBERRY_PI
EXT=
OSINT=$(OBJDIR)/sock_posix.o $(OBJDIR)/serial_posix.o $(OBJDIR)/gpio_sysfs.o
LIBS=
else ifeq ($(OS),msys)
CFLAGS+=-DMINGW
LDFLAGS=-static
EXT=.exe
OSINT=$(OBJDIR)/serial_mingw.o $(OBJDIR)/sock_posix.o $(OBJDIR)/enumcom.o
LIBS=-lws2_32 -liphlpapi -lsetupapi
else ifeq ($(OS),macosx)
CFLAGS+=-DMACOSX
EXT=
OSINT=$(OBJDIR)/serial_posix.o $(OBJDIR)/sock_posix.o
LIBS=
else ifeq ($(OS),)
$(error OS not set)
else
$(error Unknown OS $(OS))
endif
BUILD=$(realpath ..)/proploader-$(OS)-build
SRCDIR=src
OBJDIR=$(BUILD)/obj
BINDIR=$(BUILD)/bin
SPINDIR=spin
TOOLDIR=tools
OBJS=\
$(OBJDIR)/main.o \
$(OBJDIR)/loader.o \
$(OBJDIR)/fastloader.o \
$(OBJDIR)/propimage.o \
$(OBJDIR)/packet.o \
$(OBJDIR)/serialpropconnection.o \
$(OBJDIR)/serialloader.o \
$(OBJDIR)/wifipropconnection.o \
$(OBJDIR)/loadelf.o \
$(OBJDIR)/sd_helper.o \
$(OBJDIR)/config.o \
$(OBJDIR)/expr.o \
$(OBJDIR)/system.o \
$(OBJDIR)/messages.o \
$(OSINT)
CFLAGS+=-I$(OBJDIR)
CPPFLAGS=$(CFLAGS)
all: $(BINDIR)/proploader$(EXT) $(BUILD)/blink-fast.binary $(BUILD)/blink-slow.binary
ctests: $(BUILD)/toggle.elf
$(OBJS): $(OBJDIR)/created $(HDRS) $(OBJDIR)/IP_Loader.h Makefile
$(BINDIR)/proploader$(EXT): $(BINDIR)/created $(OBJS)
$(CPP) -o $@ $(LDFLAGS) $(OBJS) $(LIBS) -lstdc++
$(BUILD)/%.elf: %.c
propeller-elf-gcc -Os -mlmm -o $@ $<
$(BUILD)/%-fast.binary: %.spin
$(SPINCMP) -o $@ $<
$(BUILD)/%-slow.binary: %.spin
$(SPINCMP) -DSLOW -o $@ $<
# This rule doesn't work under Windows because of a bug in OpenSpin.
#$(OBJDIR)/%.binary: $(SPINDIR)/%.spin
# $(SPINCMP) -o $@ $<
# This is the workaround.
$(OBJDIR)/%.binary: $(SPINDIR)/%.spin
cd $(dir $<); $(SPINCMP) -o $@ $(notdir $<)
$(OBJDIR)/%.c: $(OBJDIR)/%.binary $(BINDIR)/bin2c$(EXT)
$(BINDIR)/bin2c$(EXT) $< $@
$(OBJDIR)/%.o: $(OBJDIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
# This rule doesn't work under Windows because of a bug in OpenSpin.
#$(OBJDIR)/IP_Loader.h: $(SPINDIR)/IP_Loader.spin $(BINDIR)/split$(EXT)
# $(SPINCMP) -o $(OBJDIR)/IP_Loader.binary $<
# $(BINDIR)/split$(EXT) $(OBJDIR)/IP_Loader.binary $(OBJDIR)/IP_Loader.h
# This is the workaround.
$(OBJDIR)/IP_Loader.h: $(SPINDIR)/IP_Loader.spin $(BINDIR)/split$(EXT)
cd $(dir $<); $(SPINCMP) -o $(OBJDIR)/IP_Loader.binary $(notdir $<)
$(BINDIR)/split$(EXT) $(OBJDIR)/IP_Loader.binary $(OBJDIR)/IP_Loader.h
setup: $(BUILD)/blink-slow.binary
propeller-load -e $(BUILD)/blink-slow.binary
run: $(BINDIR)/proploader$(EXT) $(BUILD)/blink-fast.binary
$(BINDIR)/proploader$(EXT) $(BUILD)/blink-fast.binary -t
runbig: $(BINDIR)/proploader$(EXT) $(BUILD)/toggle.elf
$(BINDIR)/proploader$(EXT) $(BUILD)/toggle.elf -t
E: $(BINDIR)/proploader$(EXT) $(BUILD)/blink-fast.binary
$(BINDIR)/proploader$(EXT) $(BUILD)/blink-fast.binary -e
Ebig: $(BINDIR)/proploader$(EXT) $(BUILD)/toggle.elf
$(BINDIR)/proploader$(EXT) $(BUILD)/toggle.elf -e
P: $(BINDIR)/proploader$(EXT)
$(BINDIR)/proploader$(EXT) -P
P0: $(BINDIR)/proploader$(EXT)
$(BINDIR)/proploader$(EXT) -P0
X: $(BINDIR)/proploader$(EXT)
$(BINDIR)/proploader$(EXT) -X
X0: $(BINDIR)/proploader$(EXT)
$(BINDIR)/proploader$(EXT) -X0
$(OBJDIR)/%.o: $(SRCDIR)/%.c $(HDRS)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(HDRS)
$(CPP) $(CPPFLAGS) -c $< -o $@
$(BINDIR)/%$(EXT): $(TOOLDIR)/%.c
$(TOOLCC) $(CFLAGS) $< -o $@
install: $(BUILD)/bin/proploader$(EXT)
cp $(BUILD)/bin/proploader$(EXT) ~/bin
clean:
$(RM) $(BUILD)
%/created:
@$(MKDIR) -p $(@D)
@$(TOUCH) $@