source: src/router/Makefile.armbe @ 18321

Last change on this file since 18321 was 18321, checked in by BrainSlayer, 17 months ago

latest makefile

  • Property svn:executable set to *
File size: 12.7 KB
Line 
1#
2# Broadcom Linux Router Makefile
3#
4# Copyright 2001-2003, Broadcom Corporation
5# All Rights Reserved.
6#
7# THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
8# KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
9# SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
10# FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
11#
12# $Id: Makefile,v 1.2 2005/09/26 11:06:58 seg Exp $
13#
14
15include .config
16ifneq ($(wildcard ../cy_conf.mak),)
17  include ../cy_conf.mak
18endif
19
20#
21# Paths
22#
23OPENSER_MODULES := sl tm rr maxfwd usrloc registrar dbtext textops exec auth auth_db nathelper
24OPENSER_MODULE_FILES := $(foreach module,$(OPENSER_MODULES),openser/modules/$(module)/$(module).so)
25OPENSSL_NO_CIPHERS:= no-idea no-md2 no-mdc2 no-rc5 no-sha0 no-rmd160 no-aes192
26OPENSSL_OPTIONS:= shared no-ec no-err no-fips no-hw no-krb5 no-threads zlib-dynamic
27
28# Source bases
29
30export PLATFORM LINUXDIR LIBDIR USRLIBDIR
31export TOP := $(shell pwd)
32export SRCBASE := $(shell (cd $(TOP)/.. && pwd -P))
33
34
35# Set the HAL directory if you have the HAL sources
36
37# Set the Atheros Rate Control directory if you have the proprietary rate control
38export ATH_RATE=ath_rate/sample
39
40#
41# Cross-compile environment variables
42#
43
44# Build platform
45export BUILD := i386-pc-linux-gnu
46export HOSTCC := gcc
47
48# uClibc wrapper
49export ARCH:=$(PLATFORM)
50ifeq ($(CONFIG_UCLIBC),y)
51export PLATFORM := $(PLATFORM)-uclibc
52endif
53
54#export LINUXDIR := $(SRCBASE)/linux/linux.v24
55ifeq ($(ARCH),mips)
56export LINUXDIR := $(SRCBASE)/linux/brcm63xx/linux-2.6.17
57endif
58#ifeq ($(ARCH),armeb)
59#export LINUXDIR := $(SRCBASE)/linux/xscale/linux-2.6.23
60#endif
61ifeq ($(ARCH),mipsel)
62export LINUXDIR := $(SRCBASE)/kernel/rb500/linux-2.6.17-rc5
63endif
64ifeq ($(ARCH),i386)
65export LINUXDIR := $(SRCBASE)/kernel/wrap/linux-2.6.16.7
66endif
67
68export KERNELRELEASE = $(shell cat $(LINUXDIR)/include/config/kernel.release 2> /dev/null)
69
70#export KERNELRELEASE = $(shell cat $(LINUXDIR)/.kernelrelease 2> /dev/null)
71
72#ifeq ($(PLATFORM),mipsel)
73#export CROSS_COMPILE := mipsel-linux-
74#export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
75#export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/../mipsel-linux && pwd -P)
76#endif
77
78#ifeq ($(PLATFORM),mipsel-uclibc)
79export CROSS_COMPILE := $(ARCH)-linux-uclibc-
80export CONFIGURE := ./configure $(ARCH)-linux --build=$(BUILD)
81export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/.. && pwd -P)
82#endif
83
84#ifeq ($(CONFIG_BCMWPA2),y)
85#export CFLAGS += -DBCMWPA2
86#endif
87
88export BASEOPT:=-Os
89#export ARCH:= mipsel
90
91ifeq ($(ARCH),mipsel)
92export COPTS:=$(BASEOPT) -pipe -mips32 -mtune=mips32 -funit-at-a-time
93endif
94ifeq ($(ARCH),armeb)
95export COPTS:=$(BASEOPT) -pipe -mtune=xscale -march=armv5te -Wa,-mcpu=xscale -mno-thumb-interwork -mno-thumb -fno-caller-saves
96endif
97ifeq ($(ARCH),mips)
98export COPTS:=$(BASEOPT) -pipe -mips32 -mtune=mips32 -funit-at-a-time
99endif
100ifeq ($(ARCH),i386)
101export COPTS:=$(BASEOPT) -pipe -march=i486 -funit-at-a-time
102endif
103export CC := ccache $(CROSS_COMPILE)gcc
104export CXX := ccache $(CROSS_COMPILE)g++
105export AR := $(CROSS_COMPILE)ar
106export AS := $(CROSS_COMPILE)as
107export LD := $(CROSS_COMPILE)ld
108export NM := $(CROSS_COMPILE)nm
109export RANLIB := $(CROSS_COMPILE)ranlib
110export STRIP := $(CROSS_COMPILE)strip
111export SIZE := $(CROSS_COMPILE)size
112
113export CFLAGS := $(COPTS)
114
115#
116# Install and target directories
117#
118
119export PLATFORMDIR := $(TOP)/$(PLATFORM)
120export INSTALLDIR := $(PLATFORMDIR)/install
121export TARGETDIR := $(PLATFORMDIR)/target
122
123ifeq ($(PLATFORM),mipsel)
124obj-y += libcrypto
125endif
126#
127# Configuration
128#
129CONFIG_IPTABLES=y
130
131include rules/configs.mk
132
133obj-clean := $(foreach obj,$(obj-y) $(obj-n),$(obj)-clean)
134obj-install := $(foreach obj,$(obj-y),$(obj)-install)
135obj-distclean := $(foreach obj,$(obj-y) $(obj-n),$(obj)-distclean)
136
137all: build_date clean_target $(obj-y) $(LINUXDIR)/.config kernel
138
139build_date:
140        echo "#define BUILD_DATE \"$(shell date +%D)\"" > ../../opt/build.h
141
142
143kernel:
144        # Also build kernel
145ifeq ($(CONFIG_IXP435),y)
146        cp $(LINUXDIR)/.config_ixp435 $(LINUXDIR)/.config
147else
148ifeq ($(CONFIG_USB),y)
149        cp $(LINUXDIR)/.config_xscale_usb $(LINUXDIR)/.config
150else
151        cp $(LINUXDIR)/.config_xscale $(LINUXDIR)/.config
152endif
153endif
154ifeq ($(CONFIG_WRT300NV2),y)
155        cp $(LINUXDIR)/.config_wrt300n $(LINUXDIR)/.config
156endif
157ifeq ($(CONFIG_CAMBRIA),y)
158        cp $(LINUXDIR)/.config_cambria $(LINUXDIR)/.config
159endif
160ifeq ($(CONFIG_NOP8670),y)
161        cp $(LINUXDIR)/.config_senao $(LINUXDIR)/.config
162endif
163ifeq ($(CONFIG_COMPEX),y)
164        cp $(LINUXDIR)/.config_compex $(LINUXDIR)/.config
165endif
166ifeq ($(CONFIG_TONZE),y)
167        cp $(LINUXDIR)/.config_tonze $(LINUXDIR)/.config
168endif
169ifeq ($(CONFIG_MI424WR),y)
170        cp $(LINUXDIR)/.config_mi424wr $(LINUXDIR)/.config
171endif
172ifeq ($(CONFIG_WG302),y)
173        cp $(LINUXDIR)/.config_wg302v2 $(LINUXDIR)/.config
174endif
175ifeq ($(CONFIG_WG302V1),y)
176        cp $(LINUXDIR)/.config_wg302v1 $(LINUXDIR)/.config
177endif
178ifeq ($(CONFIG_WP18),y)
179        cp $(LINUXDIR)/.config_xscale_wp18 $(LINUXDIR)/.config
180endif
181ifeq ($(CONFIG_USR8200),y)
182        cp $(LINUXDIR)/.config_usr8200 $(LINUXDIR)/.config
183endif
184        $(MAKE) -C $(LINUXDIR) oldconfig ARCH=arm       
185
186        if ! grep -q "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config ; then \
187            $(MAKE) -j 4 -C $(LINUXDIR) vmlinux zImage ARCH=arm CROSS_COMPILE="ccache $(ARCH)-linux-uclibc-" ; \
188        fi
189        if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \
190            $(MAKE) -j 4 -C $(LINUXDIR) modules  ARCH=arm CROSS_COMPILE="ccache $(ARCH)-linux-uclibc-" ; \
191        fi
192
193       
194realclean: $(obj-clean)
195        rm -f .config.old .config.cmd
196        #umount $(TARGETDIR)
197        rm -rf $(INSTALLDIR)
198        rm -rf $(TARGETDIR)
199        rm -f $(TARGETDIR)/*
200        -rm -f $(ARCH)-uclibc/*
201
202       
203clean: rc-clean httpd-clean services-clean shared-clean libutils-clean nvram-clean madwifi-clean madwifi_mimo-clean busybox-clean dnsmasq-clean iptables-clean pppd-clean
204        rm -f .config.old .config.cmd
205        #umount $(TARGETDIR)
206        rm -rf $(INSTALLDIR)
207        rm -rf $(TARGETDIR)
208        rm -f $(TARGETDIR)/*
209        -rm -f $(ARCH)-uclibc/*
210
211clean_target:
212        rm -rf $(TARGETDIR)
213        rm -rf $(INSTALLDIR)
214
215distclean mrproper: $(obj-distclean) clean_target
216        rm -rf $(INSTALLDIR)
217        $(MAKE) -C $(LINUXDIR) distclean
218        $(MAKE) -C $(LINUXDIR)/arch/mips/bcm947xx/compressed clean
219        #rm -f $(PLATFORMDIR)/zImage $(PLATFORMDIR)/linux.bin
220        $(MAKE) -C config clean
221        rm -f .config $(LINUXDIR)/.config
222        rm -f .config.old .config.cmd
223
224optimize-lib:
225        make -f Makefile.armbe lib.$(ARCH)-install
226        cp lib.$(ARCH)/pics/* $(TARGETDIR)/lib
227        cp lib.$(ARCH)/libgcc_s.so.1 $(TARGETDIR)/lib
228
229        relink-lib.sh \
230                "$(ARCH)-linux-" \
231                "lib.$(ARCH)/libc_so.a" \
232                "lib.$(ARCH)/libc_so.a" \
233                "$(ARCH)-uclibc/target/lib/libc.so.0" \
234                -Wl,-init,__uClibc_init -Wl,-soname=libc.so.0 \
235                lib.$(ARCH)/libgcc_s.so.*
236
237        relink-lib.sh \
238                "$(ARCH)-linux-" \
239                "$(wildcard lib.$(ARCH)/libcrypt-*.so)" \
240                "lib.$(ARCH)/libcrypt_pic.a" \
241                "$(ARCH)-uclibc/target/lib/libcrypt.so.0" \
242                lib.$(ARCH)/libgcc_s.so.* \
243                -Wl,-soname=libcrypt.so.0
244
245        relink-lib.sh \
246                "$(ARCH)-linux-" \
247                "$(wildcard lib.$(ARCH)/libm-*.so)" \
248                "lib.$(ARCH)/libm_pic.a" \
249                "$(ARCH)-uclibc/target/lib/libm.so.0" \
250                lib.$(ARCH)/libgcc_s.so.* \
251                -Wl,-soname=libm.so.0
252
253        relink-lib.sh \
254                "$(ARCH)-linux-" \
255                "$(wildcard lib.$(ARCH)/libpthread-*.so)" \
256                "lib.$(ARCH)/libpthread_so.a" \
257                "$(ARCH)-uclibc/target/lib/libpthread.so.0" \
258                -Wl,-z,nodelete,-z,initfirst,-init=__pthread_initialize_minimal_internal \
259                lib.$(ARCH)/libgcc_s.so.* \
260                -Wl,-soname=libpthread.so.0
261
262
263ifneq ($(CONFIG_NOOPT),y)
264        rm -rf $(ARCH)-uclibc/mklibs-out
265        rm -f $(ARCH)-uclibc/mklibs-progs
266        find $(TARGETDIR) -type f -perm +100 -exec \
267                file -r -N -F '' {} + | \
268                awk ' /executable.*dynamically/ { print $$1 }' > $(ARCH)-uclibc/mklibs-progs
269
270        find $(TARGETDIR) -type f -name \*.so\* -exec \
271                file -r -N -F '' {} + | \
272                awk ' /shared object/ { print $$1 }' >> $(ARCH)-uclibc/mklibs-progs
273
274        mkdir -p $(ARCH)-uclibc/mklibs-out
275        mklibs.py -D \
276                -d $(ARCH)-uclibc/mklibs-out \
277                --sysroot $(TARGETDIR) \
278                -L /lib \
279                -L /usr/lib \
280                --ldlib /lib/ld-uClibc.so.0 \
281                --target $(ARCH)-linux-uclibc \
282                `cat $(ARCH)-uclibc/mklibs-progs` 2>&1
283        cp $(ARCH)-uclibc/mklibs-out/* $(TARGETDIR)/lib
284endif
285        rm -f $(TARGETDIR)/lib/*.a
286        rm -f $(TARGETDIR)/lib/*.map
287#       cp lib.$(ARCH)/libresolv.so.0 $(TARGETDIR)/lib
288#       cp lib.$(ARCH)/libgcc_s.so.1 $(TARGETDIR)/lib
289
290
291install package: clean_target $(filter-out lib.$(ARCH)-install,$(obj-install)) $(LINUXDIR)/.config
292        # Install binaries into target directory
293        install -d $(TARGETDIR)
294        for dir in $(wildcard $(patsubst %,$(INSTALLDIR)/%,$(obj-y))) ; do \
295            (cd $${dir} && tar cpf - .) | (cd $(TARGETDIR) && tar xpf -) \
296        done
297        mkdir -p $(ARCH)-uclibc/target/etc/config
298        mkdir -p $(ARCH)-uclibc/target/etc/kaid
299        mkdir -p $(ARCH)-uclibc/target/etc/langpack
300        cp ./opt/bin/ipkg $(ARCH)-uclibc/target/bin
301        cd  $(ARCH)-uclibc/target/lib
302        cp ./opt/etc/preinit $(ARCH)-uclibc/target/etc
303        cp ./opt/etc/postinit $(ARCH)-uclibc/target/etc
304        cp ./opt/etc/ipkg.conf $(ARCH)-uclibc/target/etc
305        cp ./opt/etc/config/* $(ARCH)-uclibc/target/etc/config
306        cp ./opt/usr/lib/smb.conf $(ARCH)-uclibc/target/usr/lib
307        ln -sf ../tmp/smbshare $(ARCH)-uclibc/target/www/smb
308        # optimize the crypto library by removing unneeded symbols
309        # Install (and possibly optimize) C library
310        $(MAKE) -f Makefile.armbe lib.$(ARCH)-install
311        # optimize the others library by removing unneeded symbols
312        $(MAKE) -f Makefile.armbe optimize-lib
313        # Install modules into filesystem
314        if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \
315            $(MAKE) -C $(LINUXDIR) modules_install DEPMOD=/bin/true INSTALL_MOD_PATH=$(TARGETDIR) ; \
316        fi
317ifeq ($(CONFIG_MADWIFI),y)
318        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/drivers/net/wl
319endif
320ifeq ($(CONFIG_WP18),y)
321        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/fs
322        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/drivers/scsi
323        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/drivers/usb
324        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/drivers/net/e1000
325        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/drivers/char
326        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/net/ipv6
327        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/net/sunrpc
328endif
329ifeq ($(CONFIG_WAVESAT),y)
330        make -f Makefile.armbe wavesat-install
331endif
332        cp lib.$(ARCH)/libgcc_s.so.1 $(TARGETDIR)/lib
333        find $(TARGETDIR) -name "wl_*.o"  | xargs rm -rf
334ifneq ($(CONFIG_SAMBA),y)
335        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/fs/cifs
336endif
337        rm -f $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/build
338        rm -f $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/source
339        # Prepare filesystem
340        # Make sure mksquashfs-2.0 is used
341        cd $(TARGETDIR)  &&  find . -iname "CVS" | xargs rm -rf
342        cd $(TARGETDIR)  &&  find . -iname ".svn" | xargs rm -rf
343        ./busybox/examples/depmod.pl -F $(LINUXDIR)/System.map -b $(ARCH)-uclibc/target/lib/modules
344#       tar --directory=$(TARGETDIR) --remove-files -cvvjf $(TARGETDIR)/etc/local.tar.bz2 usr/local
345        rm -rf $(TARGETDIR)/usr/local
346        mkdir $(TARGETDIR)/usr/local
347ifeq ($(CONFIG_KAID),y)
348        cp kaid/kaid $(TARGETDIR)/usr/sbin
349endif
350        mv $(TARGETDIR)/usr/lib/services.so $(TARGETDIR)/lib
351        ./strip_libs.sh $(ARCH)
352        cd $(TARGETDIR) && $(TOP)/misc/rootprep.sh
353        $(LINUXDIR)/scripts/squashfs/mksquashfs-lzma $(ARCH)-uclibc/target $(ARCH)-uclibc/root.fs -noappend -be
354        mkfs.jffs2 --pad --big-endian --squash -e 0x20000 -o $(ARCH)-uclibc/dd-wrt.jffs2 -d $(ARCH)-uclibc/target
355        echo -ne '\xde\xad\xc0\xde' >> $(ARCH)-uclibc/dd-wrt.jffs2
356#       wrv-bin lzma-loader/wrv/zLoader $(LINUXDIR)/arch/arm/boot/zImage $(ARCH)-uclibc/root.fs $(ARCH)-uclibc/dd-wrt.bin
357#       wrv-bin lzma-loader/wrv/zLoader $(LINUXDIR)/arch/arm/boot/zImage $(ARCH)-uclibc/dd-wrt.jffs2 $(ARCH)-uclibc/dd-wrt-jffs.bin
358        dd if=$(LINUXDIR)/arch/arm/boot/zImage of=$(ARCH)-uclibc/gateworx-firmware.raw1 bs=131072 conv=sync
359        dd if=$(LINUXDIR)/arch/arm/boot/zImage of=$(ARCH)-uclibc/gateworx-firmware.raw2 bs=131072 conv=sync
360        cat $(ARCH)-uclibc/dd-wrt.jffs2>>$(ARCH)-uclibc/gateworx-firmware.raw1
361        cat $(ARCH)-uclibc/root.fs>>$(ARCH)-uclibc/gateworx-firmware.raw2
362        ./tools/trx_n -m 30000000 -o $(ARCH)-uclibc/gateworks-firmware-jffs.bin $(ARCH)-uclibc/gateworx-firmware.raw1
363        ./tools/trx_n -m 30000000 -o $(ARCH)-uclibc/gateworks-firmware-squashfs.bin $(ARCH)-uclibc/gateworx-firmware.raw2
364        ./tools/mkcramfs -i armeb-uclibc/gateworx-firmware.raw2 -n WG302 dummy armeb-uclibc/wg302.rmt
365        cp $(ARCH)-uclibc/root.fs tools/wrt300n
366        cp $(LINUXDIR)/arch/arm/boot/zImage tools/wrt300n
367        cd tools/wrt300n && ./linuxbb
368        ./tools/mkmylofw -B WP188 armeb-uclibc/firmware.compex -p0x40000:0x790000:ar:0x00800000 -b0x40000:0x790000::armeb-uclibc/gateworx-firmware.raw2
369        ./tools/mkmylofw -B WP18 armeb-uclibc/firmware_wp18.compex -p0x40000:0x790000:ar:0x00800000 -b0x40000:0x790000::armeb-uclibc/gateworx-firmware.raw2
370
371
372
373include rules/all.mk
374
375.PHONY: all clean distclean mrproper install package
376.PHONY: conf mconf oldconf kconf kmconf config menuconfig oldconfig
377.PHONY: dummy fixkc libnet libpcap
378
379
380
Note: See TracBrowser for help on using the repository browser.