1 # Makefile for the OpenWrt Image Builder
3 # Copyright (C) 2006-2007 OpenWrt.org
5 # This is free software, licensed under the GNU General Public License v2.
6 # See /LICENSE for more information.
9 export TOPDIR
=${CURDIR}
16 SHELL
:=/usr
/bin
/env bash
19 ifeq ($(KBUILD_VERBOSE
),99)
20 MAKE
:=3>/dev
/null
$(MAKE
)
22 export IS_TTY
=$(shell tty
-s
&& echo
1 || echo
0)
24 # override variables from rules.mk
25 PACKAGE_DIR
:=$(TOPDIR
)/packages
27 IPKG_TMP
="$(TOPDIR)/tmp/ipkgtmp" \
28 IPKG_INSTROOT
="$(TARGET_DIR)" \
29 IPKG_CONF_DIR
="$(TOPDIR)/tmp" \
30 IPKG_OFFLINE_ROOT
="$(TARGET_DIR)" \
31 $(SCRIPT_DIR
)/ipkg
-force-defaults
34 define Profile
/Default
42 $(eval
$(call Profile
/Default
))
43 $(eval
$(call Profile
/$(1)))
49 $(ID
)_PACKAGES
:=$(PACKAGES
)
52 echo
'$(ID):'; [ -z
'$(NAME)' ] || echo
' $(NAME)'; echo
' Packages: $(PACKAGES)';
62 info: Show a list of available target profiles
63 clean: Remove images and temporary build files
64 image
: Build an image
(see below for more information
).
67 By default
'make image' will create an image with the default
68 target profile and package set. You can use the following parameters
71 make image PROFILE
="<profilename>" # override the default target profile
72 make image PACKAGES
="<pkg1> [<pkg2> [<pkg3> ...]]" # include extra packages
73 make image FILES
="<path>" # include extra files from <path>
76 $(eval
$(call shexport
,Helptext
))
79 echo
"$$$(call shvar,Helptext)"
82 echo
'Current Target: "$(BOARDNAME)"'
83 echo
'Available Profiles:'
86 $(TOPDIR
)/tmp
/ipkg.conf
: FORCE
87 @mkdir
-p
$(TOPDIR
)/tmp
88 @echo
'dest root /' > $@
89 @echo
'src packages file:$(TOPDIR)/packages' >> $@
91 BUILD_PACKAGES
:=$(sort $(DEFAULT_PACKAGES
) $(PACKAGES
) $($(PROFILE
)_PACKAGES
) kernel
)
92 BUILD_PACKAGES
:=$(patsubst base-files
,base-files-
$(BOARD
)-$(KERNEL
),$(BUILD_PACKAGES
))
93 # "-pkgname" in the package list means remove "pkgname" from the package list
94 BUILD_PACKAGES
:=$(filter-out $(filter -%,$(BUILD_PACKAGES
)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES
))),$(BUILD_PACKAGES
))
97 if
[ -z
"$($(PROFILE)_NAME)" ]; then \
98 echo Profile
$(PROFILE
) not found.
; \
99 echo
'Use "make info" to get a list of available target profiles'; \
102 echo
'Building images for $(BOARDNAME) - $($(PROFILE)_NAME)'
103 echo
'Packages: $(BUILD_PACKAGES)'
106 mkdir
-p
$(TARGET_DIR
) $(BIN_DIR
) $(TMP_DIR
)
107 $(MAKE
) package_index
108 $(MAKE
) package_install
112 $(MAKE
) package_postinst
115 package_index
: $(TOPDIR
)/tmp
/ipkg.conf FORCE
117 @echo Building package index...
118 (cd
$(PACKAGE_DIR
); $(SCRIPT_DIR
)/ipkg-make-index.sh .
> Packages
) >/dev
/null
2>/dev
/null
121 package_install
: FORCE
123 @echo Installing packages...
124 $(IPKG
) install $(BUILD_PACKAGES
)
128 @echo Copying extra files
129 $(CP
) $(FILES
)/* $(TARGET_DIR
)/
131 package_postinst
: FORCE
133 @echo Activating init scripts
135 cd
$(BUILD_DIR
)/root
; \
136 for script in .
/etc
/init.d
/*; do \
137 grep
'#!/bin/sh /etc/rc.common' $$script >/dev
/null || continue
; \
138 IPKG_INSTROOT
=$(BUILD_DIR
)/root
$(which bash
) .
/etc
/rc.common
$$script enable
; \
144 @echo Building images...
145 $(NO_TRACE_MAKE
) -C target
/linux
/$(BOARD
)-$(KERNEL
)/image
install IB
=1
148 rm -rf tmp
$(TARGET_DIR
) $(BIN_DIR
)
151 .SILENT
: help
info image