1 # Makefile for a simple busybox/uClibc root filesystem
3 # Copyright (C) 2001-2004 Erik Andersen <andersen@codepoet.org>
4 # Copyright (C) 2002 by Tim Riker <Tim@Rikers.org>
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU Library General Public License as
8 # published by the Free Software Foundation; either version 2 of the
9 # License, or (at your option) any later version.
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # Library General Public License for more details.
16 # You should have received a copy of the GNU Library General Public
17 # License along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22 #############################################################
24 # EDIT this stuff to suit your system and preferences
26 # Use := when possible to get precomputation, thereby
27 # speeding up the build process.
29 #############################################################
34 USE_UCLIBC_SNAPSHOT
:=$(SNAPSHOT
)
35 USE_UCLIBC_LDSO_0_9_24
:=false
36 USE_BUSYBOX_SNAPSHOT
:=$(SNAPSHOT
)
37 USE_NETFILTER_SNAPSHOT
:=$(SNAPSHOT
)
38 USE_BRIDGE_VERSION
:=0.9.7
39 BUILD_WITH_LARGEFILE
:=true
41 OPTIMIZE_FOR_CPU
=$(ARCH
)
43 PUB_DIR
:=/var
/www
/html
/testsite
/ipkg
45 # Command used to download source code
46 WGET
:=wget
--passive-ftp
48 # Soft floating point options.
50 # Currently builds with gcc 3.3 for arm, mips, mipsel, powerpc.
51 # (i386 support will be added back in at some point.)
52 # Only tested with multilib enabled.
53 # For i386, long double is the same as double (64 bits). While this
54 # is unusual for x86, it seemed the best approach considering the
55 # limitations in the gcc floating point emulation library.
56 # For arm, soft float uses the usual libfloat routines.
57 # Custom specs files are used to set the default gcc mode to soft float
58 # as a convenience, since you shouldn't link hard and soft float
59 # together. In fact, arm won't even let you.
60 # (Un)comment the appropriate line below.
64 TARGET_OPTIMIZATION
=-Os
-mips2
67 # Currently the unwind stuff seems to work for staticly linked apps but
68 # not dynamic. So use setjmp/longjmp exceptions by default.
69 # GCC_USE_SJLJ_EXCEPTIONS:=--enable-sjlj-exceptions
70 GCC_USE_SJLJ_EXCEPTIONS
:=
72 # Any additional gcc options you may want to include....
73 EXTRA_GCC_CONFIG_OPTIONS
:=
75 # Enable the following if you want locale/gettext/i18n support.
76 # NOTE! Currently the pregnerated locale stuff only works for x86!
80 # If you want multilib enabled, enable this...
81 MULTILIB
:=--enable-multilib
83 # Build/install c++ compiler and libstdc++?
84 #INSTALL_LIBSTDCPP:=true
85 INSTALL_LIBSTDCPP
:=false
87 # Build/install java compiler and libgcj? (requires c++)
88 # WARNING!!! DOES NOT BUILD FOR TARGET WITHOUT INTERVENTION!!! mjn3
92 # For SMP machines some stuff can be run in parallel
95 #############################################################
97 # The list of stuff to build for the target filesystem
99 #############################################################
100 TARGETS
:=host-sed gcc3_3 openwrt-base openwrt-code.bin
102 PACKAGES
:=oidentd iproute2 sched-modules wshaper
104 #############################################################
106 # You should probably leave this stuff alone unless you know
107 # what you are doing.
109 #############################################################
111 ifeq ($(SOFT_FLOAT
),true
)
112 SOFT_FLOAT_CONFIG_OPTION
:=--without-float
113 TARGET_SOFT_FLOAT
:=-msoft-float
114 ARCH_FPU_SUFFIX
:=_nofpu
116 SOFT_FLOAT_CONFIG_OPTION
:=
121 ifeq ($(INSTALL_LIBGCJ
),true
)
122 INSTALL_LIBSTDCPP
:=true
125 # WARNING -- uClibc currently disables large file support on cris.
126 ifeq ("$(strip $(ARCH))","cris")
127 BUILD_WITH_LARGEFILE
:=false
130 ifneq ($(BUILD_WITH_LARGEFILE
),true
)
131 DISABLE_LARGEFILE
= --disable-largefile
133 TARGET_CFLAGS
=$(TARGET_OPTIMIZATION
) $(TARGET_DEBUGGING
)
136 BASE_DIR
:=${shell pwd
}
137 SOURCE_DIR
:=$(BASE_DIR
)/sources
138 DL_DIR
:=$(SOURCE_DIR
)/dl
139 PATCH_DIR
=$(SOURCE_DIR
)/patches
140 BUILD_DIR
:=$(BASE_DIR
)/build_
$(ARCH
)$(ARCH_FPU_SUFFIX
)
141 TARGET_DIR
:=$(BUILD_DIR
)/root
142 STAGING_DIR
=$(BUILD_DIR
)/staging_dir
143 TOOL_BUILD_DIR
=$(BASE_DIR
)/toolchain_build_
$(ARCH
)$(ARCH_FPU_SUFFIX
)
144 TARGET_PATH
=$(STAGING_DIR
)/bin
:/bin
:/sbin
:/usr
/bin
:/usr
/sbin
145 IMAGE
:=$(BASE_DIR
)/root_fs_
$(ARCH
)$(ARCH_FPU_SUFFIX
)
146 REAL_GNU_TARGET_NAME
=$(OPTIMIZE_FOR_CPU
)-linux-uclibc
147 GNU_TARGET_NAME
=$(OPTIMIZE_FOR_CPU
)-linux
148 KERNEL_CROSS
=$(STAGING_DIR
)/bin
/$(OPTIMIZE_FOR_CPU
)-linux-uclibc-
149 TARGET_CROSS
=$(STAGING_DIR
)/bin
/$(OPTIMIZE_FOR_CPU
)-linux-uclibc-
150 TARGET_CC
=$(TARGET_CROSS
)gcc
151 STRIP
=$(TARGET_CROSS
)strip --remove-section
=.comment
--remove-section
=.note
154 HOST_ARCH
:=$(shell $(HOSTCC
) -dumpmachine | sed
-e s
'/-.*//' \
155 -e
's/sparc.*/sparc/' \
157 -e
's/m68k.*/m68k/' \
158 -e
's/ppc/powerpc/g' \
159 -e
's/v850.*/v850/g' \
161 -e
's/mips-.*/mips/' \
162 -e
's/mipsel-.*/mipsel/' \
163 -e
's/cris.*/cris/' \
164 -e
's/i[3-9]86/i386/' \
166 GNU_HOST_NAME
:=$(HOST_ARCH
)-pc-linux-gnu
167 TARGET_CONFIGURE_OPTS
=PATH
=$(TARGET_PATH
) \
168 AR
=$(TARGET_CROSS
)ar \
169 AS
=$(TARGET_CROSS
)as \
170 LD
=$(TARGET_CROSS
)ld \
171 NM
=$(TARGET_CROSS
)nm \
172 CC
=$(TARGET_CROSS
)gcc \
173 GCC
=$(TARGET_CROSS
)gcc \
174 CXX
=$(TARGET_CROSS
)g
++ \
175 RANLIB
=$(TARGET_CROSS
)ranlib
177 ifeq ($(ENABLE_LOCALE
),true
)
180 DISABLE_NLS
:=--disable-nls
186 TARGETS_CLEAN
:=$(patsubst %,%-clean,$(TARGETS
))
187 TARGETS_SOURCE
:=$(patsubst %,%-source
,$(TARGETS
))
188 TARGETS_DIRCLEAN
:=$(patsubst %,%-dirclean
,$(TARGETS
))
191 PACKAGES_IPK
:=$(patsubst %,%-ipk
,$(PACKAGES
))
194 $(BUILD_DIR
)/Packages
: $(PACKAGES_IPK
)
195 (cd
$(BUILD_DIR
) ; ipkg-make-index .
> Packages
)
197 world
: $(DL_DIR
) $(BUILD_DIR
) $(STAGING_DIR
) $(TARGET_DIR
) $(TARGETS
) $(PACKAGES_IPK
) $(BUILD_DIR
)/Packages
200 .PHONY
: all world
clean dirclean
distclean source
$(TARGETS
) \
201 $(TARGETS_CLEAN
) $(TARGETS_DIRCLEAN
) $(TARGETS_SOURCE
)
205 #############################################################
207 # staging and target directories do NOT list these as
208 # dependancies anywhere else
210 #############################################################
218 rm -rf
$(STAGING_DIR
)
219 mkdir
-p
$(STAGING_DIR
)/lib
220 mkdir
-p
$(STAGING_DIR
)/usr
221 ln
-fs
$(REAL_GNU_TARGET_NAME
)/include $(STAGING_DIR
)/include
222 ln
-fs ..
/lib
$(STAGING_DIR
)/usr
/lib
223 ln
-fs ..
/$(REAL_GNU_TARGET_NAME
)/include $(STAGING_DIR
)/usr
/include
226 $(TARGET_DIR
): $(DL_DIR
)/$(OPENWRT_ROOT_SKEL
)
228 #zcat $(SOURCE_DIR)/skel.tar.gz | tar -C $(BUILD_DIR) -xf -
229 zcat
$(DL_DIR
)/$(OPENWRT_ROOT_SKEL
) |
tar -C
$(BUILD_DIR
) -xf
-
230 #cp -a $(SOURCE_DIR)/target_skeleton/* $(TARGET_DIR)/
231 -find
$(TARGET_DIR
) -type d
-name CVS
-exec
rm -rf
{} \
; > /dev
/null
2>&1
233 source
: $(TARGETS_SOURCE
)
235 #############################################################
237 # Cleanup and misc junk
239 #############################################################
241 rm -rf
$(TOOL_BUILD_DIR
) $(BUILD_DIR
) $(IMAGE
) \
242 openwrt-linux.trx openwrt-g-code.bin openwrt-gs-code.bin \
243 openwrt-kmodules.
tar.bz2
245 dirclean
: $(TARGETS_DIRCLEAN
)
246 rm -rf
$(TARGET_DIR
) $(STAGING_DIR
) $(IMAGE
) \
247 openwrt-linux.trx openwrt-g-code.bin openwrt-gs-code.bin \
248 openwrt-kmodules.
tar.bz2
251 rm -rf
$(DL_DIR
) $(BUILD_DIR
) $(LINUX_KERNEL
) $(IMAGE
) \
252 openwrt-linux.trx openwrt-g-code.bin openwrt-gs-code.bin \
253 openwrt-kmodules.
tar.bz2
257 chmod
644 $(BUILD_DIR
)/Packages
258 chmod
644 $(BUILD_DIR
)/Packages.filelist
259 chmod
644 $(BUILD_DIR
)/*.ipk
260 cp
$(BUILD_DIR
)/Packages
$(PUB_DIR
)
261 cp
$(BUILD_DIR
)/Packages.filelist
$(PUB_DIR
)
262 cp
$(BUILD_DIR
)/*.ipk
$(PUB_DIR
)
270 rm -f buildroot.
tar.bz2
; \
271 tar -cvf buildroot.
tar buildroot
; \
272 bzip2
-9 buildroot.
tar; \