mirror of
https://github.com/linuxboot/heads.git
synced 2024-12-21 05:53:14 +00:00
3e6eac9ffd
Signed-off-by: Jonathon Hall <jonathon.hall@puri.sm>
215 lines
8.1 KiB
Makefile
215 lines
8.1 KiB
Makefile
modules-$(CONFIG_COREBOOT) += coreboot
|
|
|
|
ifeq "$(CONFIG_COREBOOT)" "y"
|
|
|
|
CONFIG_COREBOOT_ROM ?= coreboot.rom
|
|
CONFIG_COREBOOT_BOOTBLOCK ?=
|
|
|
|
ifeq "$(CONFIG_TARGET_ARCH)" "x86"
|
|
COREBOOT_TARGET := i386
|
|
LINUX_IMAGE_FILE := bzImage
|
|
else ifeq "$(CONFIG_TARGET_ARCH)" "ppc64"
|
|
COREBOOT_TARGET := ppc64
|
|
LINUX_IMAGE_FILE := zImage
|
|
else
|
|
$(error "$(CONFIG_TARGET_ARCH) target isn't supported by this module")
|
|
endif
|
|
|
|
ifeq "$(CONFIG_COREBOOT_VERSION)" "4.8.1"
|
|
coreboot_version := 4.8.1
|
|
coreboot_hash := f0ddf4db0628c1fe1e8348c40084d9cbeb5771400c963fd419cda3995b69ad23
|
|
coreboot-blobs_hash := 18aa509ae3af005a05d7b1e0b0246dc640249c14fc828f5144b6fd20bb10e295
|
|
else ifeq "$(CONFIG_COREBOOT_VERSION)" "4.11"
|
|
coreboot_version := 4.11
|
|
coreboot_hash := 97fd859b4c39a25534fe33c30eb86e54a233952e08a024c55858d11598a8ad87
|
|
coreboot-blobs_hash := aa7855c5bd385b3360dadc043ea6bc93f564e6e4840d9b3ee5b9e696bbd055db
|
|
coreboot_depends := $(if $(CONFIG_PURISM_BLOBS), purism-blobs)
|
|
else ifeq "$(CONFIG_COREBOOT_VERSION)" "4.13"
|
|
coreboot_version := 4.13
|
|
coreboot_hash := 4779da645a25ddebc78f1bd2bd0b740fb1e6479572648d4650042a2b9502856a
|
|
coreboot-blobs_hash := 060656b46a7859d038ddeec3f7e086e85f146a50b280c4babec23c1188264dc8
|
|
coreboot_depends := $(if $(CONFIG_PURISM_BLOBS), purism-blobs)
|
|
else ifeq "$(CONFIG_COREBOOT_VERSION)" "4.17"
|
|
coreboot_version := 4.17
|
|
coreboot_hash := 95da11d1c6a450385101a68799258a398ce965f4e46cce6fe8d5ebd74e50c125
|
|
coreboot-blobs_hash := a2277fe7a2b2aab5da0aa335158460e00b852382f6736f2179992805702eb607
|
|
coreboot_depends := $(if $(CONFIG_PURISM_BLOBS), purism-blobs)
|
|
EXTRA_FLAGS := -fdebug-prefix-map=$(pwd)=heads -gno-record-gcc-switches -Wno-error=packed-not-aligned -Wno-error=address-of-packed-member
|
|
else ifeq "$(CONFIG_COREBOOT_VERSION)" "4.19"
|
|
coreboot_version := 4.19
|
|
coreboot_hash := 65ccb2f46535b996e0066a1b76f81c8cf1ff3e27df84b3f97d8ad7b3e7cf0a43
|
|
coreboot-blobs_hash := 30214caed07b25f11e47bec022ff6234841376e36689eb674de2330a3e980cbc
|
|
coreboot_depends := $(if $(CONFIG_PURISM_BLOBS), purism-blobs)
|
|
EXTRA_FLAGS := -fdebug-prefix-map=$(pwd)=heads -gno-record-gcc-switches -Wno-error=packed-not-aligned -Wno-error=address-of-packed-member
|
|
else ifeq "$(CONFIG_COREBOOT_VERSION)" "talos_2"
|
|
coreboot_version = git
|
|
coreboot_patch_version = talos_2
|
|
coreboot_commit_hash = 068ad520e4ae898d356add72ea7d2a13913b76ab
|
|
coreboot_repo := https://github.com/Dasharo/coreboot
|
|
|
|
else ifeq "$(CONFIG_COREBOOT_VERSION)" "purism"
|
|
coreboot_version := git
|
|
coreboot_repo := https://source.puri.sm/coreboot/coreboot
|
|
coreboot_commit_hash := a899f08d2789db1dd9b02cff34179c4d38e6d0e3
|
|
EXTRA_FLAGS := -fdebug-prefix-map=$(pwd)=heads -gno-record-gcc-switches -Wno-error=packed-not-aligned -Wno-error=address-of-packed-member
|
|
else
|
|
$(error "$(BOARD): does not specify coreboot version under CONFIG_COREBOOT_VERSION")
|
|
endif
|
|
|
|
#coreboot_version := git
|
|
#coreboot_repo := https://github.com/osresearch/coreboot
|
|
coreboot_base_dir := coreboot-$(coreboot_version)
|
|
coreboot_dir := $(coreboot_base_dir)/$(BOARD)
|
|
coreboot_tar := coreboot-$(coreboot_version).tar.xz
|
|
coreboot_url := https://www.coreboot.org/releases/$(coreboot_tar)
|
|
|
|
# coreboot builds are specialized on a per-target basis.
|
|
# The builds are done in a per-target subdirectory
|
|
CONFIG_COREBOOT_CONFIG ?= config/coreboot-$(BOARD).config
|
|
|
|
# Ensure that touching the config file will force a rebuild
|
|
$(build)/$(coreboot_dir)/.configured: $(CONFIG_COREBOOT_CONFIG)
|
|
|
|
EXTRA_FLAGS ?= -fdebug-prefix-map=$(pwd)=heads -gno-record-gcc-switches -Wno-error=packed-not-aligned
|
|
|
|
coreboot_configure := \
|
|
mkdir -p "$(build)/$(coreboot_dir)" \
|
|
&& $(call install_config,$(pwd)/$(CONFIG_COREBOOT_CONFIG),$(build)/$(coreboot_dir)/.config) \
|
|
&& echo 'CONFIG_LOCALVERSION="Heads-$(HEADS_GIT_VERSION)"' >> $(build)/$(coreboot_dir)/.config \
|
|
&& echo 'CONFIG_MAINBOARD_SMBIOS_PRODUCT_NAME="$(BOARD)"' >> $(build)/$(coreboot_dir)/.config \
|
|
&& $(MAKE) olddefconfig \
|
|
-C "$(build)/$(coreboot_base_dir)" \
|
|
obj="$(build)/$(coreboot_dir)" \
|
|
DOTCONFIG="$(build)/$(coreboot_dir)/.config" \
|
|
BUILD_TIMELESS=1 \
|
|
CFLAGS_x86_32="$(EXTRA_FLAGS)" \
|
|
CFLAGS_x86_64="$(EXTRA_FLAGS)" \
|
|
|
|
COREBOOT_IASL="$(build)/$(coreboot_base_dir)/util/crossgcc/xgcc/bin/iasl"
|
|
|
|
# coreboot for x86 is built with the 32-bit compiler; ideally we could use the
|
|
# same x86_64-linux-musl -m32 to build it, but this causes some link errors that
|
|
# need to be tracked down.
|
|
# CROSS="$(CROSS)" \
|
|
|
|
ifeq "$(CONFIG_TARGET_ARCH)" "x86"
|
|
COREBOOT_CROSS := $(dir $(CROSS))i386-linux-musl-
|
|
else
|
|
COREBOOT_CROSS := $(CROSS)
|
|
endif
|
|
|
|
coreboot_target := \
|
|
-C "$(build)/$(coreboot_base_dir)" \
|
|
obj="$(build)/$(coreboot_dir)" \
|
|
CROSS="$(COREBOOT_CROSS)" \
|
|
IASL="$(COREBOOT_IASL)" \
|
|
DOTCONFIG="$(build)/$(coreboot_dir)/.config" \
|
|
xcompile="$(build)/$(coreboot_base_dir)/.xcompile" \
|
|
BUILD_TIMELESS=1 \
|
|
CFLAGS_x86_32="$(EXTRA_FLAGS)" \
|
|
CFLAGS_x86_64="$(EXTRA_FLAGS)" \
|
|
$(MAKE_JOBS)
|
|
|
|
coreboot_output := $(CONFIG_COREBOOT_ROM)
|
|
coreboot_output += $(CONFIG_COREBOOT_BOOTBLOCK)
|
|
coreboot_depend += linux initrd $(musl_dep)
|
|
|
|
COREBOOT_TOOLCHAIN=$(build)/$(coreboot_base_dir)/.xcompile
|
|
$(COREBOOT_TOOLCHAIN): $(build)/$(coreboot_base_dir)/.canary
|
|
$(MAKE) -C "$(build)/$(coreboot_base_dir)" CPUS=$(CPUS) "crossgcc-$(COREBOOT_TARGET)"
|
|
|
|
$(build)/$(coreboot_dir)/.configured: $(COREBOOT_TOOLCHAIN)
|
|
|
|
# Force a rebuild if the inputs have changed
|
|
$(build)/$(coreboot_dir)/.build: \
|
|
$(build)/$(BOARD)/$(LINUX_IMAGE_FILE) \
|
|
$(build)/$(BOARD)/initrd.cpio.xz \
|
|
|
|
# This produces a ROM image that is written with the flashrom program
|
|
ifneq ($(CONFIG_COREBOOT),)
|
|
|
|
$(build)/$(BOARD)/$(CB_OUTPUT_FILE): $(build)/$(coreboot_dir)/.build
|
|
# Use coreboot.rom, because custom output files might not be processed by cbfstool
|
|
"$(build)/$(coreboot_dir)/cbfstool" "$(dir $<)coreboot.rom" print
|
|
$(call do-copy,$(dir $<)$(CONFIG_COREBOOT_ROM),$@)
|
|
@touch $@ # update the time stamp
|
|
|
|
ifneq ($(CONFIG_COREBOOT_BOOTBLOCK),)
|
|
$(build)/$(BOARD)/$(CB_BOOTBLOCK_FILE): $(build)/$(coreboot_dir)/.build
|
|
$(call do-copy,$(dir $<)$(CONFIG_COREBOOT_BOOTBLOCK),$@)
|
|
@touch $@ # update the time stamp
|
|
endif
|
|
|
|
endif
|
|
|
|
#
|
|
# Helpful target for reconfiguring the coreboot target
|
|
#
|
|
coreboot.menuconfig:
|
|
$(MAKE) \
|
|
-C "$(build)/$(coreboot_base_dir)" \
|
|
DOTCONFIG="$(build)/$(coreboot_dir)/.config" \
|
|
menuconfig
|
|
|
|
# The config file in the repo is stored as a "defconfig" format
|
|
# which only includes the options that have changed from the defaults.
|
|
coreboot.saveconfig:
|
|
$(MAKE) \
|
|
-C "$(build)/$(coreboot_base_dir)" \
|
|
DOTCONFIG="$(build)/$(coreboot_dir)/.config" \
|
|
DEFCONFIG="$(pwd)/$(CONFIG_COREBOOT_CONFIG)" \
|
|
savedefconfig
|
|
|
|
coreboot.save_defconfig_in_place:
|
|
$(MAKE) \
|
|
-C "$(build)/$(coreboot_base_dir)" \
|
|
DOTCONFIG="$(pwd)/$(CONFIG_COREBOOT_CONFIG)" \
|
|
DEFCONFIG="$(build)/$(coreboot_dir)/defconfig" \
|
|
savedefconfig \
|
|
&& mv "$(build)/$(coreboot_dir)/defconfig" "$(pwd)/$(CONFIG_COREBOOT_CONFIG)"
|
|
|
|
|
|
coreboot.modify_and_save_defconfig_in_place:
|
|
$(MAKE) \
|
|
-C "$(build)/$(coreboot_base_dir)" \
|
|
DOTCONFIG="$(pwd)/$(CONFIG_COREBOOT_CONFIG)" \
|
|
menuconfig \
|
|
&& $(MAKE) \
|
|
-C "$(build)/$(coreboot_base_dir)" \
|
|
DOTCONFIG="$(pwd)/$(CONFIG_COREBOOT_CONFIG)" \
|
|
DEFCONFIG="$(pwd)/$(CONFIG_COREBOOT_CONFIG)" \
|
|
savedefconfig \
|
|
|
|
coreboot.modify_and_save_oldconfig_in_place:
|
|
$(MAKE) menuconfig \
|
|
-C "$(build)/$(coreboot_base_dir)" \
|
|
obj="$(build)/$(coreboot_dir)" \
|
|
DOTCONFIG="$(pwd)/$(CONFIG_COREBOOT_CONFIG)"
|
|
|
|
# if we are not building from a git checkout,
|
|
# we must also download the coreboot-blobs tree
|
|
ifneq "$(coreboot_version)" "git"
|
|
|
|
coreboot_depends += coreboot-blobs
|
|
modules-y += coreboot-blobs
|
|
|
|
coreboot-blobs_version := $(coreboot_version)
|
|
coreboot-blobs_tar := coreboot-blobs-$(coreboot-blobs_version).tar.xz
|
|
coreboot-blobs_url := https://www.coreboot.org/releases/$(coreboot-blobs_tar)
|
|
|
|
ifeq "$(CONFIG_COREBOOT_VERSION)" "4.8.1"
|
|
coreboot-blobs_tar_opt := --strip 3
|
|
coreboot-blobs_dir := coreboot-$(coreboot-blobs_version)/3rdparty/blobs
|
|
else
|
|
coreboot-blobs_tar_opt := --strip 2
|
|
coreboot-blobs_dir := coreboot-$(coreboot-blobs_version)/3rdparty
|
|
endif
|
|
|
|
## there is nothing to build for the blobs, this should be
|
|
## made easier to make happen
|
|
coreboot-blobs_output := .built
|
|
coreboot-blobs_configure := echo -e 'all:\n\ttouch .built' > Makefile
|
|
|
|
endif
|
|
endif
|