Pineloader/Makefile
Danct12 e281ed5f6b UPX compressed kexec utility
Signed-off-by: Danct12 <danct12@disroot.org>
2020-05-19 23:40:03 +07:00

168 lines
5.7 KiB
Makefile

## Copyright 2020 - Dreemurrs Embedded Labs / DanctNIX
## Copyright 2020 - Martijn Braam
## SPDX-License-Identifier: GPL-2.0-only
CROSS_FLAGS = ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
CROSS_FLAGS_BOOT = CROSS_COMPILE=aarch64-linux-gnu-
all: pine64-pinephone.img.xz pine64-pinetab.img.xz
pine64-pinephone.img: fat-pine64-pinephone.img u-boot-sunxi-with-spl.bin
rm -f $@
truncate --size 50M $@
parted -s $@ mktable msdos
parted -s $@ mkpart primary fat32 2048s 100%
parted -s $@ set 1 boot on
dd if=u-boot-sunxi-with-spl.bin of=$@ bs=8k seek=1
dd if=fat-$@ of=$@ seek=1024 bs=1k
fat-pine64-pinephone.img: initramfs-pine64-pinephone.gz kernel-sunxi.gz pine64-pinephone.scr dtbs/sunxi/sun50i-a64-pinephone-1.0.dtb
@echo "MKFS $@"
@rm -f $@
@truncate --size 40M $@
@mkfs.fat -F32 $@
@mcopy -i $@ kernel-sunxi.gz ::Image.gz
@mcopy -i $@ dtbs/sunxi/sun50i-a64-pinephone-1.0.dtb ::sun50i-a64-pinephone-1.0.dtb
@mcopy -i $@ initramfs-pine64-pinephone.gz ::initramfs.gz
@mcopy -i $@ pine64-pinephone.scr ::boot.scr
pine64-pinetab.img: fat-pine64-pinetab.img u-boot-sunxi-with-spl.bin
rm -f $@
truncate --size 50M $@
parted -s $@ mktable msdos
parted -s $@ mkpart primary fat32 2048s 100%
parted -s $@ set 1 boot on
dd if=u-boot-sunxi-with-spl.bin of=$@ bs=8k seek=1
dd if=fat-$@ of=$@ seek=1024 bs=1k
fat-pine64-pinetab.img: initramfs-pine64-pinetab.gz kernel-sunxi.gz pine64-pinetab.scr dtbs/sunxi/sun50i-a64-pinetab.dtb
@echo "MKFS $@"
@rm -f $@
@truncate --size 40M $@
@mkfs.fat -F32 $@
@mcopy -i $@ kernel-sunxi.gz ::Image.gz
@mcopy -i $@ dtbs/sunxi/sun50i-a64-pinetab.dtb ::sun50i-a64-pinetab.dtb
@mcopy -i $@ initramfs-pine64-pinetab.gz ::initramfs.gz
@mcopy -i $@ pine64-pinetab.scr ::boot.scr
%.img.xz: %.img
@echo "XZ $@"
@xz -c $< > $@
initramfs/bin/busybox: src/busybox src/busybox_config
@echo "MAKE $@"
@mkdir -p build/busybox
@cp src/busybox_config build/busybox/.config
@$(MAKE) -C src/busybox O=../../build/busybox $(CROSS_FLAGS)
@cp build/busybox/busybox initramfs/bin/busybox
initramfs/bin/bash: src/bash
@echo "MAKE $@"
@mkdir -p build/bash
@cd build/bash;\
../../src/bash/configure --host=aarch64-linux-gnu --enable-static-link --without-bash-malloc
@$(MAKE) -C build/bash
@aarch64-linux-gnu-strip build/bash/bash
@upx --best build/bash/bash
@cp build/bash/bash initramfs/bin/bash
initramfs/bin/kexec: src/kexec-tools
@echo "MAKE $@"
@mkdir -p build/kexec-tools
@cd src/kexec-tools;./bootstrap
@cd build/kexec-tools;\
LDFLAGS=-static ../../src/kexec-tools/configure --host=aarch64-linux-gnu
@$(MAKE) -C build/kexec-tools
@aarch64-linux-gnu-strip build/kexec-tools/build/sbin/kexec
@upx --best build/kexec-tools/build/sbin/kexec
@cp build/kexec-tools/build/sbin/kexec initramfs/bin/kexec
initramfs-%.cpio: initramfs/bin/busybox initramfs/bin/bash initramfs/bin/kexec initramfs/init initramfs/init_functions.sh initramfs/pineloader
@echo "CPIO $@"
@rm -rf initramfs-$*
@cp -r initramfs initramfs-$*
@cp src/info-$*.sh initramfs-$*/info.sh
@cp src/info-$*.sh initramfs-$*/info.sh
@cd initramfs-$*; find . | cpio -H newc -o > ../$@
initramfs-%.gz: initramfs-%.cpio
@echo "GZ $@"
@gzip < $< > $@
kernel-sunxi.gz dtbs/sunxi/sun50i-a64-pinephone-1.0.dtb dtbs/sunxi/sun50i-a64-pinetab.dtb &: src/linux_config_sunxi
@echo "MAKE kernel-sunxi.gz"
@mkdir -p build/linux-sunxi
@mkdir -p dtbs/sunxi
@cp src/linux_config_sunxi build/linux-sunxi/.config
@$(MAKE) -C src/linux O=../../build/linux-sunxi $(CROSS_FLAGS) olddefconfig
@$(MAKE) -C src/linux O=../../build/linux-sunxi $(CROSS_FLAGS)
@cp build/linux-sunxi/arch/arm64/boot/Image.gz kernel-sunxi.gz
@cp build/linux-sunxi/arch/arm64/boot/dts/allwinner/*.dtb dtbs/sunxi/
%.scr: src/%.txt
@echo "MKIMG $@"
@mkimage -A arm -O linux -T script -C none -n "U-Boot boot script" -d $< $@
build/atf/sun50i_a64/bl31.bin: src/arm-trusted-firmware
@echo "MAKE $@"
@mkdir -p build/atf/sun50i_a64
@cd src/arm-trusted-firmware; make $(CROSS_FLAGS_BOOT) PLAT=sun50i_a64 bl31
@cp src/arm-trusted-firmware/build/sun50i_a64/release/bl31.bin "$@"
u-boot-sunxi-with-spl.bin: build/atf/sun50i_a64/bl31.bin src/u-boot
@echo "MAKE $@"
@mkdir -p build/u-boot/sun50i_a64
@BL31=../../../build/atf/sun50i_a64/bl31.bin $(MAKE) -C src/u-boot O=../../build/u-boot/sun50i_a64 $(CROSS_FLAGS_BOOT) pinephone_defconfig
@BL31=../../../build/atf/sun50i_a64/bl31.bin $(MAKE) -C src/u-boot O=../../build/u-boot/sun50i_a64 $(CROSS_FLAGS_BOOT) ARCH=arm all
@cp build/u-boot/sun50i_a64/u-boot-sunxi-with-spl.bin "$@"
src/bash:
@echo "WGET bash"
@mkdir src/bash
@wget http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-5.0.tar.gz
@tar -xvf bash-5.0.tar.gz --strip-components 1 -C src/bash
src/kexec-tools:
@echo "WGET kexec-tools"
@mkdir src/kexec-tools
@wget https://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git/snapshot/kexec-tools-2.0.20.tar.gz
@tar -xvf kexec-tools-2.0.20.tar.gz --strip-components 1 -C src/kexec-tools
src/arm-trusted-firmware:
@echo "WGET arm-trusted-firmware"
@mkdir src/arm-trusted-firmware
@wget https://github.com/ARM-software/arm-trusted-firmware/archive/50d8cf26dc57bb453b1a52be646140bfea4aa591.tar.gz
@tar -xvf 50d8cf26dc57bb453b1a52be646140bfea4aa591.tar.gz --strip-components 1 -C src/arm-trusted-firmware
src/u-boot:
@echo "WGET u-boot"
@mkdir src/u-boot
@wget ftp://ftp.denx.de/pub/u-boot/u-boot-2020.04.tar.bz2
@tar -xvf u-boot-2020.04.tar.bz2 --strip-components 1 -C src/u-boot
@cd src/u-boot && patch -p1 < ../u-boot-pinephone.patch
.PHONY: clean cleanfast
cleanfast:
@rm -rvf build
@rm -rvf initramfs-*/
@rm -vf *.img
@rm -vf *.img.xz
@rm -vf *.apk
@rm -vf *.bin
@rm -vf *.cpio
@rm -vf *.gz
@rm -vf *.scr
clean: cleanfast
@rm -vf kernel*.gz
@rm -vf initramfs/bin/busybox
@rm -vf initramfs/bin/bash
@rm -vf initramfs/bin/kexec
@rm -vrf dtbs