2 # Copyright (C) 2016 Piotr Dymacz <piotr@dymacz.pl>
4 # SPDX-License-Identifier: GPL-2.0
9 HOSTARCH := $(shell uname -m | \
10 sed -e s/i.86/x86_32/ \
17 HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
18 sed -e 's/\(cygwin\).*/cygwin/')
20 ifneq ($(HOSTOS), darwin)
21 ifneq ($(HOSTOS), linux)
22 $(error Error! Unsupported host operating system/arch: "$(HOSTOS)-$(HOSTARCH)")
28 export BUILD_TOPDIR = $(PWD)
29 export STAGING_DIR = $(BUILD_TOPDIR)/tmp
30 export SOURCE_DIR = $(BUILD_TOPDIR)/u-boot
31 export BIN_DIR = $(BUILD_TOPDIR)/bin
32 export SUB_MAKE_CMD = $(MAKE) --silent --no-print-directory \
33 ARCH=mips V=1 SHELL=$(SHELL)
35 # ==========================================================================
36 # You can override some default configuration options below or pass them on
37 # command line, for example:
38 # make ... IMG_SIZE=256 IMG_LZMA=0 CROSS_COMPILE=...
40 # Set to 1 if you want to build RAM-loadable image, without low level
41 # initialization of the hardware (PLL/clocks, DRAM):
44 # You can change limit of the image size in KB with below option (image will
45 # be filled up to the selected size with 0xFF):
48 # If you don't want LZMA compressed image, set below option to 1 (by default
49 # images for all targets are LZMA compressed):
52 # Define _absolute_ path to your toolchain directory, for example:
53 # export TOOLCHAIN_DIR:=/home/user/toolchain-mips_24kc_gcc-5.4.0_musl-1.1.15
54 # export PATH:=$(TOOLCHAIN_DIR)/bin:$(PATH)
57 CROSS_COMPILE = mips-openwrt-linux-musl-
61 # By default, optimization for size (-Os) is enabled, set below option
62 # to n or remove it if you want only basic optimization (-O/-O1)
65 ifneq ($(BUILD_OPTIMIZED), n)
68 export BUILD_OPTIMIZED
70 # ==========================================================================
72 # =======================
73 # CUSTOM HELPER FUNCTIONS
74 # =======================
77 echo -e "\e[92m$(1)\e[0m"
81 echo -e "\e[91m$(1)\e[0m"
85 echo -e "\e[96m$(1)\e[0m"
90 $(if $(IMG_SIZE),$(strip $(IMG_SIZE)),$(strip $(1)))
96 $(if $(filter $(strip $(IMG_LZMA)),1),1,0),\
97 $(if $(filter $(strip $(1)),1),1,0)\
102 $(shell git symbolic-ref --short -q HEAD 2>/dev/null || echo "unknown")
106 $(shell git rev-parse --short=8 -q HEAD 2>/dev/null || echo "unknown")
109 define git_branch_hash
110 git_$(call git_branch)-$(call git_hash)
113 # $(1): file extension
115 u-boot_mod__$@__$(shell date +"%Y%m%d")__$(call git_branch_hash)$(if \
116 $(filter $(IMG_RAM),1),__RAM-LOAD-ONLY)$(if $(1),.$(1))
120 $(call echo_green,Calculating MD5 sum for the final image...)
122 md5sum $(BIN_DIR)/$(call img_name,bin) | \
123 awk '{print $$1}' | \
124 tr -d '\n' > $(BIN_DIR)/$(call img_name).md5
126 echo ' *'$(call img_name,bin) >> $(BIN_DIR)/$(call img_name,md5)
131 $(call echo_green,Preparing $(1) KB image padded with 0xFF...)
132 tr "\000" "\377" < /dev/zero | dd ibs=1k count=$(1) \
133 of=$(BIN_DIR)/$(call img_name,bin) 2> /dev/null
137 $(call echo_green,Preparing final image...)
138 dd if=$(BIN_DIR)/temp.bin of=$(BIN_DIR)/$(call img_name,bin) \
139 conv=notrunc 2> /dev/null
141 rm -f $(BIN_DIR)/temp.bin
144 # $(1): path to image
145 # $(2): size limit in KB
147 $(call echo_green,Checking size of the image...)
149 if [ `wc -c < $(1)` -gt $$(($(2) * 1024)) ]; then \
151 $(call echo_red, ======================); \
152 $(call echo_red, IMAGE SIZE IS TOO BIG!); \
153 $(call echo_red, ======================); \
160 # $(1): filename of image to copy
161 # $(2): image size limit (check if set)
164 $(call echo_green,Copying compiled image...)
166 cp $(SOURCE_DIR)/$(strip $(1)).bin $(BIN_DIR)/temp.bin
167 $(if $(2),$(call size_chk,$(BIN_DIR)/temp.bin,$(2)))
170 # $(1): size limit in KB
171 # $(2): if set to 1, use LZMA
172 # $(3): other parameters passed to subdir make
174 args="IMG_SIZE=$$((1024*$(call img_size,$(1)))) \
175 IMG_LZMA=$(strip $(call is_lzma,$(2))) \
177 cd $(SOURCE_DIR) && \
178 $(SUB_MAKE_CMD) $@ $$args && \
179 $(SUB_MAKE_CMD) all $$args
181 $(if $(filter $(IMG_RAM),1),\
182 $(call copy_img,u-boot), \
183 $(if $(filter $(strip $(call is_lzma,$(2))),1), \
184 $(call copy_img,tuboot,$(call img_size,$(1))), \
185 $(call copy_img,u-boot,$(call img_size,$(1))) \
189 $(if $(filter $(IMG_RAM),1),,$(call padded_img,$(1)))
193 $(call echo_green,DONE!)
194 $(call echo_green,Image 'bin/$(call img_name,bin)' is ready!)
196 if [ "x$$IMG_RAM" = "x1" ]; then \
198 $(call echo_blue, ================================); \
199 $(call echo_blue, THIS IMAGE IS ONLY FOR RAM LOAD!); \
200 $(call echo_blue, DO NOT WRITE IT INTO FLASH CHIP!); \
201 $(call echo_blue, ================================); \
206 # ===========================================
207 # TARGETS IN ALPHABETICAL ORDER, SHARED FIRST
208 # ===========================================
210 COMMON_AR933X_TARGETS = \
211 gainstrong_oolite_v1_dev \
212 gl-innovations_gl-inet-6416 \
217 tp-link_tl-mr3220_v2 \
220 tp-link_tl-wr720n_v3_CN \
223 $(COMMON_AR933X_TARGETS):
226 COMMON_ETHS27_TARGETS = \
227 tp-link_tl-mr3420_v2 \
228 tp-link_tl-wa801nd_v2 \
229 tp-link_tl-wa850re_v2 \
230 tp-link_tl-wa830re_v2 \
234 tp-link_tl-wr820n_CN \
235 tp-link_tl-wr841n_v10 \
236 tp-link_tl-wr841n_v11 \
237 tp-link_tl-wr841n_v8 \
238 tp-link_tl-wr841n_v9 \
239 tp-link_tl-wr842n_v3 \
240 tp-link_tl-wr902ac_v1
242 $(COMMON_ETHS27_TARGETS):
243 @$(call build,123,1,ETH_CONFIG=_s27)
245 8devices_carambola2 \
246 alfa-network_hornet-ub \
247 creatcomm-technology_d3321 \
248 gl-innovations_gl-ar150:
252 comfast_cf-e320n_v2 \
255 @$(call build,64,1,ETH_CONFIG=_s27)
261 @$(call build,192,1,DEVICE_VENDOR=dragino)
269 @$(call build,256,1,ETH_CONFIG=_s27)
273 @$(call build,123,1,ETH_CONFIG=_s17)
275 unwireddevices_unwired-one:
276 @$(call build,128,1,DEVICE_VENDOR=SE)
278 village-telco_mesh-potato_v2:
279 @$(call build,192,1,DEVICE_VENDOR=villagetelco)
282 @$(call build,192,1,ETH_CONFIG=_s27)
285 @$(call build,64,1,ETH_CONFIG=_s27)
292 @cd $(SOURCE_DIR) && $(SUB_MAKE_CMD) $@
295 @cd $(SOURCE_DIR) && $(SUB_MAKE_CMD) distclean
296 @rm -f $(SOURCE_DIR)/httpd/fsdata.c
299 @$(call echo_green,Removing all binary images...)
300 @rm -f $(BIN_DIR)/*.bin
301 @rm -f $(BIN_DIR)/*.md5