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 include $(TOPDIR
)/include/host.mk
18 ifneq ($(OPENWRT_BUILD
),1)
19 override OPENWRT_BUILD
=1
24 include $(INCLUDE_DIR
)/debug.mk
25 include $(INCLUDE_DIR
)/depends.mk
27 include $(INCLUDE_DIR
)/version.mk
33 info: Show a list of available target profiles
34 clean: Remove images and temporary build files
35 image
: Build an image
(see below for more information
).
38 By default
'make image' will create an image with the default
39 target profile and package set. You can use the following parameters
42 make image PROFILE
="<profilename>" # override the default target profile
43 make image PACKAGES
="<pkg1> [<pkg2> [<pkg3> ...]]" # include extra packages
44 make image FILES
="<path>" # include extra files from <path>
45 make image BIN_DIR
="<path>" # alternative output directory for the images
46 make image EXTRA_IMAGE_NAME
="<string>" # Add this to the output image filename (sanitized)
48 $(eval
$(call shexport
,Helptext
))
51 echo
"$$$(call shvar,Helptext)"
54 # override variables from rules.mk
55 PACKAGE_DIR
:=$(TOPDIR
)/packages
56 LISTS_DIR
:=$(subst $(space
),/,$(patsubst %,..
,$(subst /,$(space
),$(TARGET_DIR
))))$(DL_DIR
)
59 IPKG_INSTROOT
="$(TARGET_DIR)" \
60 $(STAGING_DIR_HOST
)/bin
/opkg \
61 -f
$(TOPDIR
)/repositories.conf \
66 --lists-dir
$(LISTS_DIR
) \
67 --offline-root
$(TARGET_DIR
) \
70 --add-arch
$(ARCH_PACKAGES
):200
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
' $($(p)_NAME)'; ) echo
' Packages: $($(p)_PACKAGES)'; \
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
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: "$(BOARD)$(if $(SUBTARGET), ($(BOARDNAME)))"'
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)'
114 mkdir
-p
$(TARGET_DIR
) $(BIN_DIR
) $(TMP_DIR
) $(DL_DIR
)
115 if
[ ! -f
"$(PACKAGE_DIR)/Packages" ] ||
[ ! -f
"$(PACKAGE_DIR)/Packages.gz" ] ||
[ "`find $(PACKAGE_DIR) -cnewer $(PACKAGE_DIR)/Packages.gz`" ]; then \
116 echo
"Package list missing or not up-to-date, generating it.";\
117 $(MAKE
) package_index
; \
119 mkdir
-p
$(TARGET_DIR
)/tmp
; \
120 $(OPKG
) update || true
; \
122 $(MAKE
) package_install
123 ifneq ($(USER_FILES
),)
126 $(MAKE
) package_postinst
131 @echo Building package index...
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 || true
138 package_install
: FORCE
140 @echo Installing packages...
141 $(OPKG
) install $(firstword $(wildcard $(PACKAGE_DIR
)/libc_
*.ipk
$(PACKAGE_DIR
)/base
/libc_
*.ipk
))
142 $(OPKG
) install $(firstword $(wildcard $(PACKAGE_DIR
)/kernel_
*.ipk
$(PACKAGE_DIR
)/base
/kernel_
*.ipk
))
143 $(OPKG
) install $(BUILD_PACKAGES
)
144 rm -f
$(TARGET_DIR
)/usr
/lib
/opkg
/lists
/*
148 @echo Copying extra files
149 @
$(call file_copy
,$(USER_FILES
)/*,$(TARGET_DIR
)/)
151 package_postinst
: FORCE
154 @
rm -f
$(TARGET_DIR
)/tmp
/opkg.lock
156 @echo Activating init scripts
157 @mkdir
-p
$(TARGET_DIR
)/etc
/rc.d
160 for script in .
/usr
/lib
/opkg
/info/*.postinst
; do \
161 IPKG_INSTROOT
=$(TARGET_DIR
) $$(which bash
) $$script; \
164 rm -f
$(TARGET_DIR
)/usr
/lib
/opkg
/info/*.postinst
165 $(if
$(CONFIG_CLEAN_IPKG
),rm -rf
$(TARGET_DIR
)/usr
/lib
/opkg
)
169 @echo Building images...
170 $(NO_TRACE_MAKE
) -C target
/linux
/$(BOARD
)/image
install TARGET_BUILD
=1 IB
=1 EXTRA_IMAGE_NAME
="$(EXTRA_IMAGE_NAME)" \
171 $(if
$(USER_PROFILE
),PROFILE
="$(USER_PROFILE)")
174 rm -rf
$(TMP_DIR
) $(DL_DIR
) $(TARGET_DIR
) $(BIN_DIR
)
178 (unset PROFILE FILES PACKAGES MAKEFLAGS
; $(MAKE
) -s _call_info
)
180 PROFILE_FILTER
= $(filter DEVICE_
$(PROFILE
) $(PROFILE
),$(PROFILE_NAMES
))
184 ifeq ($(PROFILE_FILTER
),)
185 @echo
'Profile "$(PROFILE)" does not exist!'
186 @echo
'Use "make info" to get a list of available profile names.'
190 (unset PROFILE FILES PACKAGES MAKEFLAGS
; \
191 $(MAKE
) _call_image \
192 $(if
$(PROFILE
),USER_PROFILE
="$(PROFILE_FILTER)") \
193 $(if
$(FILES
),USER_FILES
="$(FILES)") \
194 $(if
$(PACKAGES
),USER_PACKAGES
="$(PACKAGES)") \
195 $(if
$(BIN_DIR
),BIN_DIR
="$(BIN_DIR)"))
197 .SILENT
: help
info image