| # Makefile for busybox. |
| # Barret Rhoden |
| # |
| # make [all] will do a full install with the default config. |
| # |
| # make x86_64|riscv will set the cross compiler in the .config. You can also |
| # pass CROSS_COMPILE. The top-level Makefile should be able to call this, but |
| # it is not necessary to do so. |
| # |
| # Uppercase variables are 'global', in the sense that we may have them exported |
| # from parent makefiles or overridden by a Makelocal. |
| # |
| # You can also maintain your own config and override BUSYBOX_CONFIG. Anything |
| # named local-config-* will be ignored by git. |
| # |
| # If you are porting new versions of busybox, you'll have to download the |
| # upstream patches manually. It wasn't worth the effort to automate that. |
| # |
| # As new patches are added, you should just need to make. Busybox is small |
| # enough that I just trash the old one and rebuild whenever there is a change. |
| # If there is a new CC, you may need to make clean. |
| # |
| # TODO: |
| # - make target for building a clone of -akaros for fast diffing and such |
| # - make busybox target from the top-level Makefile |
| # - port to the latest busybox version |
| |
| include ../../Makefrag |
| |
| busybox-version := 1.17.3 |
| |
| install-prefix ?= $(FIRST_KFS_PATH) |
| BUSYBOX_CONFIG ?= defconfig-$(busybox-version) |
| |
| PHONY := all |
| all: busybox-install |
| |
| akaros-patches := $(sort $(wildcard akaros-patches/$(busybox-version)/*)) |
| upstream-patches := $(sort $(wildcard upstream-patches/$(busybox-version)/*)) |
| |
| %.tar.bz2: |
| $(Q)wget http://www.busybox.net/downloads/$@ |
| |
| busybox-$(busybox-version)-akaros: busybox-$(busybox-version).tar.bz2 \ |
| $(akaros-patches) $(upstream-patches) \ |
| $(BUSYBOX_CONFIG) |
| @echo "Extracting and patching Busybox $(busybox-version)" |
| $(Q)rm -rf $@ |
| $(Q)tar -jxf $< |
| $(Q)mv busybox-$(busybox-version) $@ |
| $(Q)cp $(BUSYBOX_CONFIG) $@/.config |
| $(Q)cd $@; \ |
| for i in $(upstream-patches); do \ |
| patch -p1 < ../$$i; \ |
| done; \ |
| for i in $(akaros-patches); do \ |
| patch -p1 < ../$$i; \ |
| done |
| |
| PHONY += busybox-config |
| busybox-config: busybox-$(busybox-version)-akaros |
| $(Q)sed -i '/CONFIG_PREFIX/ c CONFIG_PREFIX="$(install-prefix)"' $</.config |
| $(Q)sed -i '/CROSS_COMPILER_PREFIX/ c CONFIG_CROSS_COMPILER_PREFIX="$(CROSS_COMPILE)"' $</.config |
| |
| PHONY += busybox-make |
| busybox-make: busybox-config |
| @echo "Making busybox" |
| $(Q)cd busybox-$(busybox-version)-akaros && $(MAKE) |
| |
| PHONY += busybox-install |
| busybox-install: busybox-make |
| $(Q)cd busybox-$(busybox-version)-akaros && $(MAKE) install |
| $(Q)cp busybox-$(busybox-version)-akaros/busybox_unstripped \ |
| $(install-prefix)/bin/busybox |
| |
| PHONY += clean |
| clean: |
| $(Q)rm -rf busybox-$(busybox-version)-akaros |
| |
| PHONY += mrproper |
| mrproper: clean |
| $(Q)rm -rf busybox-$(busybox-version) |
| |
| Makefile: ; # avoid implicit rule on Makefile |
| |
| # Declare the contents of the .PHONY variable as phony. We keep that |
| # information in a variable so we can use it in if_changed and friends. |
| .PHONY: $(PHONY) |