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)
50 List
"all" packages which
get installed into the image.
51 You can use the following parameters
:
53 make manifest PROFILE
="<profilename>" # override the default target profile
54 make manifest PACKAGES
="<pkg1> [<pkg2> [<pkg3> ...]]" # include extra packages
57 $(eval
$(call shexport
,Helptext
))
60 echo
"$$$(call shvar,Helptext)"
63 # override variables from rules.mk
64 PACKAGE_DIR
:=$(TOPDIR
)/packages
65 LISTS_DIR
:=$(subst $(space
),/,$(patsubst %,..
,$(subst /,$(space
),$(TARGET_DIR
))))$(DL_DIR
)
66 OPKG
:=$(call opkg
,$(TARGET_DIR
)) \
67 -f
$(TOPDIR
)/repositories.conf \
69 --lists-dir
$(LISTS_DIR
)
71 include $(INCLUDE_DIR
)/target.mk
74 USER_PROFILE ?
= $(firstword $(PROFILE_NAMES
))
75 PROFILE_LIST
= $(foreach p
,$(PROFILE_NAMES
), \
76 echo
'$(patsubst DEVICE_%,%,$(p)):'; $(if
$($(p
)_NAME
),echo
' $(subst ','"'"',$($(p)_NAME))'; ) echo ' Packages: $($(p)_PACKAGES)'; echo ' hasImageMetadata: $($(p)_HAS_IMAGE_METADATA)';\
79 .profiles.mk: .targetinfo
80 @$(SCRIPT_DIR)/target-metadata.pl profile_mk $< '$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET))' > $@
82 staging_dir/host/.prereq-build: include/prereq-build.mk
84 @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \
85 echo "Prerequisite
check failed. Use FORCE
=1 to
override.
"; \
88 ifneq ($(realpath $(TOPDIR)/include/prepare.mk),)
89 @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prepare.mk prepare 2>/dev/null || { \
90 echo "Preparation failed.
"; \
97 echo 'Current Target: "$(TARGETID
)"'
98 echo 'Current Revision: "$(REVISION
)"'
99 echo 'Default Packages: $(DEFAULT_PACKAGES)'
100 echo 'Available Profiles:'
101 echo; $(PROFILE_LIST)
103 BUILD_PACKAGES:=$(USER_PACKAGES) $(sort $(DEFAULT_PACKAGES) $($(USER_PROFILE)_PACKAGES) kernel)
104 # "-pkgname
" in the package list means remove "pkgname
" from the package list
105 BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES))
108 _call_image: staging_dir/host/.prereq-build
109 echo 'Building images for $(BOARD)$(if $($(USER_PROFILE)_NAME), - $($(USER_PROFILE)_NAME))'
110 echo 'Packages: $(BUILD_PACKAGES)'
112 rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG)
113 mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR)
114 $(MAKE) package_reload
115 $(MAKE) package_install
116 $(MAKE) -s prepare_rootfs
117 $(MAKE) -s build_image
120 _call_manifest: FORCE
122 mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR)
123 $(MAKE) package_reload >/dev/null
124 $(MAKE) package_install >/dev/null
125 $(OPKG) list-installed
129 @echo Building package index... >&2
130 @mkdir -p $(TMP_DIR) $(TARGET_DIR)/tmp
131 (cd $(PACKAGE_DIR); $(SCRIPT_DIR)/ipkg-make-index.sh . > Packages && \
132 gzip -9nc Packages > Packages.gz \
133 ) >/dev/null 2>/dev/null
134 $(OPKG) update >&2 || true
137 if [ ! -f "$(PACKAGE_DIR
)/Packages
" ] || [ ! -f "$(PACKAGE_DIR
)/Packages.gz
" ] || [ "`find $(PACKAGE_DIR) -cnewer $(PACKAGE_DIR)/Packages.gz`" ]; then \
138 echo "Package list missing or not up-to-date
, generating it.
" >&2 ;\
139 $(MAKE) package_index; \
141 mkdir -p $(TARGET_DIR)/tmp; \
142 $(OPKG) update >&2 || true; \
146 @$(MAKE) -s package_reload
147 @$(OPKG) list --size 2>/dev/null
149 package_install: FORCE
151 @echo Installing packages...
152 $(OPKG) install $(firstword $(wildcard $(PACKAGE_DIR)/libc_*.ipk $(PACKAGE_DIR)/base/libc_*.ipk))
153 $(OPKG) install $(firstword $(wildcard $(PACKAGE_DIR)/kernel_*.ipk $(PACKAGE_DIR)/base/kernel_*.ipk))
154 $(OPKG) install $(BUILD_PACKAGES)
156 prepare_rootfs: FORCE
158 @echo Finalizing root filesystem...
160 $(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG)
161 $(call prepare_rootfs,$(TARGET_DIR),$(USER_FILES))
165 @echo Building images...
166 $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME
)" \
167 $(if $(USER_PROFILE),PROFILE="$(USER_PROFILE
)")
171 @echo Calculating checksums...
172 @$(call sha256sums,$(BIN_DIR))
175 rm -rf $(TMP_DIR) $(DL_DIR) $(TARGET_DIR) $(BIN_DIR)
179 (unset PROFILE FILES PACKAGES MAKEFLAGS; $(MAKE) -s _call_info)
181 PROFILE_FILTER = $(filter DEVICE_$(PROFILE) $(PROFILE),$(PROFILE_NAMES))
183 _check_profile: FORCE
185 ifeq ($(PROFILE_FILTER),)
186 @echo 'Profile "$(PROFILE
)" does not exist!'
187 @echo 'Use "make
info" to get a list of available profile names.'
193 $(MAKE) -s _check_profile
194 (unset PROFILE FILES PACKAGES MAKEFLAGS; \
195 $(MAKE) -s _call_image \
196 $(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER
)") \
197 $(if $(FILES),USER_FILES="$(FILES
)") \
198 $(if $(PACKAGES),USER_PACKAGES="$(PACKAGES
)") \
199 $(if $(BIN_DIR),BIN_DIR="$(BIN_DIR
)"))
202 $(MAKE) -s _check_profile
203 (unset PROFILE FILES PACKAGES MAKEFLAGS; \
204 $(MAKE) -s _call_manifest \
205 $(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER
)") \
206 $(if $(PACKAGES),USER_PACKAGES="$(PACKAGES
)"))
208 .SILENT: help info image manifest