2 # Copyright (C) 2016 Piotr Dymacz <piotr@dymacz.pl>
4 # (C) Copyright 2000-2006 Wolfgang Denk,
5 # DENX Software Engineering, wd@denx.de.
7 # SPDX-License-Identifier: GPL-2.0
13 EXTRAVERSION = -$(shell git rev-parse --short=8 HEAD)
14 ISREPODIRTY = $(shell if git diff-files | read dummy; then echo 1; else echo 0; fi)
15 VERSION_FILE = include/version_autogenerated.h
17 MKCONFIG = $(BUILD_TOPDIR)/u-boot/mkconfig
18 MKIMAGE = $(BUILD_TOPDIR)/u-boot/tools/mkimage
19 LZMA = $(BUILD_TOPDIR)/host_util/$(HOSTOS)-$(HOSTARCH)/lzma
21 # Show in version string if we are not building from clean repository
22 ifeq ($(ISREPODIRTY),1)
23 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)"-dirty"
25 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)"-clean"
28 # ===============================================================
30 TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
33 # Some variables passed as arguments in cmd
35 CONFIG_MAX_UBOOT_SIZE = $(IMG_SIZE)
36 export CONFIG_MAX_UBOOT_SIZE
41 export COMPRESSED_UBOOT
45 CONFIG_SKIP_LOWLEVEL_INIT = 1
46 export CONFIG_SKIP_LOWLEVEL_INIT
49 ifneq ($(DEVICE_VENDOR),)
50 DEVICE_VENDOR = $(DEVICE_VENDOR)
54 # Never use LZMA compression
55 # for a RAM version of image
56 ifdef CONFIG_SKIP_LOWLEVEL_INIT
57 unexport COMPRESSED_UBOOT
62 $(error "CROSS_COMPILE is not defined!")
67 $(error "STAGING_DIR is not defined!")
77 # =======================
78 # CUSTOM HELPER FUNCTIONS
79 # =======================
82 echo -e "\e[92m$(1)\e[0m"
86 echo -e "\e[91m$(1)\e[0m"
90 echo -e "\e[93m$(1)\e[0m"
94 u-boot_mod $(if $(filter $(IMG_RAM),1),RAM,$(if $(filter $(IMG_LZMA),1),LZMA FLASH,FLASH)) image
100 len=$$((5 - ($$(expr length $(1))/8))); \
101 tab=`printf '%*s' "$$len" | tr ' ' "\t"`; \
102 echo -ne "#define $(strip $(1))$${tab}" >> include/config.h; \
103 echo -e '$(strip $(2))' >> include/config.h
108 echo -e '#undef $(strip $(1))' >> include/config.h
113 echo -e '#include <$(strip $(1))>' >> include/config.h
118 $(if $(1),$(strip $(1)),OEM/Unknown)
123 $(if $(1),$(strip $(1)),4)
126 # $(1): vendor, board name/model
127 # $(2): default FLASH size in MB
128 # $(3): reset button GPIO number
129 # $(4): 1 if reset button is active low
132 $(call echo_green,Preparing configuration for target: $@)
135 $(call echo_yellow, Device vendor/model:\t$(call board_name,$(1)))
136 $(if $(DEVICE_VENDOR), \
137 $(call echo_yellow, Custom recovery web:\tyes ($(DEVICE_VENDOR))), \
138 $(call echo_yellow, Custom recovery web:\tno) \
141 $(if $(CONFIG_MAX_UBOOT_SIZE), \
142 $(call echo_yellow, Image size limit:\t$$(($(CONFIG_MAX_UBOOT_SIZE) / 1024)) KB),
143 $(call echo_yellow, Image size limit:\tnot specified)
146 $(call echo_yellow, Default FLASH size:\t$(call flash_size,$(2)) MB)
149 $(call echo_yellow, GPIO reset button:\t$(strip $(3))), \
150 $(call echo_yellow, GPIO reset button:\tnot specified) \
153 $(if $(filter $(4),1),
154 $(call echo_yellow, Button active low:\tyes), \
155 $(call echo_yellow, Button active low:\tno) \
158 $(if $(filter $(COMPRESSED_UBOOT),1), \
159 $(call echo_yellow, LZMA compression:\tyes), \
160 $(call echo_yellow, LZMA compression:\tno) \
163 $(if $(filter $(CONFIG_SKIP_LOWLEVEL_INIT),1), \
164 $(call echo_yellow, RAM-loadable only:\tyes), \
165 $(call echo_yellow, RAM-loadable only:\tno) \
168 $(if $(3),$(call define_add,CONFIG_GPIO_RESET_BTN,$(strip $(3))))
169 $(if $(filter $(4),1),$(call define_add,CONFIG_GPIO_RESET_BTN_ACTIVE_LOW,1))
170 $(if $(CONFIG_MAX_UBOOT_SIZE), \
171 $(call define_add,CONFIG_MAX_UBOOT_SIZE,$(CONFIG_MAX_UBOOT_SIZE))
172 $(call define_add,CONFIG_MAX_UBOOT_SIZE_HEX,$(shell printf '0x%X' $(CONFIG_MAX_UBOOT_SIZE)))
175 $(if $(filter $(CONFIG_SKIP_LOWLEVEL_INIT),1), \
176 $(call define_add,CONFIG_SKIP_LOWLEVEL_INIT,1) \
178 $(if $(filter $(CONFIG_SKIP_LOWLEVEL_INIT),1), \
179 $(call undef_add,COMPRESSED_UBOOT) \
183 $(call define_add,SOC_TYPE,$(5)) \
186 $(call define_add,CONFIG_BOARD_CUSTOM_STRING,"$(call board_name,$(1))")
187 $(call define_add,CONFIG_DEFAULT_FLASH_SIZE_IN_MB,$(call flash_size,$(2)))
192 # ===============================================================
194 # First, check if configuration was done
195 ifneq (include/config.mk, $(wildcard include/config.mk))
196 all install u-boot u-boot.srec depend dep:
197 $(error "System was not configured!")
199 # Load ARCH, BOARD, and CPU configuration
200 include include/config.mk
201 export ARCH CPU BOARD VENDOR SOC
203 # Load other configuration
204 include $(TOPDIR)/config.mk
206 # ===============================================================
207 # U-Boot objects....order is important (i.e. start must be first)
208 OBJS = cpu/$(CPU)/start.o
210 LIBS = lib_generic/libgeneric.a
211 LIBS += common/libcommon.a
213 LIBS += lib_$(ARCH)/lib$(ARCH).a
214 LIBS += drivers/libdrivers.a
217 LIBS += httpd/libhttpd.a
220 LIBS_SHARED = board/$(BOARDDIR)/lib$(BOARD).a
222 LIBS_SHARED += cpu/$(CPU)/$(SOC)/lib$(SOC).a
224 LIBS_SHARED += cpu/$(CPU)/lib$(CPU).a
226 ifdef COMPRESSED_UBOOT
227 OBJS_BOOTSTRAP = cpu/$(CPU)/start_bootstrap.o
228 LIBS_BOOTSTRAP = lib_bootstrap/libbootstrap.a
229 PHONY_LIBS = $(LIBS_BOOTSTRAP) $(LIBS_SHARED)
231 PHONY_LIBS = $(LIBS) $(LIBS_SHARED)
233 .PHONY: $(PHONY_LIBS)
236 PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
238 # The "tools" are needed early, so put this first
239 # Don't include stuff already done in $(LIBS)
244 # ===============================================================
246 ALL = u-boot.srec u-boot.bin System.map
248 ifdef COMPRESSED_UBOOT
249 all: $(ALL) tuboot.bin
251 all: $(ALL) u-boot.img
255 $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
258 $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
261 $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
263 u-boot.img: u-boot.bin
265 $(call echo_green,Preparing regular U-Boot image $@...)
266 $(MKIMAGE) -A $(ARCH) -T firmware -C none -a $(TEXT_BASE) \
267 -e 0 -n '$(call ih_name)' -d $< $@
270 $(OBJDUMP) -d $< > $@
272 u-boot: depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LIBS_SHARED) $(LDSCRIPT)
273 UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) $(LIBS_SHARED) | \
274 sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p' | \
276 $(LD) $(LDFLAGS) $$UNDEF_SYM $(OBJS) \
277 --start-group $(LIBS) $(LIBS_SHARED) \
278 --end-group $(PLATFORM_LIBS) \
279 -Map u-boot.map -o u-boot
282 $(MAKE) -C `dirname $@`
285 $(MAKE) -C `dirname $@`
290 # For LZMA compressed image
291 ifdef COMPRESSED_UBOOT
292 tuboot.bin: System.map bootstrap.bin u-boot.lzimg
293 @cat bootstrap.bin > $@
294 @cat u-boot.lzimg >> $@
296 u-boot.lzimg: $(obj)u-boot.bin System.map
298 @rm -rf u-boot.bin.lzma
299 @$(call echo_green,Compressing U-Boot image $<...)
300 @$(LZMA) --best --keep $(obj)u-boot.bin
301 $(call echo_green,Preparing LZMA compressed U-Boot image $@...)
302 $(MKIMAGE) -A $(ARCH) -T firmware -C lzma \
303 -a 0x$(shell grep "T _start" $(TOPDIR)/System.map | \
304 awk '{ printf "%s", $$1 }') \
305 -e 0x$(shell grep "T _start" $(TOPDIR)/System.map | \
306 awk '{ printf "%s", $$1 }') \
307 -n '$(call ih_name)' -d $(obj)u-boot.bin.lzma $@
309 bootstrap.bin: bootstrap
310 $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
312 bootstrap: depend version $(SUBDIRS) $(OBJS_BOOTSTRAP) $(LIBS_BOOTSTRAP) $(LIBS_SHARED) $(LDSCRIPT_BOOTSTRAP)
313 UNDEF_SYM=`$(OBJDUMP) -x $(LIBS_BOOTSTRAP) | \
314 sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p' | \
316 $(LD) $(LDFLAGS_BOOTSTRAP) $$UNDEF_SYM $(OBJS_BOOTSTRAP) \
317 --start-group $(LIBS_BOOTSTRAP) $(LIBS_SHARED) \
318 --end-group $(PLATFORM_LIBS) \
319 -Map bootstrap.map -o bootstrap
322 $(MAKE) -C `dirname $@`
323 endif # ifdef COMPRESSED_UBOOT
326 @echo -n "#define U_BOOT_VERSION \"U-Boot $(U_BOOT_VERSION)\"" > $(VERSION_FILE)
329 @for dir in $(SUBDIRS); do $(MAKE) -C $$dir .depend; done
333 grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
335 endif # include/config.mk
337 # =====================
338 # COMMON/SHARED TARGETS
339 # =====================
342 @$(call echo_green,Removing configuration...)
343 @rm -f include/config.h include/config.mk board/*/config.tmp
347 @$(call include_add,soc/soc_list.h)
348 @$(call define_add,CONFIG_MAX_BUTTON_PRESSING,10)
349 @$(call define_add,CONFIG_DELAY_TO_AUTORUN_HTTPD,3)
350 @$(call define_add,CONFIG_DELAY_TO_AUTORUN_CONSOLE,5)
351 @$(call define_add,CONFIG_DELAY_TO_AUTORUN_NETCONSOLE,7)
353 ar933x_common: unconfig config_common
354 @$(call define_add,CFG_AG7240_NMACS,2)
355 @$(call define_add,CFG_ATHRS26_PHY,1)
356 @$(call define_add,CONFIG_MACH_HORNET,1)
358 ar934x_common: unconfig config_common
359 @$(call define_add,CONFIG_WASP,1)
360 @$(call define_add,CONFIG_WASP_SUPPORT,1)
362 qca953x_common: unconfig config_common
363 @$(call define_add,CONFIG_ATHEROS,1)
364 @$(call define_add,CONFIG_MACH_QCA953x,1)
366 # =============================
367 # TARGETS IN ALPHABETICAL ORDER
368 # =============================
370 8devices_carambola2: ar933x_common
371 @$(call config_init,8devices Carambola 2,16,11,1,QCA_AR933X_SOC)
372 @$(call define_add,CONFIG_FOR_8DEVICES_CARAMBOLA2,1)
373 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
375 d-link_dir-505: ar933x_common
376 @$(call config_init,D-Link DIR-505,8,11,1,QCA_AR933X_SOC)
377 @$(call define_add,CONFIG_FOR_DLINK_DIR505_A1,1)
378 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
380 dragino_v2_ms14: ar933x_common
381 @$(call config_init,Dragino v2 (MS14),16,11,1,QCA_AR933X_SOC)
382 @$(call define_add,CONFIG_FOR_DRAGINO_V2,1)
383 @$(call define_add,WEBFAILSAFE_DISABLE_ART_UPGRADE,1)
384 @$(call define_add,WEBFAILSAFE_DISABLE_UBOOT_UPGRADE,1)
385 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
387 gainstrong_oolite_v1_dev: ar933x_common
388 @$(call config_init,Gainstrong Oolite v1 (dev board),16,11,,QCA_AR933X_SOC)
389 @$(call define_add,CONFIG_FOR_GS_OOLITE_V1_DEV,1)
390 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
392 gl-innovations_gl-inet-6416: ar933x_common
393 @$(call config_init,GL-Innovations GL.iNet 6416,8,11,,QCA_AR933X_SOC)
394 @$(call define_add,CONFIG_FOR_GL_INET,1)
395 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
397 tp-link_tl-mr10u: ar933x_common
398 @$(call config_init,TP-Link TL-MR10U,4,11,,QCA_AR933X_SOC)
399 @$(call define_add,CONFIG_FOR_TPLINK_MR10U_V1,1)
400 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
402 tp-link_tl-mr13u: ar933x_common
403 @$(call config_init,TP-Link TL-MR13U,4,11,,QCA_AR933X_SOC)
404 @$(call define_add,CONFIG_FOR_TPLINK_MR13U_V1,1)
405 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
407 tp-link_tl-mr3020: ar933x_common
408 @$(call config_init,TP-Link TL-MR3020,4,11,,QCA_AR933X_SOC)
409 @$(call define_add,CONFIG_FOR_TPLINK_MR3020_V1,1)
410 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
412 tp-link_tl-mr3040: ar933x_common
413 @$(call config_init,TP-Link TL-MR3040,4,11,,QCA_AR933X_SOC)
414 @$(call define_add,CONFIG_FOR_TPLINK_MR3040_V1V2,1)
415 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
417 tp-link_tl-mr3220_v2: ar933x_common
418 @$(call config_init,TP-Link TL-MR3220 v2,4,11,,QCA_AR933X_SOC)
419 @$(call define_add,CONFIG_FOR_TPLINK_MR3220_V2,1)
420 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
422 tp-link_tl-mr3420_v2: ar934x_common
423 @$(call config_init,TP-Link TL-MR3420 v2,4,17,1,QCA_AR9341_SOC)
424 @$(call define_add,CONFIG_FOR_TPLINK_MR3420_V2,1)
425 @$(call define_add,CFG_ATHRS27_PHY,1)
426 @$(call define_add,CFG_AG7240_NMACS,2)
427 @$(MKCONFIG) -a db12x mips mips db12x ar7240 ar7240
429 tp-link_tl-wa830re_v2_tl-wa801nd_v2: ar934x_common
430 @$(call config_init,TP-Link TL-WA830RE/TL-WA801ND v2,4,17,1,QCA_AR9341_SOC)
431 @$(call define_add,CONFIG_FOR_TPLINK_WA830RE_V2_WA801ND_V2,1)
432 @$(call define_add,CFG_ATHRS27_PHY,1)
433 @$(call define_add,CFG_AG7240_NMACS,2)
434 @$(MKCONFIG) -a db12x mips mips db12x ar7240 ar7240
436 tp-link_tl-wdr3500: ar934x_common
437 @$(call config_init,TP-Link TL-WDR3500,8,16,1,QCA_AR9344_SOC)
438 @$(call define_add,CONFIG_FOR_TPLINK_WDR3500_V1,1)
439 @$(call define_add,CFG_ATHRS27_PHY,1)
440 @$(call define_add,CFG_AG7240_NMACS,2)
441 @$(call define_add,CONFIG_PCI,1)
442 @$(MKCONFIG) -a db12x mips mips db12x ar7240 ar7240
444 tp-link_tl-wdr3600_tl-43x0: ar934x_common
445 @$(call config_init,TP-Link TL-WDR3600/43x0,8,16,1,QCA_AR9344_SOC)
446 @$(call define_add,CONFIG_FOR_TPLINK_WDR3600_WDR43X0_V1,1)
447 @$(call define_add,CFG_ATHRS17_PHY,1)
448 @$(call define_add,CFG_AG7240_NMACS,1)
449 @$(call define_add,CONFIG_PCI,1)
450 @$(call define_add,CFG_DUAL_PHY_SUPPORT,1)
451 @$(MKCONFIG) -a db12x mips mips db12x ar7240 ar7240
453 tp-link_tl-wr703n: ar933x_common
454 @$(call config_init,TP-Link TL-WR703N,4,11,,QCA_AR933X_SOC)
455 @$(call define_add,CONFIG_FOR_TPLINK_WR703N_V1,1)
456 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
458 tp-link_tl-wr710n: ar933x_common
459 @$(call config_init,TP-Link TL-WR710N,8,11,,QCA_AR933X_SOC)
460 @$(call define_add,CONFIG_FOR_TPLINK_WR710N_V1,1)
461 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
463 tp-link_tl-wr720n_v3_CN: ar933x_common
464 @$(call config_init,TP-Link TL-WR720N v3 CN,4,11,,QCA_AR933X_SOC)
465 @$(call define_add,CONFIG_FOR_TPLINK_WR720N_V3,1)
466 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
468 tp-link_tl-wr740n_v4: ar933x_common
469 @$(call config_init,TP-Link TL-WR74xN/D v4,4,11,,QCA_AR933X_SOC)
470 @$(call define_add,CONFIG_FOR_TPLINK_WR740N_V4,1)
471 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
473 tp-link_tl-wr802n: qca953x_common
474 @$(call config_init,TP-Link TL-WR802N,4,12,1,QCA_QCA953X_SOC)
475 @$(call define_add,CONFIG_FOR_TPLINK_WR802N,1)
476 @$(call define_add,CFG_ATHRS27_PHY,1)
477 @$(call define_add,CFG_ATH_GMAC_NMACS,2)
478 @$(MKCONFIG) -a ap143 mips mips ap143 ar7240 ar7240
480 tp-link_tl-wr820n_CN: qca953x_common
481 @$(call config_init,TP-Link TL-WR820N CN,4,12,1,QCA_QCA953X_SOC)
482 @$(call define_add,CONFIG_FOR_TPLINK_WR820N_CN,1)
483 @$(call define_add,CFG_ATHRS27_PHY,1)
484 @$(call define_add,CFG_ATH_GMAC_NMACS,2)
485 @$(MKCONFIG) -a ap143 mips mips ap143 ar7240 ar7240
487 tp-link_tl-wr841n_v8: ar934x_common
488 @$(call config_init,TP-Link TL-WR841N/D v8,4,17,1,QCA_AR9341_SOC)
489 @$(call define_add,CONFIG_FOR_TPLINK_WR841N_V8,1)
490 @$(call define_add,CFG_ATHRS27_PHY,1)
491 @$(call define_add,CFG_AG7240_NMACS,2)
492 @$(MKCONFIG) -a db12x mips mips db12x ar7240 ar7240
494 tp-link_tl-wr841n_v9: qca953x_common
495 @$(call config_init,TP-Link TL-WR841N/D v9,4,12,1,QCA_QCA953X_SOC)
496 @$(call define_add,CONFIG_FOR_TPLINK_WR841N_V9,1)
497 @$(call define_add,CFG_ATHRS27_PHY,1)
498 @$(call define_add,CFG_ATH_GMAC_NMACS,2)
499 @$(MKCONFIG) -a ap143 mips mips ap143 ar7240 ar7240
501 unwireddevices_unwired-one: ar933x_common
502 @$(call config_init,Black Swift aka Unwired One,16,11,1,QCA_AR933X_SOC)
503 @$(call define_add,CONFIG_FOR_BLACK_SWIFT_BOARD,1)
504 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
506 village-telco_mesh-potato_v2: ar933x_common
507 @$(call config_init,Village Telco Mesh Potato 2,16,11,1,QCA_AR933X_SOC)
508 @$(call define_add,CONFIG_FOR_MESH_POTATO_V2,1)
509 @$(call define_add,WEBFAILSAFE_DISABLE_ART_UPGRADE,1)
510 @$(call define_add,WEBFAILSAFE_DISABLE_UBOOT_UPGRADE,1)
511 @$(MKCONFIG) -a ap121 mips mips ap121 ar7240 ar7240
513 wallys_dr531: qca953x_common
514 @$(call config_init,Wallys DR531,8,17,1,QCA_QCA953X_SOC)
515 @$(call define_add,CONFIG_FOR_WALLYS_DR531,1)
516 @$(call define_add,CFG_ATHRS27_PHY,1)
517 @$(call define_add,CFG_ATH_GMAC_NMACS,2)
518 @$(call define_add,CONFIG_PCI,1)
519 @$(MKCONFIG) -a ap143 mips mips ap143 ar7240 ar7240
521 zbtlink_zbt-we1526: qca953x_common
522 @$(call config_init,Zbtlink ZBT-WE1526,16,17,1,QCA_QCA953X_SOC)
523 @$(call define_add,CONFIG_FOR_ZBTLINK_ZBT_WE1526,1)
524 @$(call define_add,CFG_ATHRS27_PHY,1)
525 @$(call define_add,CFG_ATH_GMAC_NMACS,2)
526 @$(MKCONFIG) -a ap143 mips mips ap143 ar7240 ar7240
533 @$(call echo_green,Making $@...)
535 \( -name 'core' -o -name '*.bak' -o -name '*~' \
536 -o -name '*.o' -o -name '*.a' -o -name .depend \) -print \
538 @rm -f tools/mkimage tools/envcrc
539 @rm -f lib_bootstrap/*.o
540 @rm -f lib_bootstrap/*.a
541 @rm -f bootstrap bootstrap.bin tuboot.bin u-boot.lzimg u-boot.bin.lzma bootstrap.map
544 @$(call echo_green,Making $@...)
545 @find . -type f \( -name .depend \
546 -o -name '*.srec' -o -name '*.bin' -o -name u-boot.img \) \
549 @rm -f $(OBJS) *.bak include/version_autogenerated.h
551 @rm -f u-boot u-boot.map u-boot.hex $(ALL)
552 @rm -f tools/crc32.c tools/environment.c
553 @rm -f include/asm/proc include/asm/arch include/asm
555 distclean: clobber unconfig