3 # Copyright (C) 2007-2015 OpenWrt.org
5 # This is free software, licensed under the GNU General Public License v2.
6 # See /LICENSE for more information.
12 export TOPDIR LC_ALL LANG
13 export OPENWRT_VERBOSE
=s
16 export PATH
:=$(TOPDIR
)/staging_dir
/host
/bin
:$(PATH
)
18 ifneq ($(OPENWRT_BUILD
),1)
19 override OPENWRT_BUILD
=1
24 include $(INCLUDE_DIR
)/debug.mk
25 include $(INCLUDE_DIR
)/depends.mk
26 include $(INCLUDE_DIR
)/rootfs.mk
28 include $(INCLUDE_DIR
)/version.mk
34 info: Show a list of available target profiles
35 clean: Remove images and temporary build files
36 image
: Build an image
(see below for more information
).
39 By default
'make image' will create an image with the default
40 target profile and package set. You can use the following parameters
43 make image PROFILE
="<profilename>" # override the default target profile
44 make image PACKAGES
="<pkg1> [<pkg2> [<pkg3> ...]]" # include extra packages
45 make image FILES
="<path>" # include extra files from <path>
46 make image BIN_DIR
="<path>" # alternative output directory for the images
47 make image EXTRA_IMAGE_NAME
="<string>" # Add this to the output image filename (sanitized)
49 $(eval
$(call shexport
,Helptext
))
52 echo
"$$$(call shvar,Helptext)"
55 # override variables from rules.mk
56 PACKAGE_DIR
:=$(TOPDIR
)/packages
57 LISTS_DIR
:=$(subst $(space
),/,$(patsubst %,..
,$(subst /,$(space
),$(TARGET_DIR
))))$(DL_DIR
)
58 OPKG
:=$(call opkg
,$(TARGET_DIR
)) \
59 -f
$(TOPDIR
)/repositories.conf \
61 --lists-dir
$(LISTS_DIR
)
63 include $(INCLUDE_DIR
)/target.mk
66 USER_PROFILE ?
= $(firstword $(PROFILE_NAMES
))
67 PROFILE_LIST
= $(foreach p
,$(PROFILE_NAMES
), \
68 echo
'$(patsubst DEVICE_%,%,$(p)):'; $(if
$($(p
)_NAME
),echo
' $(subst ','"'"',$($(p)_NAME))'; ) echo ' Packages: $($(p)_PACKAGES)'; \
71 .profiles.mk: .targetinfo
72 @$(SCRIPT_DIR)/target-metadata.pl profile_mk $< '$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET))' > $@
74 staging_dir/host/.prereq-build: include/prereq-build.mk
76 @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \
77 echo "Prerequisite
check failed. Use FORCE
=1 to
override.
"; \
80 ifneq ($(realpath $(TOPDIR)/include/prepare.mk),)
81 @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prepare.mk prepare 2>/dev/null || { \
82 echo "Preparation failed.
"; \
89 echo 'Current Target: "$(BOARD
)$(if
$(SUBTARGET
), ($(BOARDNAME
)))"'
90 echo 'Default Packages: $(DEFAULT_PACKAGES)'
91 echo 'Available Profiles:'
94 BUILD_PACKAGES:=$(USER_PACKAGES) $(sort $(DEFAULT_PACKAGES) $($(USER_PROFILE)_PACKAGES) kernel)
95 # "-pkgname
" in the package list means remove "pkgname
" from the package list
96 BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES))
99 _call_image: staging_dir/host/.prereq-build
100 echo 'Building images for $(BOARD)$(if $($(USER_PROFILE)_NAME), - $($(USER_PROFILE)_NAME))'
101 echo 'Packages: $(BUILD_PACKAGES)'
103 rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG)
104 mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR)
105 $(MAKE) package_reload
106 $(MAKE) package_install
107 $(MAKE) -s prepare_rootfs
108 $(MAKE) -s build_image
113 @echo Building package index... >&2
114 @mkdir -p $(TMP_DIR) $(TARGET_DIR)/tmp
115 (cd $(PACKAGE_DIR); $(SCRIPT_DIR)/ipkg-make-index.sh . > Packages && \
116 gzip -9nc Packages > Packages.gz \
117 ) >/dev/null 2>/dev/null
118 $(OPKG) update >&2 || true
121 if [ ! -f "$(PACKAGE_DIR
)/Packages
" ] || [ ! -f "$(PACKAGE_DIR
)/Packages.gz
" ] || [ "`find $(PACKAGE_DIR) -cnewer $(PACKAGE_DIR)/Packages.gz`" ]; then \
122 echo "Package list missing or not up-to-date
, generating it.
" >&2 ;\
123 $(MAKE) package_index; \
125 mkdir -p $(TARGET_DIR)/tmp; \
126 $(OPKG) update >&2 || true; \
130 @$(MAKE) -s package_reload
131 @$(OPKG) list --size 2>/dev/null
133 package_install: FORCE
135 @echo Installing packages...
136 $(OPKG) install $(firstword $(wildcard $(PACKAGE_DIR)/libc_*.ipk $(PACKAGE_DIR)/base/libc_*.ipk))
137 $(OPKG) install $(firstword $(wildcard $(PACKAGE_DIR)/kernel_*.ipk $(PACKAGE_DIR)/base/kernel_*.ipk))
138 $(OPKG) install $(BUILD_PACKAGES)
140 prepare_rootfs: FORCE
142 @echo Finalizing root filesystem...
144 $(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG)
145 $(call prepare_rootfs,$(TARGET_DIR),$(USER_FILES))
149 @echo Building images...
150 $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME
)" \
151 $(if $(USER_PROFILE),PROFILE="$(USER_PROFILE
)")
155 @echo Calculating checksums...
156 @$(call sha256sums,$(BIN_DIR))
159 rm -rf $(TMP_DIR) $(DL_DIR) $(TARGET_DIR) $(BIN_DIR)
163 (unset PROFILE FILES PACKAGES MAKEFLAGS; $(MAKE) -s _call_info)
165 PROFILE_FILTER = $(filter DEVICE_$(PROFILE) $(PROFILE),$(PROFILE_NAMES))
169 ifeq ($(PROFILE_FILTER),)
170 @echo 'Profile "$(PROFILE
)" does not exist!'
171 @echo 'Use "make
info" to get a list of available profile names.'
175 (unset PROFILE FILES PACKAGES MAKEFLAGS; \
176 $(MAKE) -s _call_image \
177 $(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER
)") \
178 $(if $(FILES),USER_FILES="$(FILES
)") \
179 $(if $(PACKAGES),USER_PACKAGES="$(PACKAGES
)") \
180 $(if $(BIN_DIR),BIN_DIR="$(BIN_DIR
)"))
182 .SILENT: help info image