PrawnOS-nonfree/makefile
Hal Emmerich c0f14421c1 Packaging and build system rework
rework package build system (again) for greater ease of maintenance and flexability
add creation of a local apt repo for package building in pbuilder
add an apt cache to debootstrap to speed up build times and reduce network load
package mosys
more build system improvements to come
2020-06-17 01:51:39 -05:00

176 lines
4.8 KiB
Makefile

# This file is part of PrawnOS (http://www.prawnos.com)
# Copyright (c) 2018 Hal Emmerich <hal@halemmerich.com>
# PrawnOS is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2
# as published by the Free Software Foundation.
# PrawnOS 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 PrawnOS. If not, see <https://www.gnu.org/licenses/>.
KVER=5.4.29
ifeq ($(DEBIAN_SUITE),)
DEBIAN_SUITE=buster
endif
ifeq ($(PRAWNOS_SUITE),)
PRAWNOS_SUITE=Shiba
endif
OUTNAME=PrawnOS-$(PRAWNOS_SUITE)-c201.img
BASE=$(OUTNAME)-BASE
PRAWNOS_ROOT := $(shell git rev-parse --show-toplevel)
include $(PRAWNOS_ROOT)/scripts/common.mk
#Usage:
#run make image
#this will generate two images named OUTNAME and OUTNAME-BASE
#-BASE is only the filesystem with no kernel.
#if you make any changes to the kernel or kernel config with make kernel_config
#run kernel_inject
#:::::::::::::::::::::::::::::: cleaning ::::::::::::::::::::::::::::::
.PHONY: clean
clean:
@echo "Enter one of:"
@echo " clean_kernel - which deletes the untar'd kernel folder from build"
@echo " clean_ath - which deletes the untar'd ath9k driver folder from build"
@echo " clean_img - which deletes the built PrawnOS image, this is ran when make image is ran"
@echo " clean_basefs - which deletes the built PrawnOS base image"
@echo " clean_initramfs - which deletes the built PrawnOS initramfs image that gets injected into the kernel"
@echo " clean_all - which does all of the above"
@echo " in most cases none of these need to be used manually as most cleanup steps are handled automatically"
.PHONY: clean_kernel
clean_kernel:
rm -rf build/linux-$(KVER)
.PHONY: clean_ath
clean_ath:
rm -rf build/open-ath9k-htc-firmware
.PHONY: clean_img
clean_img:
rm -f $(OUTNAME)
.PHONY: clean_basefs
clean_basefs:
rm -r $(BASE)
.PHONY: clean_initramfs
clean_initramfs:
rm -r build/PrawnOS-initramfs.cpio.gz
.PHONY: clean_packages
clean_packages:
cd packages && $(MAKE) clean
.PHONY: clean_pbuilder
clean_pbuilder:
rm -r build/prawnos-pbuilder-armhf-base.tgz
.PHONY: clean_all
clean_all:
$(MAKE) clean_kernel
$(MAKE) clean_ath
$(MAKE) clean_img
$(MAKE) clean_basefs
$(MAKE) clean_initramfs
$(MAKE) clean_pbuilder
$(MAKE) clean_packages
#:::::::::::::::::::::::::::::: premake prep ::::::::::::::::::::::::::::::
.PHONY: build_dirs
build_dirs:
mkdir -p build/logs/
mkdir -p build/apt-cache/
#:::::::::::::::::::::::::::::: kernel ::::::::::::::::::::::::::::::::::::
.PHONY: kernel
kernel:
$(MAKE) build_dirs
rm -rf build/logs/kernel-log.txt
./scripts/buildKernel.sh $(KVER) 2>&1 | tee build/logs/kernel-log.txt
.PHONY: kernel_config
kernel_config:
scripts/crossmenuconfig.sh $(KVER)
.PHONY: patch_kernel
patch_kernel:
scripts/patchKernel.sh
#:::::::::::::::::::::::::::::: initramfs :::::::::::::::::::::::::::::::::
.PHONY: initramfs
initramfs:
$(MAKE) build_dirs
rm -rf build/logs/initramfs-log.txt
./scripts/buildInitramFs.sh $(BASE) 2>&1 | tee build/logs/initramfs-log.txt
#:::::::::::::::::::::::::::::: filesystem ::::::::::::::::::::::::::::::::
#makes the base filesystem image without kernel. Only make a new one if the base image isnt present
.PHONY: filesystem
filesystem:
$(MAKE) build_dirs
rm -rf build/logs/fs-log.txt
$(MAKE) pbuilder_create
$(MAKE) packages
[ -f $(BASE) ] || ./scripts/buildFilesystem.sh $(KVER) $(DEBIAN_SUITE) $(BASE) $(PRAWNOS_ROOT) 2>&1 | tee build/logs/fs-log.txt
#:::::::::::::::::::::::::::::: packages ::::::::::::::::::::::::::::::::
.PHONY: packages
packages:
cd packages && $(MAKE)
.PHONY: packages_install
install_packages:
ifndef INSTALL_TARGET
$(error INSTALL_TARGET is not set)
endif
cd packages && $(MAKE) install INSTALL_TARGET=$(INSTALL_TARGET)
#:::::::::::::::::::::::::::::: image management ::::::::::::::::::::::::::
.PHONY: kernel_inject
kernel_inject: #Targets an already built .img and swaps the old kernel with the newly compiled kernel
scripts/injectKernelIntoFS.sh $(KVER) $(OUTNAME)
.PHONY: kernel_update
kernel_update:
$(MAKE) clean_img
$(MAKE) initramfs
$(MAKE) kernel
cp $(BASE) $(OUTNAME)
$(MAKE) kernel_inject
.PHONY: image
image:
$(MAKE) clean_img
$(MAKE) filesystem
$(MAKE) initramfs
$(MAKE) kernel
cp $(BASE) $(OUTNAME)
$(MAKE) kernel_inject
#:::::::::::::::::::::::::::::: pbuilder management :::::::::::::::::::::::
.PHONY: pbuilder_create
pbuilder_create:
$(MAKE) $(PBUILDER_CHROOT)
$(PBUILDER_CHROOT):
pbuilder create --basetgz $(PBUILDER_CHROOT) --configfile $(PBUILDER_RC)
#TODO: should only update if not updated for a day
.PHONY: pbuilder_update
pbuilder_update:
pbuilder update --basetgz $(PBUILDER_CHROOT) --configfile $(PBUILDER_RC)