electric-fence: changed Makefile to Akaros style
[akaros.git] / tools / apps / busybox / Makefile
1 # Makefile for busybox.
2 # Barret Rhoden
3 #
4 # make [all] will do a full install with the default config.
5 #
6 # make x86_64|riscv will set the cross compiler in the .config.  You can also
7 # pass CROSS_COMPILE.  The top-level Makefile should be able to call this, but
8 # it is not necessary to do so.
9 #
10 # Uppercase variables are 'global', in the sense that we may have them exported
11 # from parent makefiles or overridden by a Makelocal.
12 #
13 # You can also maintain your own config and override BUSYBOX_CONFIG.  Anything
14 # named local-config-* will be ignored by git.
15 #
16 # If you are porting new versions of busybox, you'll have to download the
17 # upstream patches manually.  It wasn't worth the effort to automate that.
18 #
19 # As new patches are added, you should just need to make.  Busybox is small
20 # enough that I just trash the old one and rebuild whenever there is a change.
21 # If there is a new CC, you may need to make clean.
22 #
23 # TODO:
24 #       - make target for building a clone of -akaros for fast diffing and such
25 #       - make busybox target from the top-level Makefile
26 #       - port to the latest busybox version
27
28 include ../../Makefrag
29
30 busybox-version := 1.17.3
31
32 install-prefix ?= $(FIRST_KFS_PATH)
33 BUSYBOX_CONFIG ?= defconfig-$(busybox-version)
34
35 PHONY := all
36 all: busybox-install
37
38 akaros-patches := $(sort $(wildcard akaros-patches/$(busybox-version)/*))
39 upstream-patches := $(sort $(wildcard upstream-patches/$(busybox-version)/*))
40
41 %.tar.bz2:
42         $(Q)wget http://www.busybox.net/downloads/$@
43
44 busybox-$(busybox-version)-akaros: busybox-$(busybox-version).tar.bz2 \
45                                    $(akaros-patches) $(upstream-patches) \
46                                    $(BUSYBOX_CONFIG)
47         @echo "Extracting and patching Busybox $(busybox-version)"
48         $(Q)rm -rf $@
49         $(Q)tar -jxf $<
50         $(Q)mv busybox-$(busybox-version) $@
51         $(Q)cp $(BUSYBOX_CONFIG) $@/.config
52         $(Q)cd $@; \
53         for i in $(upstream-patches); do \
54                 patch -p1 < ../$$i; \
55         done; \
56         for i in $(akaros-patches); do \
57                 patch -p1 < ../$$i; \
58         done
59
60 PHONY += busybox-config
61 busybox-config: busybox-$(busybox-version)-akaros
62         $(Q)sed -i '/CONFIG_PREFIX/ c CONFIG_PREFIX="$(install-prefix)"' $</.config
63         $(Q)sed -i '/CROSS_COMPILER_PREFIX/ c CONFIG_CROSS_COMPILER_PREFIX="$(CROSS_COMPILE)"' $</.config
64
65 PHONY += busybox-make
66 busybox-make: busybox-config
67         @echo "Making busybox"
68         $(Q)cd busybox-$(busybox-version)-akaros && $(MAKE)
69
70 PHONY += busybox-install
71 busybox-install: busybox-make
72         $(Q)cd busybox-$(busybox-version)-akaros && $(MAKE) install
73         $(Q)cp busybox-$(busybox-version)-akaros/busybox_unstripped \
74            $(install-prefix)/bin/busybox
75         
76 PHONY += clean
77 clean:
78         $(Q)rm -rf busybox-$(busybox-version)-akaros
79
80 PHONY += mrproper
81 mrproper: clean
82         $(Q)rm -rf busybox-$(busybox-version) 
83
84 Makefile: ; # avoid implicit rule on Makefile
85
86 # Declare the contents of the .PHONY variable as phony.  We keep that
87 # information in a variable so we can use it in if_changed and friends.
88 .PHONY: $(PHONY)