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)
48 make image DISABLED_SERVICES
="<svc1> [<svc2> [<svc3> ..]]" # Which services in /etc/init.d/ should be disabled
51 List
"all" packages which
get installed into the image.
52 You can use the following parameters
:
54 make manifest PROFILE
="<profilename>" # override the default target profile
55 make manifest PACKAGES
="<pkg1> [<pkg2> [<pkg3> ...]]" # include extra packages
58 $(eval
$(call shexport
,Helptext
))
61 echo
"$$$(call shvar,Helptext)"
64 # override variables from rules.mk
65 PACKAGE_DIR
:=$(TOPDIR
)/packages
66 LISTS_DIR
:=$(subst $(space
),/,$(patsubst %,..
,$(subst /,$(space
),$(TARGET_DIR
))))$(DL_DIR
)
67 OPKG
:=$(call opkg
,$(TARGET_DIR
)) \
68 -f
$(TOPDIR
)/repositories.conf \
70 --lists-dir
$(LISTS_DIR
)
72 include $(INCLUDE_DIR
)/target.mk
75 USER_PROFILE ?
= $(firstword $(PROFILE_NAMES
))
76 PROFILE_LIST
= $(foreach p
,$(PROFILE_NAMES
), \
77 echo
'$(patsubst DEVICE_%,%,$(p)):'; $(if
$($(p
)_NAME
),echo
' $(subst ','"'"',$($(p)_NAME))'; ) \
78 echo ' Packages: $($(p)_PACKAGES)'; echo ' hasImageMetadata: $($(p)_HAS_IMAGE_METADATA)'; \
79 [ "$($(p
)_SUPPORTED_DEVICES
)" ] && echo ' SupportedDevices: $($(p)_SUPPORTED_DEVICES)'; )
81 .profiles.mk: .targetinfo
82 @$(SCRIPT_DIR)/target-metadata.pl profile_mk $< '$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET))' > $@
84 staging_dir/host/.prereq-build: include/prereq-build.mk
86 @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \
87 echo "Prerequisite
check failed. Use FORCE
=1 to
override.
"; \
90 ifneq ($(realpath $(TOPDIR)/include/prepare.mk),)
91 @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prepare.mk prepare 2>/dev/null || { \
92 echo "Preparation failed.
"; \
99 echo 'Current Target: "$(TARGETID
)"'
100 echo 'Current Revision: "$(REVISION
)"'
101 echo 'Default Packages: $(DEFAULT_PACKAGES)'
102 echo 'Available Profiles:'
103 echo; $(PROFILE_LIST)
105 BUILD_PACKAGES:=$(USER_PACKAGES) $(sort $(DEFAULT_PACKAGES) $($(USER_PROFILE)_PACKAGES) kernel)
106 # "-pkgname
" in the package list means remove "pkgname
" from the package list
107 BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES))
110 _call_image: staging_dir/host/.prereq-build
111 echo 'Building images for $(BOARD)$(if $($(USER_PROFILE)_NAME), - $($(USER_PROFILE)_NAME))'
112 echo 'Packages: $(BUILD_PACKAGES)'
114 rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG)
115 mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR)
116 $(MAKE) package_reload
117 $(MAKE) package_install
118 $(MAKE) -s prepare_rootfs
119 $(MAKE) -s build_image
122 _call_manifest: FORCE
124 mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR)
125 $(MAKE) package_reload >/dev/null
126 $(MAKE) package_install >/dev/null
127 $(OPKG) list-installed
131 @echo Building package index... >&2
132 @mkdir -p $(TMP_DIR) $(TARGET_DIR)/tmp
133 (cd $(PACKAGE_DIR); $(SCRIPT_DIR)/ipkg-make-index.sh . > Packages && \
134 gzip -9nc Packages > Packages.gz \
135 ) >/dev/null 2>/dev/null
136 $(OPKG) update >&2 || true
139 if [ ! -f "$(PACKAGE_DIR
)/Packages
" ] || [ ! -f "$(PACKAGE_DIR
)/Packages.gz
" ] || [ "`find $(PACKAGE_DIR) -cnewer $(PACKAGE_DIR)/Packages.gz`" ]; then \
140 echo "Package list missing or not up-to-date
, generating it.
" >&2 ;\
141 $(MAKE) package_index; \
143 mkdir -p $(TARGET_DIR)/tmp; \
144 $(OPKG) update >&2 || true; \
148 @$(MAKE) -s package_reload
149 @$(OPKG) list --size 2>/dev/null
151 package_install: FORCE
153 @echo Installing packages...
154 $(OPKG) install $(firstword $(wildcard $(PACKAGE_DIR)/libc_*.ipk $(PACKAGE_DIR)/base/libc_*.ipk))
155 $(OPKG) install $(firstword $(wildcard $(PACKAGE_DIR)/kernel_*.ipk $(PACKAGE_DIR)/base/kernel_*.ipk))
156 $(OPKG) install $(BUILD_PACKAGES)
158 prepare_rootfs: FORCE
160 @echo Finalizing root filesystem...
162 $(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG)
163 $(call prepare_rootfs,$(TARGET_DIR),$(USER_FILES),$(DISABLED_SERVICES))
167 @echo Building images...
168 $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME
)" \
169 $(if $(USER_PROFILE),PROFILE="$(USER_PROFILE
)")
173 @echo Calculating checksums...
174 @$(call sha256sums,$(BIN_DIR))
177 rm -rf $(TMP_DIR) $(DL_DIR) $(TARGET_DIR) $(BIN_DIR)
181 (unset PROFILE FILES PACKAGES MAKEFLAGS; $(MAKE) -s _call_info)
183 PROFILE_FILTER = $(filter DEVICE_$(PROFILE) $(PROFILE),$(PROFILE_NAMES))
185 _check_profile: FORCE
187 ifeq ($(PROFILE_FILTER),)
188 @echo 'Profile "$(PROFILE
)" does not exist!'
189 @echo 'Use "make
info" to get a list of available profile names.'
195 $(MAKE) -s _check_profile
196 (unset PROFILE FILES PACKAGES MAKEFLAGS; \
197 $(MAKE) -s _call_image \
198 $(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER
)") \
199 $(if $(FILES),USER_FILES="$(FILES
)") \
200 $(if $(PACKAGES),USER_PACKAGES="$(PACKAGES
)") \
201 $(if $(BIN_DIR),BIN_DIR="$(BIN_DIR
)") \
202 $(if $(DISABLED_SERVICES),DISABLED_SERVICES="$(DISABLED_SERVICES
)"))
205 $(MAKE) -s _check_profile
206 (unset PROFILE FILES PACKAGES MAKEFLAGS; \
207 $(MAKE) -s _call_manifest \
208 $(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER
)") \
209 $(if $(PACKAGES),USER_PACKAGES="$(PACKAGES
)"))
211 .SILENT: help info image manifest