1 # Makefile for user-mode-linux with a simple busybox/uClibc root filesystem
3 # Copyright (C) 2001 by Erik Andersen <andersen@codepoet.org>
4 # Copyright (C) 2001 by Alcove, Julien Gaulmin <julien.gaulmin@fr.alcove.com>
5 # Copyright (C) 2001 by Jon Nelson <jnelson@boa.org>
7 # This program is free software; you can redistribute it and/or modify it under
8 # the terms of the GNU Library General Public License as published by the Free
9 # Software Foundation; either version 2 of the License, or (at your option) any
12 # This program is distributed in the hope that it will be useful, but WITHOUT
13 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 # FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
17 # You should have received a copy of the GNU Library General Public License
18 # along with this program; if not, write to the Free Software Foundation, Inc.,
19 # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 # - genext2fs: couldn't allocate a block (no free space)
23 # As genext2fs allocate only one group of blocks, the FS size
26 # Update this stuff by hand :
28 # If you are running a cross compiler, you may want to set this
29 # to something more interesting, like "arm-linux-".
30 #CROSS = $(ARCH)-linux-
32 #IMAGE_SIZE=8192 # Max size
34 IMAGE_SIZE
=550 # library is 550K
37 LINUX_SOURCE
=linux-2.4
.14.
tar.bz2
38 USERMODELINUX_PATCH
=uml-patch-2.4
.14-6.bz2
39 UCLIBC_SOURCE
=uClibc-snapshot.
tar.gz
41 LINUX_URI
=http
://www.kernel.org
/pub
/linux
/kernel
/v2.4
42 USERMODELINUX_URI
=http
://prdownloads.sourceforge.net
/user-mode-linux
43 UCLIBC_URI
=http
://uclibc.org
/downloads
/
45 # Don't alter below this line unless you (think) you know
46 # what you are doing! Danger, Danger!
48 .SUFFIXES
: # Delete the default suffixes
49 .SUFFIXES
: .c .o .h
# Define our suffix list
53 TARGET_DIR
=$(BASE_DIR
)/root
54 STAGING_DIR
=$(BASE_DIR
)/staging_dir
55 SOURCE_DIR
=$(BASE_DIR
)/sources
56 LINUX_DIR
=$(BASE_DIR
)/linux
57 UCLIBC_DIR
=$(BASE_DIR
)/uClibc
58 GENEXT2FS_DIR
=$(BASE_DIR
)/genext2fs
60 TARGET_CC
=$(STAGING_DIR
)/bin
/gcc
61 TARGET_CC1
=$(STAGING_DIR
)/usr
/bin
/$(ARCH
)-uclibc-gcc
62 TARGET_CROSS
=$(STAGING_DIR
)/usr
/bin
/$(ARCH
)-uclibc-
63 TARGET_PATH
=$(STAGING_DIR
)/usr
/bin
:$(STAGING_DIR
)/bin
:/bin
:/sbin
:/usr
/bin
:/usr
/sbin
65 LINUX
=$(BASE_DIR
)/UMlinux
66 IMAGE
=$(BASE_DIR
)/root_fs
68 KCONFIG
=$(SOURCE_DIR
)/linux-uml.config
72 #So what shall we build today?
78 world
: $(TARGETS
) $(GENEXT2FS_DIR
)/genext2fs
$(TARGET_DIR
)
79 $(GENEXT2FS_DIR
)/genext2fs \
80 -b
`echo $(IMAGE_SIZE) | bc` \
81 -i
`echo $(IMAGE_INODES) | bc` \
83 -D
$(SOURCE_DIR
)/device_table.txt root_fs
91 tar -xf
$(SOURCE_DIR
)/skel.
tar
94 $(SOURCE_DIR
)/$(LINUX_SOURCE
):
95 while
[ ! -f
$(SOURCE_DIR
)/$(LINUX_SOURCE
) ] ; do \
96 wget
-P
$(SOURCE_DIR
) --passive
$(LINUX_URI
)/$(LINUX_SOURCE
); \
99 $(LINUX_DIR
)/.unpacked
: $(SOURCE_DIR
)/$(LINUX_SOURCE
)
100 bunzip2
-c
$(SOURCE_DIR
)/$(LINUX_SOURCE
) |
tar -xv
101 touch
$(LINUX_DIR
)/.unpacked
103 $(SOURCE_DIR
)/$(USERMODELINUX_PATCH
):
104 while
[ ! -f
$(SOURCE_DIR
)/$(USERMODELINUX_PATCH
) ] ; do \
105 wget
-P
$(SOURCE_DIR
) --passive
$(USERMODELINUX_URI
)/$(USERMODELINUX_PATCH
); \
108 $(LINUX_DIR
)/.patched
: $(LINUX_DIR
)/.unpacked
$(SOURCE_DIR
)/$(USERMODELINUX_PATCH
)
109 bzcat
$(SOURCE_DIR
)/$(USERMODELINUX_PATCH
) | patch
-d
$(LINUX_DIR
) -p1
110 touch
$(LINUX_DIR
)/.patched
112 $(LINUX_DIR
)/.um
: $(LINUX_DIR
)/.patched
113 sed
-e
's/^ARCH :=.*/ARCH=um/g' < $(LINUX_DIR
)/Makefile
> $(LINUX_DIR
)/Makefile.new
&& mv
-f
$(LINUX_DIR
)/Makefile.new
$(LINUX_DIR
)/Makefile
114 touch
$(LINUX_DIR
)/.um
116 $(LINUX_DIR
)/.configdone
: $(LINUX_DIR
)/.um
117 cp
-f
$(KCONFIG
) $(LINUX_DIR
)/.config
118 make
-C
$(LINUX_DIR
) oldconfig menuconfig
119 touch
$(LINUX_DIR
)/.configdone
121 $(LINUX_DIR
)/.dep
: $(LINUX_DIR
)/.configdone
122 make
-C
$(LINUX_DIR
) dep
123 touch
$(LINUX_DIR
)/.dep
125 $(LINUX_DIR
)/linux
: $(LINUX_DIR
)/.dep
126 (cd
$(LINUX_DIR
); make linux
)
128 $(LINUX
): $(LINUX_DIR
)/linux
129 ln
-sf
$(LINUX_DIR
)/linux
$(LINUX
)
132 $(SOURCE_DIR
)/$(UCLIBC_SOURCE
):
133 while
[ ! -f
$(SOURCE_DIR
)/$(UCLIBC_SOURCE
) ] ; do \
134 wget
-P
$(SOURCE_DIR
) --passive
$(UCLIBC_URI
)/$(UCLIBC_SOURCE
) ; \
137 $(UCLIBC_DIR
)/Config
: $(SOURCE_DIR
)/$(UCLIBC_SOURCE
)
138 tar -xzf
$(SOURCE_DIR
)/$(UCLIBC_SOURCE
)
139 for p in
`find $(SOURCE_DIR) -name uClibc-*.patch | sort -g`;do \
142 awk
'BEGIN { FS=" ="; REG="DODEBUG|DOLFS|INCLUDE_RPC|DOPIC";} \
143 { if ($$0 ~ "^" REG) { print $$1 " = false" } else { print $$0 } }' < \
144 $(UCLIBC_DIR
)/extra
/Configs
/Config.
$(ARCH
) > $(UCLIBC_DIR
)/Config
;
146 $(UCLIBC_DIR
)/lib
/libc.a
: $(LINUX
) $(UCLIBC_DIR
)/Config
147 $(MAKE
) CROSS
=$(CROSS
) \
148 DEVEL_PREFIX
=$(STAGING_DIR
) \
149 SYSTEM_DEVEL_PREFIX
=$(STAGING_DIR
)/usr \
150 SHARED_LIB_LOADER_PATH
=/lib \
151 KERNEL_SOURCE
=$(LINUX_DIR
) \
154 uclibc
: $(UCLIBC_DIR
)/lib
/libc.a
$(STAGING_DIR
) $(TARGET_DIR
)
155 @A
=`cksum $(STAGING_DIR)/lib/libuClibc-0.9.5.so 2>/dev/null | awk '{ print $$1 }'`; \
156 B
=`cksum $(UCLIBC_DIR)/lib/libuClibc-0.9.5.so 2>/dev/null | awk '{ print $$1 }'`; \
157 if
[ "$$A" != "$$B" ] ; then \
160 DEVEL_PREFIX
=$(STAGING_DIR
) \
161 SYSTEM_DEVEL_PREFIX
=$(STAGING_DIR
)/usr \
162 SHARED_LIB_LOADER_PATH
=$(STAGING_DIR
)/lib \
163 -C
$(UCLIBC_DIR
) install; \
165 @A
=`cksum $(TARGET_DIR)/lib/libuClibc-0.9.5.so 2>/dev/null | awk '{ print $$1 }'`; \
166 B
=`cksum $(UCLIBC_DIR)/lib/libuClibc-0.9.5.so 2>/dev/null | awk '{ print $$1 }'`; \
167 if
[ "$$A" != "$$B" ] ; then \
170 PREFIX
=$(TARGET_DIR
) \
172 SYSTEM_DEVEL_PREFIX
=/usr \
173 SHARED_LIB_LOADER_PATH
=/lib \
174 -C
$(UCLIBC_DIR
) install_runtime
; \
178 $(GENEXT2FS_DIR
)/genext2fs
:
179 $(MAKE
) -C
$(GENEXT2FS_DIR
)
182 clean: $(TARGETS_CLEAN
)
183 make
-C
$(GENEXT2FS_DIR
) clean
184 @if
[ -d
$(UCLIBC_DIR
) ] ; then \
185 make
-C
$(UCLIBC_DIR
) clean; \
187 @if
[ -d
$(LINUX_DIR
) ] ; then \
188 make
-C
$(UCLIBC_DIR
) clean; \
190 rm -rf
$(STAGING_DIR
) $(TARGET_DIR
) $(IMAGE
)
193 mrproper
: $(TARGETS_MRPROPER
)
194 rm -rf
$(UCLIBC_DIR
);
196 rm -f root_fs
$(LINUX
)
197 make
-C
$(GENEXT2FS_DIR
) clean
198 rm -rf
$(STAGING_DIR
) $(TARGET_DIR
) $(IMAGE
)
201 distclean: mrproper
$(TARGETS_DISTCLEAN
)
202 rm -f
$(SOURCE_DIR
)/$(UCLIBC_SOURCE
)
203 rm -f
$(SOURCE_DIR
)/$(USERMODELINUX_PATCH
)
204 rm -f
$(SOURCE_DIR
)/$(LINUX_SOURCE
)
206 .PHONY
: uclibc
$(TARGETS
) world
test clean mrproper
distclean