source: src/router/Makefile.laguna @ 18322

Last change on this file since 18322 was 18322, checked in by BrainSlayer, 16 months ago

latest makefile

  • Property svn:executable set to *
File size: 11.4 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:=-O2
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
96endif
97ifeq ($(ARCH),arm)
98export COPTS:=$(BASEOPT) -pipe -march=armv6k -mtune=mpcore -mfloat-abi=softfp -mfpu=vfp -fno-caller-saves
99#-D_FILE_OFFSET_BITS=64
100endif
101ifeq ($(ARCH),mips)
102export COPTS:=$(BASEOPT) -pipe -mips32 -mtune=mips32 -funit-at-a-time
103endif
104ifeq ($(ARCH),i386)
105export COPTS:=$(BASEOPT) -pipe -march=i486 -funit-at-a-time
106endif
107
108export CC := ccache $(CROSS_COMPILE)gcc
109export CXX := ccache $(CROSS_COMPILE)g++
110export AR := $(CROSS_COMPILE)ar
111export AS := $(CROSS_COMPILE)as
112export LD := $(CROSS_COMPILE)ld
113export NM := $(CROSS_COMPILE)nm
114export RANLIB := $(CROSS_COMPILE)ranlib
115export STRIP := $(CROSS_COMPILE)strip
116export SIZE := $(CROSS_COMPILE)size
117
118export CFLAGS := $(COPTS)
119
120#
121# Install and target directories
122#
123
124export PLATFORMDIR := $(TOP)/$(PLATFORM)
125export INSTALLDIR := $(PLATFORMDIR)/install
126export TARGETDIR := $(PLATFORMDIR)/target
127
128ifeq ($(PLATFORM),mipsel)
129obj-y += libcrypto
130endif
131#
132# Configuration
133#
134CONFIG_IPTABLES=y
135
136include rules/configs.mk
137
138obj-clean := $(foreach obj,$(obj-y) $(obj-n),$(obj)-clean)
139obj-install := $(foreach obj,$(obj-y),$(obj)-install)
140obj-distclean := $(foreach obj,$(obj-y) $(obj-n),$(obj)-distclean)
141
142all: build_date clean_target $(obj-y) $(LINUXDIR)/.config kernel
143
144build_date:
145        echo "#define BUILD_DATE \"$(shell date +%D)\"" > ../../opt/build.h
146
147
148kernelsource:
149        mkdir -p $(LINUXDIR)
150        wget http://www.de.kernel.org/pub/linux/kernel/v2.6/linux-$(KERNELVERSION).tar.bz2 -O $(LINUXDIR)/../linux-$(KERNELVERSION).tar.bz2
151        cd $(LINUXDIR)/../ && tar -xvjf $(LINUXDIR)/../linux-$(KERNELVERSION).tar.bz2
152        cd $(LINUXDIR)/../ && ./patch $(KERNELVERSION)
153
154kernel:
155        # Also build kernel
156ifeq ($(CONFIG_LAGUNA),y)
157ifeq ($(CONFIG_LAGUNA_NOSMP),y)
158        cp $(LINUXDIR)/.config_laguna_nosmp $(LINUXDIR)/.config
159else
160        cp $(LINUXDIR)/.config_laguna$(DD_LAGUNA_NOSMP) $(LINUXDIR)/.config
161endif
162endif
163ifeq ($(CONFIG_EOP_TUNNEL),y)
164        echo CONFIG_NET_ETHERIP=m >> $(LINUXDIR)/.config
165else
166        echo "# CONFIG_NET_ETHERIP is not set" >> $(LINUXDIR)/.config
167endif
168        $(MAKE) -C $(LINUXDIR) oldconfig       
169
170        if ! grep -q "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config ; then \
171            $(MAKE) -j 4 -C $(LINUXDIR) uImage ; \
172        fi
173        if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \
174            $(MAKE) -j 4 -C $(LINUXDIR) modules ; \
175        fi
176
177       
178realclean: $(obj-clean)
179        rm -f .config.old .config.cmd
180        #umount $(TARGETDIR)
181        rm -rf $(INSTALLDIR)
182        rm -rf $(TARGETDIR)
183        rm -f $(TARGETDIR)/*
184        -rm -f $(ARCH)-uclibc/*
185
186       
187clean: 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
188        rm -f .config.old .config.cmd
189        #umount $(TARGETDIR)
190        rm -rf $(INSTALLDIR)
191        rm -rf $(TARGETDIR)
192        rm -f $(TARGETDIR)/*
193        -rm -f $(ARCH)-uclibc/*
194
195clean_target:
196        rm -rf $(TARGETDIR)
197        rm -rf $(INSTALLDIR)
198
199distclean mrproper: $(obj-distclean) clean_target
200        rm -rf $(INSTALLDIR)
201        $(MAKE) -C $(LINUXDIR) distclean
202        $(MAKE) -C $(LINUXDIR)/arch/mips/bcm947xx/compressed clean
203        #rm -f $(PLATFORMDIR)/zImage $(PLATFORMDIR)/linux.bin
204        $(MAKE) -C config clean
205        rm -f .config $(LINUXDIR)/.config
206        rm -f .config.old .config.cmd
207
208optimize-lib:
209        make -f Makefile.laguna lib.$(ARCH)-install
210        cp lib.$(ARCH)/pics/* $(TARGETDIR)/lib
211        cp lib.$(ARCH)/libgcc_s.so.1 $(TARGETDIR)/lib
212
213
214        relink-lib.sh \
215                "$(ARCH)-linux-" \
216                "lib.$(ARCH)/libc_so.a" \
217                "lib.$(ARCH)/libc_so.a" \
218                "$(ARCH)-uclibc/target/lib/libc.so.0" \
219                -Wl,-init,__uClibc_init -Wl,-soname=libc.so.0 \
220                lib.$(ARCH)/libgcc_s.so.*
221
222        relink-lib.sh \
223                "$(ARCH)-linux-" \
224                "$(wildcard lib.$(ARCH)/libcrypt-*.so)" \
225                "lib.$(ARCH)/libcrypt_pic.a" \
226                "$(ARCH)-uclibc/target/lib/libcrypt.so.0" \
227                lib.$(ARCH)/libgcc_s.so.* \
228                -Wl,-soname=libcrypt.so.0
229
230        relink-lib.sh \
231                "$(ARCH)-linux-" \
232                "$(wildcard lib.$(ARCH)/libm-*.so)" \
233                "lib.$(ARCH)/libm_pic.a" \
234                "$(ARCH)-uclibc/target/lib/libm.so.0" \
235                lib.$(ARCH)/libgcc_s.so.* \
236                -Wl,-soname=libm.so.0
237
238        relink-lib.sh \
239                "$(ARCH)-linux-" \
240                "$(wildcard lib.$(ARCH)/libpthread-*.so)" \
241                "lib.$(ARCH)/libpthread_so.a" \
242                "$(ARCH)-uclibc/target/lib/libpthread.so.0" \
243                -Wl,-z,nodelete,-z,initfirst,-init=__pthread_initialize_minimal_internal \
244                lib.$(ARCH)/libgcc_s.so.* \
245                -Wl,-soname=libpthread.so.0
246
247ifneq ($(CONFIG_NOOPT),y)
248        rm -rf /tmp/mklibs-out
249        rm -f /tmp/mklibs-progs
250        find $(TARGETDIR) -type f -perm +100 -exec \
251                file -r -N -F '' {} + | \
252                awk ' /executable.*dynamically/ { print $$1 }' > /tmp/mklibs-progs
253
254        find $(TARGETDIR) -type f -name \*.so\* -exec \
255                file -r -N -F '' {} + | \
256                awk ' /shared object/ { print $$1 }' >> /tmp/mklibs-progs
257
258        mkdir -p /tmp/mklibs-out
259        mklibs.py -D \
260                -d /tmp/mklibs-out \
261                --sysroot $(TARGETDIR) \
262                -L /lib \
263                -L /usr/lib \
264                --ldlib /lib/ld-uClibc.so.0 \
265                --target $(ARCH)-linux-uclibc \
266                `cat /tmp/mklibs-progs` 2>&1
267        cp /tmp/mklibs-out/* $(TARGETDIR)/lib
268endif
269        rm -f $(TARGETDIR)/lib/*.a
270        rm -f $(TARGETDIR)/lib/*.map
271#       cp lib.$(ARCH)/libresolv.so.0 $(TARGETDIR)/lib
272#       cp lib.$(ARCH)/libgcc_s.so.1 $(TARGETDIR)/lib
273
274
275install package: clean_target $(filter-out lib.$(ARCH)-install,$(obj-install)) $(LINUXDIR)/.config
276        # Install binaries into target directory
277        install -d $(TARGETDIR)
278        for dir in $(wildcard $(patsubst %,$(INSTALLDIR)/%,$(obj-y))) ; do \
279            (cd $${dir} && tar cpf - .) | (cd $(TARGETDIR) && tar xpf -) \
280        done
281        mkdir -p $(ARCH)-uclibc/target/etc/config
282        mkdir -p $(ARCH)-uclibc/target/etc/kaid
283        mkdir -p $(ARCH)-uclibc/target/etc/langpack
284        cp ./opt/bin/ipkg $(ARCH)-uclibc/target/bin
285        cd  $(ARCH)-uclibc/target/lib
286        cp ./opt/etc/preinit $(ARCH)-uclibc/target/etc
287        cp ./opt/etc/postinit $(ARCH)-uclibc/target/etc
288        cp ./opt/etc/ipkg.conf $(ARCH)-uclibc/target/etc
289        cp ./opt/etc/config/* $(ARCH)-uclibc/target/etc/config
290        cp ./opt/usr/lib/smb.conf $(ARCH)-uclibc/target/usr/lib
291        ln -sf ../tmp/smbshare $(ARCH)-uclibc/target/www/smb
292        # optimize the crypto library by removing unneeded symbols
293        # Install (and possibly optimize) C library
294        $(MAKE) -f Makefile.laguna lib.$(ARCH)-install
295        # optimize the others library by removing unneeded symbols
296        $(MAKE) -f Makefile.laguna optimize-lib
297        # Install modules into filesystem
298        if grep -q "CONFIG_MODULES=y" $(LINUXDIR)/.config ; then \
299            $(MAKE) -C $(LINUXDIR) modules_install DEPMOD=/bin/true INSTALL_MOD_PATH=$(TARGETDIR) ; \
300        fi
301ifeq ($(CONFIG_MADWIFI),y)
302        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/drivers/net/wl
303endif
304ifeq ($(CONFIG_WP18),y)
305        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/fs
306        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/drivers/scsi
307        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/drivers/usb
308        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/drivers/net/e1000
309        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/drivers/char
310        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/net/ipv6
311        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/net/sunrpc
312endif
313ifeq ($(CONFIG_WAVESAT),y)
314        make -f Makefile.laguna wavesat-install
315endif
316        cp lib.$(ARCH)/libgcc_s.so.1 $(TARGETDIR)/lib
317        find $(TARGETDIR) -name "wl_*.o"  | xargs rm -rf
318ifneq ($(CONFIG_SAMBA),y)
319        rm -rf $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/kernel/fs/cifs
320endif
321        rm -f $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/build
322        rm -f $(TARGETDIR)/lib/modules/$(KERNELRELEASE)/source
323        # Prepare filesystem
324        # Make sure mksquashfs-2.0 is used
325        cd $(TARGETDIR)  &&  find . -iname "CVS" | xargs rm -rf
326        cd $(TARGETDIR)  &&  find . -iname ".svn" | xargs rm -rf
327        ./busybox/examples/depmod.pl -F $(LINUXDIR)/System.map -b $(ARCH)-uclibc/target/lib/modules
328#       tar --directory=$(TARGETDIR) --remove-files -cvvjf $(TARGETDIR)/etc/local.tar.bz2 usr/local
329        rm -rf $(TARGETDIR)/usr/local
330        mkdir $(TARGETDIR)/usr/local
331ifeq ($(CONFIG_KAID),y)
332        cp kaid/kaid $(TARGETDIR)/usr/sbin
333endif
334        mv $(TARGETDIR)/usr/lib/services.so $(TARGETDIR)/lib
335        ./strip_libs.sh $(ARCH)
336        cd $(TARGETDIR) && $(TOP)/misc/rootprep.sh
337        $(LINUXDIR)/scripts/squashfs/mksquashfs-lzma $(ARCH)-uclibc/target $(ARCH)-uclibc/root.fs -noappend -root-owned -le
338        mkfs.jffs2 --pad --big-endian --squash -e 0x20000 -o $(ARCH)-uclibc/dd-wrt.jffs2 -d $(ARCH)-uclibc/target
339        echo -ne '\xde\xad\xc0\xde' >> $(ARCH)-uclibc/dd-wrt.jffs2
340        dd if=$(LINUXDIR)/arch/arm/boot/uImage of=$(ARCH)-uclibc/laguna-firmware.raw1 bs=131072 conv=sync
341        dd if=$(LINUXDIR)/arch/arm/boot/uImage of=$(ARCH)-uclibc/laguna-firmware.raw2 bs=131072 conv=sync
342        cat $(ARCH)-uclibc/dd-wrt.jffs2>>$(ARCH)-uclibc/laguna-firmware.raw1
343        cat $(ARCH)-uclibc/root.fs>>$(ARCH)-uclibc/laguna-firmware.raw2
344        ./tools/trx_n -m 30000000 -o $(ARCH)-uclibc/laguna-firmware-jffs.bin $(ARCH)-uclibc/laguna-firmware.raw1
345        ./tools/trx_n -m 30000000 -o $(ARCH)-uclibc/laguna-firmware-squashfs.bin $(ARCH)-uclibc/laguna-firmware.raw2
346
347
348
349include rules/all.mk
350
351.PHONY: all clean distclean mrproper install package
352.PHONY: conf mconf oldconf kconf kmconf config menuconfig oldconfig
353.PHONY: dummy fixkc libnet libpcap
354
355
356
Note: See TracBrowser for help on using the repository browser.