summaryrefslogtreecommitdiffstats
path: root/target/imagebuilder/files/Makefile
blob: 0d997d62002cf7404c57e2ba91d747f2c051b37e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# Makefile for the OpenWrt Image Builder
#
# Copyright (C) 2006-2007 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

export TOPDIR=${CURDIR}

all: help

include rules.mk
include .config

SHELL:=/usr/bin/env bash
export LC_ALL=C
export LANG=C
ifeq ($(KBUILD_VERBOSE),99)
  MAKE:=3>/dev/null $(MAKE)
endif
export IS_TTY=$(shell tty -s && echo 1 || echo 0)
export IMAGEBUILDER=1

# override variables from rules.mk
PACKAGE_DIR:=$(TOPDIR)/packages
IPKG:= \
  IPKG_TMP="$(TOPDIR)/tmp/ipkgtmp" \
  IPKG_INSTROOT="$(TARGET_DIR)" \
  IPKG_CONF_DIR="$(TOPDIR)/tmp" \
  IPKG_OFFLINE_ROOT="$(TARGET_DIR)" \
  $(SCRIPT_DIR)/ipkg -force-defaults


define Profile/Default
  ID:=
  NAME:=
  KCONFIG:=
  PACKAGES:=
endef

define AddProfile
  $(eval $(call Profile/Default))
  $(eval $(call Profile/$(1)))
  ifneq ($(ID),)
    ifeq ($(PROFILE),)
      PROFILE:=$(ID)
    endif
	$(ID)_NAME:=$(NAME)
	$(ID)_PACKAGES:=$(PACKAGES)
    ifneq ($(KCONFIG),)
      PROFILE_LIST += \
  		echo '$(ID):'; [ -z '$(NAME)' ] || echo '	$(NAME)'; echo '	Packages: $(PACKAGES)';
    endif
  endif
endef

include .target.mk

define Helptext
Available Commands:
	help:	This help text
	info:	Show a list of available target profiles
	clean:	Remove images and temporary build files
	image:	Build an image (see below for more information).

Building images:
	By default 'make image' will create an image with the default
	target profile and package set. You can use the following parameters
	to change that:
	
	make image PROFILE="<profilename>" # override the default target profile
	make image PACKAGES="<pkg1> [<pkg2> [<pkg3> ...]]" # include extra packages
	make image FILES="<path>" # include extra files from <path>

endef
$(eval $(call shexport,Helptext))

help: FORCE
	echo "$$$(call shvar,Helptext)"

info: FORCE
	echo 'Current Target: "$(BOARDNAME)"'
	echo 'Available Profiles:'
	echo; $(PROFILE_LIST)

$(TOPDIR)/tmp/ipkg.conf: FORCE
	@mkdir -p $(TOPDIR)/tmp
	@echo 'dest root /' > $@
	@echo 'src packages file:$(TOPDIR)/packages' >> $@

BUILD_PACKAGES:=$(sort $(DEFAULT_PACKAGES) $(PACKAGES) $($(PROFILE)_PACKAGES) kernel)
BUILD_PACKAGES:=$(patsubst base-files,base-files-$(BOARD)-$(KERNEL),$(BUILD_PACKAGES))
# "-pkgname" in the package list means remove "pkgname" from the package list
BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES))

image:
	if [ -z "$($(PROFILE)_NAME)" ]; then \
		echo Profile $(PROFILE) not found.; \
		echo 'Use "make info" to get a list of available target profiles'; \
		false; \
	fi
	echo 'Building images for $(BOARDNAME) - $($(PROFILE)_NAME)'
	echo 'Packages: $(BUILD_PACKAGES)'
	echo
	rm -rf $(TARGET_DIR)
	mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR)
	$(MAKE) package_index
	$(MAKE) package_install
ifneq ($(FILES),)
	$(MAKE) copy_files
endif
	$(MAKE) package_postinst
	$(MAKE) build_image
	
package_index: $(TOPDIR)/tmp/ipkg.conf FORCE
	@echo
	@echo Building package index...
	(cd $(PACKAGE_DIR); $(SCRIPT_DIR)/ipkg-make-index.sh . > Packages) >/dev/null 2>/dev/null
	$(IPKG) update

package_install: FORCE
	@echo
	@echo Installing packages...
	$(IPKG) install $(BUILD_PACKAGES)

copy_files: FORCE
	@echo
	@echo Copying extra files
	$(CP) $(FILES)/* $(TARGET_DIR)/

package_postinst: FORCE
	@echo
	@echo Activating init scripts
	( \
		cd $(BUILD_DIR)/root; \
		for script in ./etc/init.d/*; do \
			grep '#!/bin/sh /etc/rc.common' $$script >/dev/null || continue; \
			IPKG_INSTROOT=$(BUILD_DIR)/root $(which bash) ./etc/rc.common $$script enable; \
		done; \
	)

build_image: FORCE
	@echo
	@echo Building images...
	$(NO_TRACE_MAKE) -C target/linux/$(BOARD)-$(KERNEL)/image install IB=1
	
clean:
	rm -rf tmp $(TARGET_DIR) $(BIN_DIR)

.PHONY: FORCE
.SILENT: help info image
%: ;