FunKey-OS/Makefile

168 lines
5.9 KiB
Makefile

# Makefile for FunKey-OS
#
# Copyright (C) 2020 by Michel Stempin <michel.stempin@funkey-project.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
BRMAKE = buildroot/utils/brmake -C buildroot
BR = make -C buildroot
# Strip quotes and then whitespaces
qstrip = $(strip $(subst ",,$(1)))
#"))
# MESSAGE Macro -- display a message in bold type
MESSAGE = echo "$(shell date +%Y-%m-%dT%H:%M:%S) $(TERM_BOLD)\#\#\# $(call qstrip,$(1))$(TERM_RESET)"
TERM_BOLD := $(shell tput smso 2>/dev/null)
TERM_RESET := $(shell tput rmso 2>/dev/null)
.PHONY: fun source image update defconfig clean distclean
.IGNORE: _Makefile_
all: image update
@:
_Makefile_:
@:
%/Makefile:
@:
buildroot: buildroot/.git
@:
buildroot/.git:
@$(call MESSAGE,"Getting buildroot")
@git submodule init
@git submodule update
fun: buildroot Recovery/output/.config FunKey/output/.config
@$(call MESSAGE,"Making fun")
@$(call MESSAGE,"Making fun in Recovery")
@$(BRMAKE) BR2_EXTERNAL=../Recovery O=../Recovery/output
@$(call MESSAGE,"Making fun in FunKey")
@$(BRMAKE) BR2_EXTERNAL=../FunKey O=../FunKey/output
sdk: buildroot SDK/output/.config
@$(call MESSAGE,"Making FunKey SDK")
@$(BRMAKE) BR2_EXTERNAL=../SDK O=../SDK/output prepare-sdk
@$(call MESSAGE,"Generating SDK tarball")
@export LC_ALL=C; \
SDK=FunKey-sdk-$(shell cat FunKey/board/funkey/rootfs-overlay/etc/sw-versions | cut -f 2); \
grep -lr "$(shell pwd)/SDK/output/host" SDK/output/host | while read -r FILE ; do \
if file -b --mime-type "$${FILE}" | grep -q '^text/'; then \
sed -i "s|$(shell pwd)/SDK/output/host|/opt/$${SDK}|g" "$${FILE}"; \
fi; \
done; \
mkdir -p images; \
tar czf "images/$${SDK}.tar.gz" \
--owner=0 --group=0 --numeric-owner \
--transform="s#^$(patsubst /%,%,$(shell pwd))/SDK/output/host#$${SDK}#" \
-C / "$(patsubst /%,%,$(shell pwd))/SDK/output/host"; \
rm -f download/toolchain-external-custom/$${SDK}.tar.gz; \
mkdir -p download/toolchain-external-custom; \
ln -s ../../images/$${SDK}.tar.gz download/toolchain-external-custom/
FunKey/%: FunKey/output/.config
@$(call MESSAGE,"Making $(notdir $@) in $(subst /,,$(dir $@))")
@$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output $(notdir $@)
Recovery/%: Recovery/output/.config
@$(call MESSAGE,"Making $(notdir $@) in $(subst /,,$(dir $@))")
@$(BR) BR2_EXTERNAL=../Recovery O=../Recovery/output $(notdir $@)
SDK/%: SDK/output/.config
@$(call MESSAGE,"Making $(notdir $@) in $(subst /,,$(dir $@))")
@$(BR) BR2_EXTERNAL=../SDK O=../SDK/output $(notdir $@)
#%: FunKey/output/.config
# @$(call MESSAGE,"Making $@ in FunKey")
# @$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output $@
source:
@$(call MESSAGE,"Getting sources")
@$(BR) BR2_EXTERNAL=../SDK O=../SDK/output source
@$(BR) BR2_EXTERNAL=../Recovery O=../Recovery/output source
@$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output source
image: fun
@$(call MESSAGE,"Creating disk image")
@rm -rf root tmp
@mkdir -p root tmp
@./Recovery/output/host/bin/genimage --loglevel 0 --inputpath .
@rm -rf root tmp
@mv images/sdcard.img images/FunKey-sdcard-$(shell cat FunKey/board/funkey/rootfs-overlay/etc/sw-versions | cut -f 2).img
image-prod: fun
@$(call MESSAGE,"Creating disk image")
@rm -rf root tmp
@mkdir -p root tmp
@./Recovery/output/host/bin/genimage --loglevel 0 --config "genimage-prod.cfg" --inputpath .
@rm -rf root tmp
@mv images/sdcard-prod.img images/FunKey-sdcard-prod-$(shell cat FunKey/board/funkey/rootfs-overlay/etc/sw-versions | cut -f 2).img
update: fun
@$(call MESSAGE,"Creating update file")
@rm -rf tmp
@mkdir -p tmp
@cp FunKey/board/funkey/sw-description tmp/
@cp FunKey/board/funkey/update_partition tmp/
@cd FunKey/output/images && \
rm -f rootfs.ext2.gz && \
gzip -k rootfs.ext2 &&\
mv rootfs.ext2.gz ../../../tmp/
@cd tmp && \
echo sw-description rootfs.ext2.gz update_partition | \
tr " " "\n" | \
cpio -o -H crc --quiet > ../images/FunKey-rootfs-$(shell cat FunKey/board/funkey/rootfs-overlay/etc/sw-versions | cut -f 2).fwu
@rm -rf tmp
defconfig:
@$(call MESSAGE,"Updating default configs")
@$(call MESSAGE,"Updating default configs in SDK")
@$(BR) BR2_EXTERNAL=../SDK O=../SDK/output savedefconfig
@$(call MESSAGE,"Updating default configs in Recovery")
@$(BR) BR2_EXTERNAL=../Recovery O=../Recovery/output savedefconfig linux-update-defconfig uboot-update-defconfig busybox-update-config
@$(call MESSAGE,"Updating default configs in FunKey")
@$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output savedefconfig linux-update-defconfig busybox-update-config
clean:
@$(call MESSAGE,"Clean everything")
@$(BR) BR2_EXTERNAL=../SDK O=../SDK/output distclean
@$(BR) BR2_EXTERNAL=../Recovery O=../Recovery/output distclean
@$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output distclean
@rm -f br.log
distclean: clean
@$(call MESSAGE,"Really clean everything")
@rm -rf download images
FunKey/output/.config:
@$(call MESSAGE,"Configure FunKey")
@mkdir -p FunKey/board/funkey/patches
@$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output funkey_defconfig
Recovery/output/.config:
@$(call MESSAGE,"Configure Recovery")
@mkdir -p Recovery/board/funkey/patches
@$(BR) BR2_EXTERNAL=../Recovery O=../Recovery/output recovery_defconfig
SDK/output/.config:
@$(call MESSAGE,"Configure SDK")
@mkdir -p SDK/board/funkey/patches
@$(BR) BR2_EXTERNAL=../SDK O=../SDK/output funkey_defconfig