mirror of https://github.com/OpenIPC/firmware.git
129 lines
4.6 KiB
Makefile
129 lines
4.6 KiB
Makefile
BR_VER = 2024.02.10
|
|
BR_MAKE = $(MAKE) -C $(TARGET)/buildroot-$(BR_VER) BR2_EXTERNAL=$(PWD)/general O=$(TARGET)
|
|
BR_LINK = https://github.com/buildroot/buildroot/archive
|
|
BR_FILE = /tmp/buildroot-$(BR_VER).tar.gz
|
|
BR_CONF = $(TARGET)/openipc_defconfig
|
|
TARGET ?= $(PWD)/output
|
|
|
|
CONFIG = $(error variable BOARD not defined)
|
|
TIMER := $(shell date +%s)
|
|
|
|
ifeq ($(or $(MAKECMDGOALS), $(BOARD)),)
|
|
LIST := $(shell find ./br-ext-*/configs/*_defconfig | sort | \
|
|
sed -E "s/br-ext-chip-(.+).configs.(.+)_defconfig/'\2' '\1 \2'/")
|
|
BOARD := $(or $(shell whiptail --title "Available boards" --menu "Select a config:" 20 70 12 \
|
|
--notags $(LIST) 3>&1 1>&2 2>&3),$(CONFIG))
|
|
endif
|
|
|
|
ifneq ($(BOARD),)
|
|
CONFIG := $(shell find br-ext-*/configs/*_defconfig | grep -m1 $(BOARD))
|
|
include $(CONFIG)
|
|
endif
|
|
|
|
all: build repack timer
|
|
|
|
build: defconfig
|
|
@$(BR_MAKE) all -j$(shell nproc)
|
|
|
|
br-%: defconfig
|
|
@$(BR_MAKE) $(subst br-,,$@) -j$(shell nproc)
|
|
|
|
defconfig: prepare
|
|
@echo --- $(or $(CONFIG),$(error variable BOARD not found))
|
|
@cat $(CONFIG) $(PWD)/general/openipc.fragment > $(BR_CONF)
|
|
@$(BR_MAKE) BR2_DEFCONFIG=$(BR_CONF) defconfig
|
|
|
|
prepare:
|
|
@if test ! -e $(TARGET)/buildroot-$(BR_VER); then \
|
|
wget -c -q $(BR_LINK)/$(BR_VER).tar.gz -O $(BR_FILE); \
|
|
mkdir -p $(TARGET); tar -xf $(BR_FILE) -C $(TARGET); fi
|
|
|
|
help:
|
|
@printf "BR-OpenIPC usage:\n \
|
|
- make list - show available device configurations\n \
|
|
- make deps - install build dependencies\n \
|
|
- make clean - remove defconfig and target folder\n \
|
|
- make package - list available packages\n \
|
|
- make distclean - remove buildroot and output folder\n \
|
|
- make br-linux - build linux kernel only\n\n"
|
|
|
|
list:
|
|
@ls -1 br-ext-chip-*/configs
|
|
|
|
package:
|
|
@find $(PWD)/general/package/* -maxdepth 0 -type d -printf "br-%f\n" | grep -v patch
|
|
|
|
toolname:
|
|
@echo toolchain.$(BR2_OPENIPC_SOC_VENDOR)-$(BR2_OPENIPC_SOC_FAMILY)
|
|
|
|
clean:
|
|
@rm -rf $(TARGET)/build $(TARGET)/images $(TARGET)/per-package $(TARGET)/target
|
|
|
|
distclean:
|
|
@rm -rf $(BR_FILE) $(TARGET)
|
|
|
|
deps:
|
|
sudo apt-get install -y automake autotools-dev bc build-essential cpio \
|
|
curl file fzf git libncurses-dev libtool lzop make rsync unzip wget libssl-dev
|
|
|
|
timer:
|
|
@echo - Build time: $(shell date -d @$(shell expr $(shell date +%s) - $(TIMER)) -u +%M:%S)
|
|
|
|
toolchain: defconfig
|
|
ifeq ($(BR2_TOOLCHAIN_EXTERNAL),y)
|
|
@cp -rf $(PWD)/general/package/gcc $(TARGET)/buildroot-$(BR_VER)/package
|
|
@$(MAKE) -f $(PWD)/general/toolchain.mk BR_CONF=$(BR_CONF) CONFIG=$(PWD)/$(CONFIG)
|
|
@$(BR_MAKE) BR2_DEFCONFIG=$(BR_CONF) defconfig
|
|
endif
|
|
@$(BR_MAKE) sdk -j$(shell nproc)
|
|
|
|
repack:
|
|
ifeq ($(BR2_TARGET_ROOTFS_SQUASHFS),y)
|
|
ifeq ($(BR2_OPENIPC_SOC_VENDOR),"rockchip")
|
|
@$(call PREPARE_REPACK,zboot.img,4096,rootfs.squashfs,5120,nor)
|
|
else ifeq ($(BR2_OPENIPC_FLASH_SIZE),"8")
|
|
@$(call PREPARE_REPACK,uImage,2048,rootfs.squashfs,5120,nor)
|
|
else
|
|
@$(call PREPARE_REPACK,uImage,2048,rootfs.squashfs,8192,nor)
|
|
endif
|
|
endif
|
|
ifeq ($(BR2_TARGET_ROOTFS_UBI),y)
|
|
ifeq ($(BR2_OPENIPC_SOC_VENDOR),"rockchip")
|
|
@$(call PREPARE_REPACK,zboot.img,4096,rootfs.ubi,16384,nand)
|
|
else ifeq ($(BR2_OPENIPC_SOC_VENDOR),"sigmastar")
|
|
@$(call PREPARE_REPACK,,,rootfs.ubi,16384,nand)
|
|
else
|
|
@$(call PREPARE_REPACK,uImage,4096,rootfs.ubi,16384,nand)
|
|
endif
|
|
endif
|
|
ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
|
|
@$(call PREPARE_REPACK,uImage,16384,,,initramfs)
|
|
endif
|
|
|
|
define PREPARE_REPACK
|
|
$(if $(1),$(call CHECK_SIZE,$(1),$(2)))
|
|
$(if $(3),$(call CHECK_SIZE,$(3),$(4)))
|
|
$(call REPACK_FIRMWARE,$(1),$(3),$(5))
|
|
endef
|
|
|
|
define CHECK_SIZE
|
|
$(eval FILE_SIZE = $(shell expr $(shell stat -c %s $(TARGET)/images/$(1) || echo 0) / 1024))
|
|
if test $(FILE_SIZE) -eq 0; then exit 1; fi
|
|
echo - $(1): [$(FILE_SIZE)KB/$(2)KB]
|
|
if test $(FILE_SIZE) -gt $(2); then \
|
|
echo -- size exceeded by: $(shell expr $(FILE_SIZE) - $(2))KB; exit 1; fi
|
|
endef
|
|
|
|
define REPACK_FIRMWARE
|
|
cd $(TARGET)/images && if test -e rootfs.tar; then mv -f rootfs.tar rootfs.$(BR2_OPENIPC_SOC_MODEL).tar; fi
|
|
$(if $(1),cd $(TARGET)/images && if test -e $(1); then mv -f $(1) $(1).$(BR2_OPENIPC_SOC_MODEL); fi)
|
|
$(if $(2),cd $(TARGET)/images && if test -e $(2); then mv -f $(2) $(2).$(BR2_OPENIPC_SOC_MODEL); fi)
|
|
$(if $(1),cd $(TARGET)/images && md5sum $(1).$(BR2_OPENIPC_SOC_MODEL) > $(1).$(BR2_OPENIPC_SOC_MODEL).md5sum)
|
|
$(if $(2),cd $(TARGET)/images && md5sum $(2).$(BR2_OPENIPC_SOC_MODEL) > $(2).$(BR2_OPENIPC_SOC_MODEL).md5sum)
|
|
$(if $(1),$(eval KERNEL = $(1).$(BR2_OPENIPC_SOC_MODEL) $(1).$(BR2_OPENIPC_SOC_MODEL).md5sum),$(eval KERNEL =))
|
|
$(if $(2),$(eval ROOTFS = $(2).$(BR2_OPENIPC_SOC_MODEL) $(2).$(BR2_OPENIPC_SOC_MODEL).md5sum),$(eval ROOTFS =))
|
|
$(eval ARCHIVE = openipc.$(BR2_OPENIPC_SOC_MODEL)-$(3)-$(BR2_OPENIPC_VARIANT).tgz)
|
|
cd $(TARGET)/images && tar -czf $(ARCHIVE) $(KERNEL) $(ROOTFS)
|
|
rm -f $(TARGET)/images/*.md5sum
|
|
endef
|