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))'; ) \
77 echo ' Packages: $($(p)_PACKAGES)'; echo ' hasImageMetadata: $($(p)_HAS_IMAGE_METADATA)'; \
78 [ "$($(p
)_SUPPORTED_DEVICES
)" ] && echo ' SupportedDevices: $($(p)_SUPPORTED_DEVICES)'; )
80 .profiles.mk: .targetinfo
81 @$(SCRIPT_DIR)/target-metadata.pl profile_mk $< '$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET))' > $@
83 staging_dir/host/.prereq-build: include/prereq-build.mk
85 @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \
86 echo "Prerequisite
check failed. Use FORCE
=1 to
override.
"; \
89 ifneq ($(realpath $(TOPDIR)/include/prepare.mk),)
90 @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prepare.mk prepare 2>/dev/null || { \
91 echo "Preparation failed.
"; \
98 echo 'Current Target: "$(TARGETID
)"'
99 echo 'Current Revision: "$(REVISION
)"'
100 echo 'Default Packages: $(DEFAULT_PACKAGES)'
101 echo 'Available Profiles:'
102 echo; $(PROFILE_LIST)
104 BUILD_PACKAGES:=$(USER_PACKAGES) $(sort $(DEFAULT_PACKAGES) $($(USER_PROFILE)_PACKAGES) kernel)
105 # "-pkgname
" in the package list means remove "pkgname
" from the package list
106 BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES))
109 _call_image: staging_dir/host/.prereq-build
110 echo 'Building images for $(BOARD)$(if $($(USER_PROFILE)_NAME), - $($(USER_PROFILE)_NAME))'
111 echo 'Packages: $(BUILD_PACKAGES)'
113 rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG)
114 mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR)
115 $(MAKE) package_reload
116 $(MAKE) package_install
117 $(MAKE) -s prepare_rootfs
118 $(MAKE) -s build_image
121 _call_manifest: FORCE
123 mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR)
124 $(MAKE) package_reload >/dev/null
125 $(MAKE) package_install >/dev/null
126 $(OPKG) list-installed
130 @echo Building package index... >&2
131 @mkdir -p $(TMP_DIR) $(TARGET_DIR)/tmp
132 (cd $(PACKAGE_DIR); $(SCRIPT_DIR)/ipkg-make-index.sh . > Packages && \
133 gzip -9nc Packages > Packages.gz \
134 ) >/dev/null 2>/dev/null
135 $(OPKG) update >&2 || true
138 if [ ! -f "$(PACKAGE_DIR
)/Packages
" ] || [ ! -f "$(PACKAGE_DIR
)/Packages.gz
" ] || [ "`find $(PACKAGE_DIR) -cnewer $(PACKAGE_DIR)/Packages.gz`" ]; then \
139 echo "Package list missing or not up-to-date
, generating it.
" >&2 ;\
140 $(MAKE) package_index; \
142 mkdir -p $(TARGET_DIR)/tmp; \
143 $(OPKG) update >&2 || true; \
147 @$(MAKE) -s package_reload
148 @$(OPKG) list --size 2>/dev/null
150 package_install: FORCE
152 @echo Installing packages...
153 $(OPKG) install $(firstword $(wildcard $(PACKAGE_DIR)/libc_*.ipk $(PACKAGE_DIR)/base/libc_*.ipk))
154 $(OPKG) install $(firstword $(wildcard $(PACKAGE_DIR)/kernel_*.ipk $(PACKAGE_DIR)/base/kernel_*.ipk))
155 $(OPKG) install $(BUILD_PACKAGES)
157 prepare_rootfs: FORCE
159 @echo Finalizing root filesystem...
161 $(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG)
162 $(call prepare_rootfs,$(TARGET_DIR),$(USER_FILES))
166 @echo Building images...
167 $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME
)" \
168 $(if $(USER_PROFILE),PROFILE="$(USER_PROFILE
)")
172 @echo Calculating checksums...
173 @$(call sha256sums,$(BIN_DIR))
176 rm -rf $(TMP_DIR) $(DL_DIR) $(TARGET_DIR) $(BIN_DIR)
180 (unset PROFILE FILES PACKAGES MAKEFLAGS; $(MAKE) -s _call_info)
182 PROFILE_FILTER = $(filter DEVICE_$(PROFILE) $(PROFILE),$(PROFILE_NAMES))
184 _check_profile: FORCE
186 ifeq ($(PROFILE_FILTER),)
187 @echo 'Profile "$(PROFILE
)" does not exist!'
188 @echo 'Use "make
info" to get a list of available profile names.'
194 $(MAKE) -s _check_profile
195 (unset PROFILE FILES PACKAGES MAKEFLAGS; \
196 $(MAKE) -s _call_image \
197 $(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER
)") \
198 $(if $(FILES),USER_FILES="$(FILES
)") \
199 $(if $(PACKAGES),USER_PACKAGES="$(PACKAGES
)") \
200 $(if $(BIN_DIR),BIN_DIR="$(BIN_DIR
)"))
203 $(MAKE) -s _check_profile
204 (unset PROFILE FILES PACKAGES MAKEFLAGS; \
205 $(MAKE) -s _call_manifest \
206 $(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER
)") \
207 $(if $(PACKAGES),USER_PACKAGES="$(PACKAGES
)"))
209 .SILENT: help info image manifest