summaryrefslogtreecommitdiff
path: root/payloads/external/LinuxBoot/targets/linux.mk
diff options
context:
space:
mode:
Diffstat (limited to 'payloads/external/LinuxBoot/targets/linux.mk')
-rw-r--r--payloads/external/LinuxBoot/targets/linux.mk147
1 files changed, 92 insertions, 55 deletions
diff --git a/payloads/external/LinuxBoot/targets/linux.mk b/payloads/external/LinuxBoot/targets/linux.mk
index 91118d4496..5632a0b923 100644
--- a/payloads/external/LinuxBoot/targets/linux.mk
+++ b/payloads/external/LinuxBoot/targets/linux.mk
@@ -13,83 +13,120 @@
## GNU General Public License for more details.
##
-kernel_tarball=https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-$(CONFIG_LINUXBOOT_KERNEL_VERSION).tar.xz
+ARCH-$(CONFIG_LINUXBOOT_X86_64)=x86_64
+ARCH-$(CONFIG_LINUXBOOT_X86)=x86
+ARCH-$(CONFIG_LINUXBOOT_ARM64)=arm64
+
+TAG-$(CONFIG_LINUXBOOT_KERNEL_MAINLINE)=mainline
+TAG-$(CONFIG_LINUXBOOT_KERNEL_STABLE)=stable
+TAG-$(CONFIG_LINUXBOOT_KERNEL_LONGTERM)=longterm
+
+pwd:=$(shell pwd)
+top:=../../..
project_dir=linuxboot
-kernel_dir=$(project_dir)/kernel
-
-XGCCPATH?=$(PWD)/util/crossgcc/xgcc/bin
-ifeq ($(CONFIG_LINUXBOOT_ARCH),i386)
-LINUXBOOT_COMPILE?=$(XGCCPATH)/i386-linux-
-ARCH?=x86
-else ifeq ($(CONFIG_LINUXBOOT_ARCH),amd64)
-LINUXBOOT_COMPILE?=$(XGCCPATH)/x86_64-linux-
-ARCH?=x86_64
-else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64)
-LINUXBOOT_COMPILE?=$(XGCCPATH)/aarch64-linux-
-ARCH?=arm64
+tarball_dir:=$(project_dir)/tarball
+decompress_flag=.done
+
+OBJCOPY:=$(LINUXBOOT_CROSS_COMPILE)objcopy
+
+ifeq ($(CONFIG_LINUXBOOT_KERNEL_CUSTOM),y)
+ kernel_version:=$(CONFIG_LINUXBOOT_KERNEL_CUSTOM_VERSION)
+else
+ kernel_version:=$(shell curl -s -k https://www.kernel.org/feeds/kdist.xml | \
+ sed -n -e 's@.*<guid isPermaLink="false">\(.*\)</guid>.*@\1@p' | \
+ awk -F ',' '/$(TAG-y)/{ print $$3 }' | \
+ head -n 1)
endif
-OBJCOPY:=$(LINUXBOOT_COMPILE)objcopy
+kernel_dir=$(project_dir)/kernel-$(subst .,_,$(kernel_version))
+kernel_tarball=linux-$(kernel_version).tar
+kernel_mirror=https://mirrors.edge.kernel.org/pub/linux/kernel
+
+ifeq ($(findstring x2.6.,x$(kernel_version)),x2.6.)
+kernel_mirror_path := $(kernel_mirror)/v2.6
+else ifeq ($(findstring x3.,x$(kernel_version)),x3.)
+kernel_mirror_path := $(kernel_mirror)/v3.x
+else ifeq ($(findstring x4.,x$(kernel_version)),x4.)
+kernel_mirror_path := $(kernel_mirror)/v4.x
+else ifeq ($(findstring x5.,x$(kernel_version)),x5.)
+kernel_mirror_path := $(kernel_mirror)/v5.x
+endif
all: kernel
-toolchain:
- if [[ ! -x "$(LINUXBOOT_COMPILE)gcc" ]]; then \
- echo "Toolchain '$(LINUXBOOT_COMPILE)*' is missing."; \
- exit 1; \
- fi
+lookup:
+ifeq ($(kernel_version),)
+ $(error kernel version lookup failed for $(TAG-y) release)
+endif
+ @echo " WWW Kernel [$(TAG-y)] $(kernel_version)"
-$(kernel_dir)/.config:
- echo " WWW Download Linux $(CONFIG_LINUXBOOT_KERNEL_VERSION)"
- mkdir -p $(kernel_dir)
-ifeq ("$(wildcard $(kernel_dir)/README)","")
- curl -s $(kernel_tarball) | tar xJ -C $(kernel_dir) --strip 1
+fetch:
+ifneq ($(shell [[ -d "$(kernel_dir)" && -f "$(kernel_dir)/$(decompress_flag)" ]];echo $$?),0)
+ mkdir -p $(tarball_dir)
+ if [[ ! -f $(tarball_dir)/$(kernel_tarball).xz && ! -f $(tarball_dir)/$(kernel_tarball).xz ]]; then \
+ echo " WWW $(kernel_tarball).xz"; \
+ cd $(tarball_dir); \
+ curl -OLs "$(kernel_mirror_path)/$(kernel_tarball).xz"; \
+ cd $(pwd); \
+ fi
endif
-config: $(kernel_dir)/.config
- echo " CONFIG Linux $(CONFIG_LINUXBOOT_KERNEL_VERSION)"
-ifneq ($(CONFIG_LINUXBOOT_KERNEL_CONFIGFILE),)
+unpack: fetch
+ if [[ -d "$(kernel_dir)" && ! -f "$(kernel_dir)/$(decompress_flag)" ]]; then \
+ rm -rf $(kernel_dir); \
+ fi
+ if [[ ! -d "$(kernel_dir)" ]]; then \
+ mkdir $(kernel_dir); \
+ echo " XZ $(kernel_tarball).xz"; \
+ tar xJf $(tarball_dir)/$(kernel_tarball).xz --strip 1 -C $(kernel_dir); \
+ fi
+ touch $(kernel_dir)/$(decompress_flag)
+
+$(kernel_dir)/.config: unpack
+ @echo " CONFIG Linux $(kernel_version)"
+ifeq ($(CONFIG_LINUXBOOT_KERNEL_CUSTOM_CONFIG),y)
cp $(CONFIG_LINUXBOOT_KERNEL_CONFIGFILE) $(kernel_dir)/.config
-else ifeq ($(CONFIG_LINUXBOOT_ARCH),i386)
- cp x86/defconfig $(kernel_dir)/.config
-else ifeq ($(CONFIG_LINUXBOOT_ARCH),amd64)
- cp x86_64/defconfig $(kernel_dir)/.config
-else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64)
- cp arm64/defconfig $(kernel_dir)/.config
+else
+ cp $(ARCH-y)/defconfig $(kernel_dir)/.config
endif
+ $(MAKE) -C $(kernel_dir) olddefconfig ARCH=$(ARCH-y)
-ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),i386 amd64))
-$(kernel_dir)/arch/x86/boot/bzImage: config toolchain
-else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64)
-$(kernel_dir)/vmlinux: config toolchain
+build: $(kernel_dir)/.config
+ @echo " MAKE Linux $(kernel_version)"
+ifeq ($(CONFIG_LINUXBOOT_KERNEL_BZIMAGE),y)
+ $(MAKE) -C $(kernel_dir) CROSS_COMPILE=$(LINUXBOOT_CROSS_COMPILE) ARCH=$(ARCH-y) bzImage
+else
+ifeq ($(CONFIG_LINUXBOOT_KERNEL_UIMAGE),y)
+ $(MAKE) -C $(kernel_dir) CROSS_COMPILE=$(LINUXBOOT_CROSS_COMPILE) ARCH=$(ARCH-y) vmlinux
+endif
endif
- echo " MAKE Kernel $(CONFIG_LINUXBOOT_KERNEL_VERSION)"
- $(MAKE) -C $(kernel_dir) olddefconfig CROSS_COMPILE=$(LINUXBOOT_COMPILE) ARCH=$(ARCH)
- $(MAKE) -C $(kernel_dir) -j $(CPUS) CROSS_COMPILE=$(LINUXBOOT_COMPILE) ARCH=$(ARCH)
-ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),i386 amd64))
-$(project_dir)/bzImage: $(kernel_dir)/arch/x86/boot/bzImage
+ifeq ($(CONFIG_LINUXBOOT_KERNEL_BZIMAGE),y)
+$(top)/$(CONFIG_LINUXBOOT_KERNEL): build
+ @echo " CP bzImage"
+ cp $(kernel_dir)/arch/x86/boot/bzImage $@
+else
+ifeq ($(CONFIG_LINUXBOOT_KERNEL_UIMAGE),y)
+$(project_dir)/target.dtb: $(top)/$(CONFIG_LINUXBOOT_DTB_FILE)
cp $< $@
-else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64)
$(project_dir)/vmlinux.bin: $(kernel_dir)/vmlinux
$(OBJCOPY) -O binary $< $@
-
-$(project_dir)/target.dtb: $(PWD)/$(CONFIG_LINUXBOOT_DTB_FILE)
- cp $< $@
-
$(project_dir)/vmlinux.bin.lzma: $(project_dir)/vmlinux.bin
xz -c -k -f --format=lzma --lzma1=dict=1MiB,lc=3,lp=0,pb=3 $< > $@
-
-$(project_dir)/uImage: $(project_dir)/vmlinux.bin.lzma $(project_dir)/../arm64/kernel_fdt_lzma.its $(project_dir)/target.dtb
+$(top)/$(CONFIG_LINUXBOOT_KERNEL): build $(project_dir)/vmlinux.bin.lzma $(project_dir)/target.dtb
cp $(project_dir)/../arm64/kernel_fdt_lzma.its $(project_dir)
- cp $(PWD)/$(CONFIG_LINUXBOOT_INITRAMFS)$(CONFIG_LINUXBOOT_INITRAMFS_SUFFIX) $(project_dir)/u-initramfs
+ cp $(top)/$(CONFIG_LINUXBOOT_INITRAMFS)$(CONFIG_LINUXBOOT_INITRAMFS_SUFFIX) $(project_dir)/initramfs
mkimage -f $(project_dir)/kernel_fdt_lzma.its $@
+else
+ $(error Kernel image format not found)
+ exit 1
+endif
endif
-ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),i386 amd64))
-kernel: $(project_dir)/bzImage
-else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64)
-kernel: $(project_dir)/uImage
+ifneq ($(TAG-y),)
+kernel: lookup $(top)/$(CONFIG_LINUXBOOT_KERNEL)
+else
+kernel: $(top)/$(CONFIG_LINUXBOOT_KERNEL)
endif
-.PHONY: kernel config toolchain
+.PHONY: all kernel build unpack fetch check