269 lines
10 KiB
Makefile
269 lines
10 KiB
Makefile
# Makefile - Yocto Scarthgap RPi5 build targets
|
|
#
|
|
# Usage:
|
|
# ./setup.sh - clone layers and check host tools
|
|
# make configure - initialize build dir and write config
|
|
# make build - build the image
|
|
|
|
SHELL := /bin/bash
|
|
TOPDIR := $(shell pwd)
|
|
BUILD_DIR := $(TOPDIR)/build
|
|
POKY_DIR := $(TOPDIR)/layers/poky
|
|
FIPS_IMAGE := wolfssl-fips-ready-image
|
|
BASE_IMAGE := core-image-base
|
|
MACHINE := raspberrypi5
|
|
DEPLOY_DIR := $(BUILD_DIR)/tmp/deploy/images/$(MACHINE)
|
|
QEMU_MACHINE := qemuarm64
|
|
QEMU_IMAGE := wolfssl-fips-ready-image-qemu
|
|
QEMU_CONF := $(TOPDIR)/conf/qemu-override.conf
|
|
QEMU_DEPLOY_DIR := $(BUILD_DIR)/tmp/deploy/images/$(QEMU_MACHINE)
|
|
|
|
# Helper: source the OE environment and run a bitbake command
|
|
define bitbake-cmd
|
|
@if [ ! -d "$(POKY_DIR)" ]; then \
|
|
echo "Error: poky not found. Run ./setup.sh first."; \
|
|
exit 1; \
|
|
fi
|
|
@source $(POKY_DIR)/oe-init-build-env $(BUILD_DIR) > /dev/null 2>&1 && $(1)
|
|
endef
|
|
|
|
LAYERS_DIR := $(TOPDIR)/layers
|
|
OVERRIDES_LAYER := $(LAYERS_DIR)/meta-wolfssl-overrides
|
|
BBLAYERS_CONF := $(BUILD_DIR)/conf/bblayers.conf
|
|
LOCAL_CONF := $(BUILD_DIR)/conf/local.conf
|
|
FIPS_CONF := $(TOPDIR)/conf/wolfssl-fips-ready.conf
|
|
FIPS_MARKER := \# ==== wolfssl-fips-ready config ====
|
|
|
|
.PHONY: configure build build-minimal clean distclean clean-project image-info move-image ip-dhcp fips-on fips-off fips-status qemu run-qemu shell help
|
|
|
|
## configure: Initialize build dir, write bblayers.conf and local.conf
|
|
configure:
|
|
@$(TOPDIR)/configure.sh
|
|
|
|
## build: Build the image (FIPS image if enabled, base image otherwise)
|
|
build:
|
|
@if [ -f "$(BBLAYERS_CONF)" ] && grep -q "meta-wolfssl-overrides" "$(BBLAYERS_CONF)" 2>/dev/null; then \
|
|
echo "FIPS enabled - building $(FIPS_IMAGE)"; \
|
|
else \
|
|
echo "Building $(BASE_IMAGE)"; \
|
|
fi
|
|
$(call bitbake-cmd, \
|
|
if grep -q "meta-wolfssl-overrides" "$(BBLAYERS_CONF)" 2>/dev/null; then \
|
|
bitbake $(FIPS_IMAGE); \
|
|
else \
|
|
bitbake $(BASE_IMAGE); \
|
|
fi)
|
|
|
|
## build-minimal: Build core-image-minimal for RPi5
|
|
build-minimal:
|
|
$(call bitbake-cmd, bitbake core-image-minimal)
|
|
|
|
## clean: Clean the active image sstate (cleansstate)
|
|
clean:
|
|
$(call bitbake-cmd, \
|
|
if grep -q "meta-wolfssl-overrides" "$(BBLAYERS_CONF)" 2>/dev/null; then \
|
|
bitbake -c cleansstate $(FIPS_IMAGE); \
|
|
else \
|
|
bitbake -c cleansstate $(BASE_IMAGE); \
|
|
fi)
|
|
|
|
## distclean: Remove the entire build directory
|
|
distclean:
|
|
@echo "Removing build directory: $(BUILD_DIR)"
|
|
rm -rf $(BUILD_DIR)
|
|
|
|
## clean-project: Reset to clean state (keeps source files and FIPS bundle)
|
|
clean-project:
|
|
@echo "Removing all generated files and caches..."
|
|
rm -rf $(BUILD_DIR) $(TOPDIR)/repos $(TOPDIR)/downloads $(TOPDIR)/sstate-cache
|
|
rm -rf $(TOPDIR)/conf/wolfssl-fips-ready.conf $(TOPDIR)/.envrc
|
|
rm -f $(TOPDIR)/*.wic $(TOPDIR)/*.wic.bz2 $(TOPDIR)/*.wic.gz $(TOPDIR)/*.wic.bmap
|
|
rm -f $(TOPDIR)/layers/meta-network-overrides/recipes-core/network-config/files/20-wired.network
|
|
@echo "Done. Run './setup.sh' to start fresh."
|
|
|
|
## image-info: Show the output image location and file sizes
|
|
image-info:
|
|
@echo "Deploy directory: $(DEPLOY_DIR)"
|
|
@echo ""
|
|
@if [ -d "$(DEPLOY_DIR)" ]; then \
|
|
ls -lh $(DEPLOY_DIR)/*.wic.bz2 2>/dev/null || \
|
|
ls -lh $(DEPLOY_DIR)/*.wic.gz 2>/dev/null || \
|
|
ls -lh $(DEPLOY_DIR)/*.wic 2>/dev/null || \
|
|
echo "No .wic image found yet. Run 'make build' first."; \
|
|
else \
|
|
echo "Deploy directory does not exist. Run 'make build' first."; \
|
|
fi
|
|
|
|
## move-image: Copy the latest .wic image to the current directory
|
|
move-image:
|
|
@LATEST=$$(ls -t $(DEPLOY_DIR)/*.wic.bz2 2>/dev/null | head -1); \
|
|
if [ -z "$$LATEST" ]; then \
|
|
LATEST=$$(ls -t $(DEPLOY_DIR)/*.wic.gz 2>/dev/null | head -1); \
|
|
fi; \
|
|
if [ -z "$$LATEST" ]; then \
|
|
LATEST=$$(ls -t $(DEPLOY_DIR)/*.wic 2>/dev/null | head -1); \
|
|
fi; \
|
|
if [ -z "$$LATEST" ]; then \
|
|
echo "No .wic image found. Run 'make build' first."; \
|
|
exit 1; \
|
|
fi; \
|
|
echo "Copying $$LATEST to ."; \
|
|
cp "$$LATEST" . ; \
|
|
echo "Done: $$(basename $$LATEST)"
|
|
|
|
## generate-fips-conf: Generate wolfssl-fips-ready.conf from a bundle .zip
|
|
## Usage: make generate-fips-conf BUNDLE=/path/to/wolfssl-x.x.x-gplv3-fips-ready.zip
|
|
generate-fips-conf:
|
|
@if [ -z "$(BUNDLE)" ]; then \
|
|
echo "Usage: make generate-fips-conf BUNDLE=/path/to/wolfssl-x.x.x-gplv3-fips-ready.zip"; \
|
|
exit 1; \
|
|
fi
|
|
@$(TOPDIR)/generate-fips-conf.sh "$(BUNDLE)"
|
|
|
|
## fips-on: Enable FIPS Ready - add overrides layer and require conf
|
|
fips-on:
|
|
@if [ ! -f "$(BBLAYERS_CONF)" ]; then \
|
|
echo "Error: bblayers.conf not found. Run 'make configure' first."; \
|
|
exit 1; \
|
|
fi
|
|
@if [ ! -f "$(FIPS_CONF)" ]; then \
|
|
echo "Error: conf/wolfssl-fips-ready.conf not found."; \
|
|
echo ""; \
|
|
echo "Generate it from your bundle .zip:"; \
|
|
echo " make generate-fips-conf BUNDLE=/path/to/wolfssl-x.x.x-gplv3-fips-ready.zip"; \
|
|
echo ""; \
|
|
echo "The bundle can live anywhere on disk."; \
|
|
exit 1; \
|
|
fi
|
|
@# --- Add overrides layer to bblayers.conf ---
|
|
@if grep -q "meta-wolfssl-overrides" "$(BBLAYERS_CONF)"; then \
|
|
echo "[FIPS] Overrides layer already in bblayers.conf"; \
|
|
else \
|
|
sed -i 's|$(LAYERS_DIR)/meta-wolfssl \\|$(LAYERS_DIR)/meta-wolfssl \\\n $(OVERRIDES_LAYER) \\|' "$(BBLAYERS_CONF)"; \
|
|
echo "[FIPS] Added overrides layer to bblayers.conf"; \
|
|
fi
|
|
@# --- Add FIPS config to local.conf ---
|
|
@if grep -q "$(FIPS_MARKER)" "$(LOCAL_CONF)"; then \
|
|
echo "[FIPS] FIPS config block already in local.conf"; \
|
|
else \
|
|
echo '' >> "$(LOCAL_CONF)"; \
|
|
echo '$(FIPS_MARKER)' >> "$(LOCAL_CONF)"; \
|
|
echo 'require $(FIPS_CONF)' >> "$(LOCAL_CONF)"; \
|
|
echo '' >> "$(LOCAL_CONF)"; \
|
|
echo '# FIPS initramfs - kernel bundles wolfSSL kernel module for early boot' >> "$(LOCAL_CONF)"; \
|
|
echo 'INITRAMFS_IMAGE = "core-image-minimal-initramfs"' >> "$(LOCAL_CONF)"; \
|
|
echo 'INITRAMFS_IMAGE_BUNDLE = "1"' >> "$(LOCAL_CONF)"; \
|
|
echo '$(FIPS_MARKER) END' >> "$(LOCAL_CONF)"; \
|
|
echo "[FIPS] Added FIPS config to local.conf"; \
|
|
fi
|
|
@echo ""
|
|
@echo "FIPS Ready ENABLED. Run 'make build' for the RPi5 image, or 'make qemu' for the QEMU image."
|
|
|
|
## fips-off: Disable FIPS Ready - remove overrides layer and FIPS config
|
|
fips-off:
|
|
@if [ ! -f "$(BBLAYERS_CONF)" ]; then \
|
|
echo "Error: bblayers.conf not found. Run 'make configure' first."; \
|
|
exit 1; \
|
|
fi
|
|
@# --- Remove overrides layer from bblayers.conf ---
|
|
@if grep -q "meta-wolfssl-overrides" "$(BBLAYERS_CONF)"; then \
|
|
sed -i '\|meta-wolfssl-overrides|d' "$(BBLAYERS_CONF)"; \
|
|
echo "[FIPS] Removed overrides layer from bblayers.conf"; \
|
|
else \
|
|
echo "[FIPS] Overrides layer already removed from bblayers.conf"; \
|
|
fi
|
|
@# --- Remove FIPS config block from local.conf ---
|
|
@if grep -q "$(FIPS_MARKER)" "$(LOCAL_CONF)"; then \
|
|
sed -i '/^$(FIPS_MARKER)/,/^$(FIPS_MARKER) END/d' "$(LOCAL_CONF)"; \
|
|
echo "[FIPS] Removed FIPS config block from local.conf"; \
|
|
else \
|
|
echo "[FIPS] FIPS config block already removed from local.conf"; \
|
|
fi
|
|
@echo ""
|
|
@echo "FIPS Ready DISABLED. Run 'make clean && make build' to rebuild."
|
|
|
|
## fips-status: Show whether FIPS Ready overrides are enabled
|
|
fips-status:
|
|
@if [ ! -f "$(BBLAYERS_CONF)" ]; then \
|
|
echo "FIPS: unknown (bblayers.conf not found)"; \
|
|
elif grep -q "meta-wolfssl-overrides" "$(BBLAYERS_CONF)"; then \
|
|
echo "FIPS: ENABLED"; \
|
|
if [ -f "$(FIPS_CONF)" ]; then \
|
|
echo "Config: conf/wolfssl-fips-ready.conf found"; \
|
|
else \
|
|
echo "Config: conf/wolfssl-fips-ready.conf MISSING"; \
|
|
fi; \
|
|
else \
|
|
echo "FIPS: DISABLED"; \
|
|
fi
|
|
|
|
## ip-dhcp: Set network to DHCP
|
|
ip-dhcp:
|
|
@$(TOPDIR)/set-network.sh dhcp
|
|
|
|
## ip-<address>: Set static IP (e.g. make ip-192.168.1.100)
|
|
## Optional: GW=192.168.1.1 PREFIX=24 DNS=8.8.8.8
|
|
ip-%:
|
|
@$(TOPDIR)/set-network.sh static $* $(GW) $(PREFIX) $(DNS)
|
|
|
|
## qemu: Build the FIPS Ready image for QEMU (aarch64)
|
|
qemu:
|
|
@if [ ! -f "$(BBLAYERS_CONF)" ]; then \
|
|
echo "Error: bblayers.conf not found. Run 'make configure' first."; \
|
|
exit 1; \
|
|
fi
|
|
@if ! grep -q "meta-wolfssl-overrides" "$(BBLAYERS_CONF)" 2>/dev/null; then \
|
|
echo "Error: FIPS not enabled. Run 'make fips-on' first."; \
|
|
exit 1; \
|
|
fi
|
|
@echo "Building $(QEMU_IMAGE) for $(QEMU_MACHINE)"
|
|
$(call bitbake-cmd, bitbake -R $(QEMU_CONF) $(QEMU_IMAGE))
|
|
|
|
## run-qemu: Launch the QEMU image (use QEMU_ARGS for extra options, e.g. QEMU_ARGS=nographic)
|
|
run-qemu:
|
|
@QBCONF=$$(ls -t $(QEMU_DEPLOY_DIR)/*.qemuboot.conf 2>/dev/null | head -1); \
|
|
if [ -z "$$QBCONF" ]; then \
|
|
echo "Error: No .qemuboot.conf found. Run 'make qemu' first."; \
|
|
exit 1; \
|
|
fi; \
|
|
echo "Using: $$QBCONF"
|
|
$(call bitbake-cmd, \
|
|
QBCONF=$$(ls -t $(QEMU_DEPLOY_DIR)/*.qemuboot.conf 2>/dev/null | head -1) && \
|
|
runqemu $$QBCONF nographic $(QEMU_ARGS))
|
|
|
|
## shell: Open an interactive shell with the bitbake environment sourced
|
|
shell:
|
|
@if [ ! -d "$(POKY_DIR)" ]; then \
|
|
echo "Error: poky not found. Run ./setup.sh first."; \
|
|
exit 1; \
|
|
fi
|
|
@echo "Entering bitbake environment shell. Type 'exit' to leave."
|
|
@bash --init-file <(echo "source $(POKY_DIR)/oe-init-build-env $(BUILD_DIR)")
|
|
|
|
## help: Show available targets
|
|
help:
|
|
@echo "Yocto Scarthgap RPi5 Build Targets"
|
|
@echo "==================================="
|
|
@echo ""
|
|
@echo " make configure - Initialize build dir and write config"
|
|
@echo " make build - Build image for $(MACHINE) (FIPS or base, auto-detected)"
|
|
@echo " make build-minimal - Build core-image-minimal for $(MACHINE)"
|
|
@echo " make clean - Clean active image sstate"
|
|
@echo " make distclean - Remove entire build directory"
|
|
@echo " make clean-project - Reset to clean state (keeps source + bundle)"
|
|
@echo " make image-info - Show output image location and sizes"
|
|
@echo " make move-image - Copy latest .wic image to current directory"
|
|
@echo " make generate-fips-conf BUNDLE=<path> - Generate FIPS config from .zip bundle"
|
|
@echo " make fips-on - Enable FIPS Ready overrides"
|
|
@echo " make fips-off - Disable FIPS overrides layer"
|
|
@echo " make fips-status - Show FIPS override status"
|
|
@echo " make qemu - Build FIPS Ready image for QEMU ($(QEMU_MACHINE))"
|
|
@echo " make run-qemu - Launch QEMU image (nographic/headless by default)"
|
|
@echo " make ip-dhcp - Set network to DHCP"
|
|
@echo " make ip-<address> - Set static IP (e.g. make ip-192.168.1.100)"
|
|
@echo " Optional: GW=x.x.x.x PREFIX=24 DNS=x.x.x.x"
|
|
@echo " make shell - Open a bitbake-ready shell"
|
|
@echo " make help - Show this help"
|
|
@echo ""
|
|
@echo "Run ./setup.sh first to clone layers and check host tools."
|