-
Notifications
You must be signed in to change notification settings - Fork 12
/
Makefile
360 lines (306 loc) · 12.1 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
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
HERE:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
# This is the value used for the -j flag when running make.
# Adjust this to a appropriate value for your system a good rule of thumb is the
# amount of cores your machine has available. +1 if you don't need to use the
# machine while building.
# You may pass this parameter to your make command:
# make auto_build_stable THREADS=8
THREADS?=4
# The port to run the local repository on.
#
# If you set this port to something < 1024 make sure to run the server in the
# run_repository_all target with sudo and also kill it with sudo in the
# stop_repository_all target.
WWW_PORT=2342
WWW=$(HERE)/local_www
WWW_PID_FILE=$(HERE)/www.pid
# OpenWRT related settings
OPENWRT_GIT=git://git.openwrt.org/12.09/openwrt.git
OPENWRT_DIR=$(HERE)/openwrt
OPENWRT_FEED_FILE=$(OPENWRT_DIR)/feeds.conf
PIRATEBOX_FEED_GIT=https://github.com/PirateBox-Dev/openwrt-piratebox-feed.git
PIRATEBOX_DEV_FEED_GIT=https://github.com/PirateBox-Dev/openwrt-piratebox-feed.git;development
PIRATEBOX_BETA_FEED_GIT=https://github.com/PirateBox-Dev/openwrt-piratebox-feed.git;release-1.1.0
IMAGE_BUILD_GIT=https://github.com/PirateBox-Dev/openwrt-image-build.git
IMAGE_BUILD=openwrt-image-build
IMAGE_BUILD_BETA_BRANCH="release-1.1.0"
# PirateBox-image files, which are used in the package
PIRATEBOXSCRIPTS_GIT=https://github.com/PirateBox-Dev/PirateBoxScripts_Webserver.git
PIRATEBOXSCRIPTS=PirateBoxScripts_Webserver/
PIRATEBOXBETA_BRANCH="release-1.1.0"
# LibraryBox-image files
LIBRARYBOXSCRIPTS_GIT=https://github.com/LibraryBox-Dev/LibraryBox-core.git
LIBRARYBOXSCRIPTS=Librarybox-core/
LIBRARYBOXBETA_BRANCH="release-2.1"
# The default make target.
# Display some information about the available targets.
info:
@ echo "Ooooop, please read the README"
@ echo "=============================="
@ echo "Available build targets:"
@ echo "* openwrt_env"
@ echo "* apply_piratebox_feed"
@ echo "* update_all_feeds"
@ echo "* install_piratebox_feed"
@ echo "* create_piratebox_script_image"
@ echo "* create_librarybox_script_image"
@ echo "* checkout_librarybox_beta"
@ echo "* checkout_piratebox_beta (currently disabled in auto-beta)"
@ echo "* build_openwrt"
@ echo "* build_openwrt_beta"
@ echo "* build_openwrt_development"
@ echo "* acquire_stable_packages"
@ echo "* run_repository_all"
@ echo "* piratebox"
@ echo "* stop_repository_all"
@ echo "* clean"
@ echo "* distclean"
@ echo "=============================="
@ echo "Available auto build targets:"
@ echo "* auto_build_stable"
@ echo "* auto_build_beta"
@ echo "* auto_build_development"
openwrt_env: $(OPENWRT_DIR) $(IMAGE_BUILD)
# Clone the imagebuild repository, checkout the AA-with-installer branch and
# adapt the Makefile to use this local repository.
$(IMAGE_BUILD):
git clone $(IMAGE_BUILD_GIT)
cd $(IMAGE_BUILD) && git checkout AA-with-installer
switch_to_local_webserver:
sed -i "s|http://stable.openwrt.piratebox.de|http://127.0.0.1:$(WWW_PORT)|" $(IMAGE_BUILD)/Makefile
sed -i "s|http://development.piratebox.de|http://127.0.0.1:$(WWW_PORT)|" $(IMAGE_BUILD)/Makefile
sed -i "s|http://beta.openwrt.piratebox.de|http://127.0.0.1:$(WWW_PORT)|" $(IMAGE_BUILD)/Makefile
# Clone the OpenWRT repository, configure it
$(OPENWRT_DIR):
git clone $(OPENWRT_GIT)
cd $(OPENWRT_DIR) && make defconfig
cd $(OPENWRT_DIR) && make prereq
# Create piratebox script image and copy it to the build directory if available
create_piratebox_script_image: $(PIRATEBOXSCRIPTS)
cd $(PIRATEBOXSCRIPTS) && make clean
cd $(PIRATEBOXSCRIPTS) && make shortimage
test -d $(IMAGE_BUILD) && cp $(PIRATEBOXSCRIPTS)/piratebox_ws_*_img.tar.gz $(IMAGE_BUILD)
# Clone the PirateBoxScripts repository
$(PIRATEBOXSCRIPTS):
git clone $(PIRATEBOXSCRIPTS_GIT) $@
# Create LibraryBox script image and copy it to the build directory if available
create_librarybox_script_image: $(LIBRARYBOXSCRIPTS)
cd $(LIBRARYBOXSCRIPTS) && make clean
cd $(LIBRARYBOXSCRIPTS) && make shortimage
test -d $(IMAGE_BUILD) && cp $(LIBRARYBOXSCRIPTS)/librarybox_*_img.tar.gz $(IMAGE_BUILD)
# Clone the LibraryBoxScripts repository
$(LIBRARYBOXSCRIPTS):
git clone $(LIBRARYBOXSCRIPTS_GIT) $@
checkout_librarybox_dev: $(LIBRARYBOXSCRIPTS)
cd $(LIBRARYBOXSCRIPTS) && git checkout development
checkout_piratebox_dev: $(PIRATEBOXSCRIPTS)
cd $(PIRATEBOXSCRIPTS) && git checkout development
# Apply the PirateBox feed
apply_piratebox_feed: $(OPENWRT_FEED_FILE)
echo "src-git piratebox $(PIRATEBOX_FEED_GIT)" >> $(OPENWRT_FEED_FILE)
# Apply the PirateBox dev-feed
apply_piratebox_dev_feed: $(OPENWRT_FEED_FILE)
echo "src-git piratebox $(PIRATEBOX_DEV_FEED_GIT)" >> $(OPENWRT_FEED_FILE)
# Copy the OpenWRT feed file
$(OPENWRT_FEED_FILE):
cp $(OPENWRT_FEED_FILE).default $(OPENWRT_FEED_FILE)
# Fix, SVN was deactivated in 2016
sed -i 's|^src-svn packages|#src-svn packages|' $(OPENWRT_FEED_FILE)
echo "src-git packages git://git.openwrt.org/12.09/packages.git" >> $(OPENWRT_FEED_FILE)
# Apply PirateBox beta feed
apply_piratebox_beta_feed: $(OPENWRT_FEED_FILE)
echo "src-git piratebox $(PIRATEBOX_BETA_FEED_GIT)" >> $(OPENWRT_FEED_FILE)
switch_local_feed_to_dev: $(PIRATEBOXSCRIPTS) $(LIBRARYBOXSCRIPTS)
$(call git_checkout_development, $(PIRATEBOXSCRIPTS))
$(call git_checkout_development, $(LIBRARYBOXSCRIPTS))
# Revert the changes we made in Makefile
cd $(IMAGE_BUILD) && git checkout .
$(call git_checkout_development, $(IMAGE_BUILD))
define git_checkout_development
cd $(1) && git checkout development
endef
switch_local_feed_to_beta: $(PIRATEBOXSCRIPTS) $(LIBRARYBOXSCRIPTS)
cd $(PIRATEBOXSCRIPTS) && git checkout $(PIRATEBOXBETA_BRANCH)
cd $(LIBRARYBOXSCRIPTS) && git checkout $(LIBRARYBOXBETA_BRANCH)
cd $(IMAGE_BUILD) && git checkout .
cd $(IMAGE_BUILD) && git checkout $(IMAGE_BUILD_BETA_BRANCH)
refresh_local_feeds: $(PIRATEBOXSCRIPTS) $(LIBRARYBOXSCRIPTS)
$(call git_refresh_repository, $(PIRATEBOXSCRIPTS))
$(call git_refresh_repository, $(LIBRARYBOXSCRIPTS))
# Revert the changes we made in Makefile
cd $(IMAGE_BUILD) && git checkout .
$(call git_refresh_repository, $(IMAGE_BUILD))
## Refresh a repository feed
define git_refresh_repository
cd $(1) && git pull
endef
# Pulls an overall refresh
update_all_feeds:
cd $(OPENWRT_DIR) && export LC_ALL=C && ./scripts/feeds update -a
# Remember that you might have to switch the the branches on git-packages like
# the openwrt-packages in the feed folder or PirateBoxScripts_Webserver to get
# the correct versions together (before release 1.0 it is a bit inconstent due
# to a restructuration)
# Installs all packages from remote git repository to build environment
install_piratebox_feed:
cd $(OPENWRT_DIR) && export LC_ALL=C && ./scripts/feeds install -p piratebox -a
# Copy OpenWRT config and build toolchain and OpenWRT
#
# Note: Toolkit-build needs to run single threaded, because sometimes
# build-dependencies fail.
# Package-Build runs fine multi-threaded.
#
# Once the toolchain id build, you can build single packages in the openwrt
# folder:
# make package/feeds/<feed>/<package>/compile
# make package/feeds/<feed>/<package>/install
build_openwrt:
cp $(HERE)/configs/openwrt $(OPENWRT_DIR)/.config
cd $(OPENWRT_DIR) && export LC_ALL=C && make -j $(THREADS)
build_openwrt_beta:
cp $(HERE)/configs/openwrt.beta $(OPENWRT_DIR)/.config
cd $(OPENWRT_DIR) && export LC_ALL=C && make -j $(THREADS)
build_openwrt_development:
cp $(HERE)/configs/openwrt.snapshot $(OPENWRT_DIR)/.config
cd $(OPENWRT_DIR) && export LC_ALL=C && make -j $(THREADS)
# Adjust configuration on image builder if beta needs changes
modify_image_builder_beta:
# sed -i -e 's|librarybox_2.1_img.tar.gz|librarybox_2.1_img.tar.gz|g' $(IMAGE_BUILD)/Makefile
# Build the piratebox firmware images and install.zip
piratebox: switch_to_local_webserver
cd $(IMAGE_BUILD) && make all INSTALL_TARGET=piratebox
@ echo "========================"
@ echo "Build process completed."
@ echo "========================"
@ echo "Your build is now available in $(IMAGE_BUILD)/target_piratebox"
# Build the piratebox firmware images and install.zip
librarybox: switch_to_local_webserver
sed -i -e 's|piratebox-mesh|pbxmesh|g' $(IMAGE_BUILD)/Makefile
cd $(IMAGE_BUILD) && make all INSTALL_TARGET=librarybox
@ echo "========================"
@ echo "Build process completed."
@ echo "========================"
@ echo "Your build is now available in $(IMAGE_BUILD)/target_librarybox"
# Create local repository and start http server to serve files
#
# Runs a repository, that will only contain files having "all" as naming
# pattern.
# This local www repository is used for the openwrt-image-build.
# That toolset generates out of the stock OpenWRT ImageBuilder the custom files, we use.
# Read more about ImageBuild: http://wiki.openwrt.org/doc/howto/obtain.firmware.generate
# For getting our packages into the custom image, we inject our local repository
# into the build process and get our package-dependencies from there.
# --- see more informations in openwrt-image-build folder.
run_repository_all:
mkdir -p $(WWW)
- ln -s $(OPENWRT_DIR)/bin/ar71xx $(WWW)/all
rm $(OPENWRT_DIR)/bin/ar71xx/packages/*ar71xx* -f
cd $(OPENWRT_DIR) && make package/index
cd $(WWW) && touch $(WWW_PID_FILE) && python3 -m http.server $(WWW_PORT) & echo "$$!" > $(WWW_PID_FILE)
# Stop the repository if a pid file is present
stop_repository_all:
- if [ -e $(WWW_PID_FILE) ]; then kill -9 `cat $(WWW_PID_FILE)` ; rm $(WWW_PID_FILE); fi;
start_timer:
@ date +%s > time.log
end_timer:
@ echo Build took \
$$(expr \( $$(date +%s) - $$(cat time.log) \) / 60) min \
$$(expr \( $$(date +%s) - $$(cat time.log) \) % 60) sec
@ rm -rf time.log
# Stop the repository if a pid file is present
stop_repository_all:
- if [ -e $(WWW_PID_FILE) ]; then kill -9 `cat $(WWW_PID_FILE)` ; rm $(WWW_PID_FILE); fi;
start_timer:
@ date +%s > time.log
end_timer:
@ echo Build took \
$$(expr \( $$(date +%s) - $$(cat time.log) \) / 60) min \
$$(expr \( $$(date +%s) - $$(cat time.log) \) % 60) sec
@ rm -rf time.log
# Build the piratebox stable release
auto_build_stable: \
start_timer \
clean \
openwrt_env \
apply_piratebox_feed \
update_all_feeds \
install_piratebox_feed \
create_piratebox_script_image \
create_librarybox_script_image \
build_openwrt \
run_repository_all \
piratebox \
librarybox \
stop_repository_all \
end_timer
# Build the piratebox beta release, this uses the development branch of the
# openwrt-piratebox-feed
# TODO ; fixme
#auto_build_beta: \
# start_timer \
# clean \
# openwrt_env \
# apply_piratebox_beta_feed \
# update_all_feeds \
# install_piratebox_feed \
# checkout_librarybox_beta \
# create_piratebox_script_image \
# create_librarybox_script_image \
# build_openwrt_beta \
# modify_image_builder_beta \
# run_repository_all \
# piratebox \
# librarybox \
# stop_repository_all \
# end_timer
# Build beta releases
auto_build_beta: \
start_timer \
clean \
openwrt_env \
apply_piratebox_beta_feed \
update_all_feeds \
install_piratebox_feed \
switch_local_feed_to_beta \
create_piratebox_script_image \
create_librarybox_script_image \
build_openwrt_beta \
modify_image_builder_beta \
run_repository_all \
piratebox \
librarybox \
stop_repository_all \
end_timer
# Build the piratebox snapshot release
auto_build_development: \
start_timer \
clean \
openwrt_env \
apply_piratebox_dev_feed \
switch_local_feed_to_dev \
refresh_local_feeds \
update_all_feeds \
install_piratebox_feed \
checkout_piratebox_dev \
checkout_librarybox_dev \
create_piratebox_script_image \
create_librarybox_script_image \
build_openwrt_development \
run_repository_all \
piratebox \
librarybox \
stop_repository_all \
end_timer
# Prepare for a new build without deleting the whole toolchain
clean: stop_repository_all
if [ -e $(IMAGE_BUILD) ]; then cd $(IMAGE_BUILD) && make clean; fi;
if [ -e $(OPENWRT_DIR) ]; then cd $(OPENWRT_DIR) && make clean; fi;
rm -rf $(OPENWRT_FEED_FILE)
rm -rf $(IMAGE_BUILD)/target_*
# Delete all files and directories that were created during the build process
distclean: stop_repository_all
rm -rf $(OPENWRT_DIR)
rm -rf $(WWW)
rm -rf $(IMAGE_BUILD)
rm -rf $(PIRATEBOXSCRIPTS)
rm -rf $(LIBRARYBOXSCRIPTS)