Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
7f9a7bf
modules/dasharo-ec: new module
macpijan Feb 27, 2026
03dbe2e
toolchain: add sdcc and xxd
macpijan Feb 27, 2026
32ec30a
Prepare nix based docker image to be bumped to v0.2.9 to include mini…
tlaurion Feb 27, 2026
ea9b4d8
modules/dasharo-ec: fix build system and address review feedback
filipleple Apr 8, 2026
ae03e59
modules/dasharo-ec: address review feedback and add nv4x_adl/ns50 sup…
filipleple Apr 14, 2026
36c1cd1
Makefile: Auto-clean board build directories when coreboot canary cha…
tlaurion Dec 4, 2025
8472574
MTL release: coreboot revision and updated configs
filipleple Apr 9, 2026
d18f5b7
modules/coreboot: split dasharo base revisions
filipleple Apr 10, 2026
784b6d8
MTL: switch from Notebook to Clevo
filipleple Apr 10, 2026
c7e3207
coreboot-dasahro: add https://github.com/Dasharo/coreboot/pull/847 on…
tlaurion Feb 17, 2026
a09d564
patches: rename coreboot-dasharo-unreleased -> coreboot-dasharo_v56-u…
filipleple Apr 10, 2026
e15591c
.circleci/: account for the dasharo refactor
filipleple Apr 10, 2026
4fc86d7
ADL: add updated nv4x_adl config
filipleple Apr 10, 2026
f742201
MTL: disable CMOS_ALTCENTURY
filipleple Apr 13, 2026
4027c1e
ADL: add ns50
filipleple Apr 14, 2026
332f0ee
modules/coreboot: remove redundant sed
filipleple Apr 14, 2026
22befc0
circleci: per-architecture workspace cache and docker v0.2.9
tlaurion Apr 15, 2026
a5e36ec
bin/fetch_source_archive.sh: log mirror fallbacks
tlaurion Apr 15, 2026
6163c0e
config/coreboot-talos-2: set LOCALVERSION to v0.7.0
tlaurion Apr 15, 2026
d03aa09
MSI/Nitropad boards: add common security settings
tlaurion Apr 15, 2026
3b0745d
Dasharo boards: update coreboot configs
tlaurion Apr 15, 2026
28569dc
modules/coreboot: add helper to save defconfig alongside original .co…
tlaurion Apr 15, 2026
b6e69a2
config/coreboot-nitropad-ns50: account for FSP header path change fro…
tlaurion Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
152 changes: 105 additions & 47 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ commands:
command: |
echo "Sourcing /devenv.sh since docker entrypoint doesn't do it as expected"
source /devenv.sh
rm -rf build/<< parameters.arch >>/<< parameters.target >>/* build/<< parameters.arch >>/log/*
rm -rf build/<< parameters.arch >>/log/*
#Pass AVAILABLE_MEM_GB=8 to respect CircleCI free tier RAM assignation, which otherwise randomly fails. See Makefile calculations.
# Without AVAILABLE_MEM_GB=8: CircleCI passes '-j36 --load-average=54'
# With AVAILABLE_MEM_GB=8: CircleCI passes '-j8 --load-average=12'
Expand Down Expand Up @@ -48,8 +48,8 @@ commands:
jobs:
prep_env:
docker:
# Docker image: tlaurion/heads-dev-env:v0.2.7
- image: tlaurion/heads-dev-env@sha256:5f890f3d1b6b57f9e567191695df003a2ee880f084f5dfe7a5633e3e8f937479
# Docker image: tlaurion/heads-dev-env:v0.2.9
- image: tlaurion/heads-dev-env@sha256:96f8f91c6464305c4a990d59f9ef93910c16c7fd0501a46b43b34a4600a368de
resource_class: large
working_directory: ~/heads
steps:
Expand Down Expand Up @@ -80,13 +80,15 @@ jobs:
# Cache for matching modules digest, validated to be exactly the same as in GitHub current commit.
# This cache was made on top of below caches, if previously existing.
# If no module definition changed, we reuse this one
- nix-docker-heads-modules-and-patches-{{ checksum "./tmpDir/all_modules_and_patches.sha256sums" }}{{ .Environment.CACHE_VERSION }}

# x86 caches
- nix-docker-heads-modules-x86-{{ checksum "./tmpDir/all_modules_and_patches.sha256sums" }}{{ .Environment.CACHE_VERSION }}
- nix-docker-heads-coreboot-musl-cross-make-x86-{{ checksum "./tmpDir/coreboot_musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
- nix-docker-heads-musl-cross-make-x86-{{ checksum "./tmpDir/musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
# Cache for coreboot module (and patches) and musl-cross-make digests (coreboot: triannual release)
- nix-docker-heads-coreboot-musl-cross-make-{{ checksum "./tmpDir/coreboot_musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}

# Cache for musl-cross-make module digest (rarely modified).
- nix-docker-heads-musl-cross-make-{{ checksum "./tmpDir/musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
# ppc64 caches
- nix-docker-heads-modules-ppc64-{{ checksum "./tmpDir/all_modules_and_patches.sha256sums" }}{{ .Environment.CACHE_VERSION }}
- nix-docker-heads-coreboot-musl-cross-make-ppc64-{{ checksum "./tmpDir/coreboot_musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
- nix-docker-heads-musl-cross-make-ppc64-{{ checksum "./tmpDir/musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
- run:
name: Download and neuter xx20 ME (keep generated GBE and extracted IFD in tree)
command: |
Expand Down Expand Up @@ -124,8 +126,8 @@ jobs:

build_and_persist:
docker:
# Docker image: tlaurion/heads-dev-env:v0.2.7
- image: tlaurion/heads-dev-env@sha256:5f890f3d1b6b57f9e567191695df003a2ee880f084f5dfe7a5633e3e8f937479
# Docker image: tlaurion/heads-dev-env:v0.2.9
- image: tlaurion/heads-dev-env@sha256:96f8f91c6464305c4a990d59f9ef93910c16c7fd0501a46b43b34a4600a368de
resource_class: large
working_directory: ~/heads
parameters:
Expand Down Expand Up @@ -153,8 +155,8 @@ jobs:

build:
docker:
# Docker image: tlaurion/heads-dev-env:v0.2.7
- image: tlaurion/heads-dev-env@sha256:5f890f3d1b6b57f9e567191695df003a2ee880f084f5dfe7a5633e3e8f937479
# Docker image: tlaurion/heads-dev-env:v0.2.9
- image: tlaurion/heads-dev-env@sha256:96f8f91c6464305c4a990d59f9ef93910c16c7fd0501a46b43b34a4600a368de
resource_class: large
working_directory: ~/heads
parameters:
Expand All @@ -173,10 +175,10 @@ jobs:
target: <<parameters.target>>
subcommand: <<parameters.subcommand>>

save_cache:
save_cache_x86:
docker:
# Docker image: tlaurion/heads-dev-env:v0.2.7
- image: tlaurion/heads-dev-env@sha256:5f890f3d1b6b57f9e567191695df003a2ee880f084f5dfe7a5633e3e8f937479
# Docker image: tlaurion/heads-dev-env:v0.2.9
- image: tlaurion/heads-dev-env@sha256:96f8f91c6464305c4a990d59f9ef93910c16c7fd0501a46b43b34a4600a368de
resource_class: large
working_directory: ~/heads
steps:
Expand All @@ -185,35 +187,72 @@ jobs:
- save_cache:
# Generate cache for the same musl-cross-make module definition if hash is not previously existing
# CircleCI removed their wildcard support, so we have to list precise versions to cache in directory names
key: nix-docker-heads-musl-cross-make-{{ checksum "./tmpDir/musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
key: nix-docker-heads-musl-cross-make-x86-{{ checksum "./tmpDir/musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
paths:
- build/ppc64/musl-cross-make-fd6be58297ee21fcba89216ccd0d4aca1e3f1c5c
- build/x86/musl-cross-make-fd6be58297ee21fcba89216ccd0d4aca1e3f1c5c
- crossgcc
- packages
- crossgcc/x86
- packages/x86
- save_cache:
# Generate cache for the same coreboot and musl-cross-make modules definition if hash is not previously existing
# CircleCI removed their wildcard support, so we have to list precise versions to cache in directory names
key: nix-docker-heads-coreboot-musl-cross-make-{{ checksum "./tmpDir/coreboot_musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
key: nix-docker-heads-coreboot-musl-cross-make-x86-{{ checksum "./tmpDir/coreboot_musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
paths:
- build/ppc64/coreboot-talos_2
- build/ppc64/musl-cross-make-fd6be58297ee21fcba89216ccd0d4aca1e3f1c5c
- build/x86/coreboot-4.11
- build/x86/coreboot-24.02.01
- build/x86/coreboot-25.09
- build/x86/coreboot-dasharo
- build/x86/coreboot-dasharo_v56
- build/x86/coreboot-dasharo_nv4x
- build/x86/coreboot-dasharo_msi_z790
- build/x86/coreboot-dasharo_msi_z690
- build/x86/coreboot-purism
- build/x86/musl-cross-make-fd6be58297ee21fcba89216ccd0d4aca1e3f1c5c
- crossgcc
- packages
- crossgcc/x86
- packages/x86
- save_cache:
# Generate cache for the exact same modules definitions if hash is not previously existing
key: nix-docker-heads-modules-x86-{{ checksum "./tmpDir/all_modules_and_patches.sha256sums" }}{{ .Environment.CACHE_VERSION }}
paths:
- build/x86
- install/x86
- crossgcc/x86
- packages/x86



save_cache_ppc64:
docker:
# Docker image: tlaurion/heads-dev-env:v0.2.9
- image: tlaurion/heads-dev-env@sha256:96f8f91c6464305c4a990d59f9ef93910c16c7fd0501a46b43b34a4600a368de
resource_class: large
working_directory: ~/heads
steps:
- attach_workspace:
at: ~/heads
- save_cache:
# Generate cache for the same musl-cross-make module definition if hash is not previously existing
# CircleCI removed their wildcard support, so we have to list precise versions to cache in directory names
key: nix-docker-heads-musl-cross-make-ppc64-{{ checksum "./tmpDir/musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
paths:
- build/ppc64/musl-cross-make-fd6be58297ee21fcba89216ccd0d4aca1e3f1c5c
- crossgcc/ppc64
- packages/ppc64
- save_cache:
# Generate cache for the same coreboot and musl-cross-make modules definition if hash is not previously existing
# CircleCI removed their wildcard support, so we have to list precise versions to cache in directory names
key: nix-docker-heads-coreboot-musl-cross-make-ppc64-{{ checksum "./tmpDir/coreboot_musl-cross-make.sha256sums" }}{{ .Environment.CACHE_VERSION }}
paths:
- build/ppc64/coreboot-talos_2
- build/ppc64/musl-cross-make-fd6be58297ee21fcba89216ccd0d4aca1e3f1c5c
- crossgcc/ppc64
- packages/ppc64
- save_cache:
# Generate cache for the exact same modules definitions if hash is not previously existing
key: nix-docker-heads-modules-and-patches-{{ checksum "./tmpDir/all_modules_and_patches.sha256sums" }}{{ .Environment.CACHE_VERSION }}
key: nix-docker-heads-modules-ppc64-{{ checksum "./tmpDir/all_modules_and_patches.sha256sums" }}{{ .Environment.CACHE_VERSION }}
paths:
- build
- crossgcc
- install
- packages
- build/ppc64
- install/ppc64
- crossgcc/ppc64
- packages/ppc64

workflows:
version: 2
Expand Down Expand Up @@ -250,13 +289,13 @@ workflows:
requires:
- x86-musl-cross-make

# coreboot purism: based on coreboot 24.02.01, reuse dasharo 24.02.01 crossgcc
# coreboot purism: builds 24.02.01 toolchain, all librem boards share it
- build_and_persist:
name: librem_14
target: librem_14
subcommand: ""
requires:
- novacustom-nv4x_adl
- x86-musl-cross-make

# t480 is based on 25.09 coreboot release, not sharing any buildstack from now, depend on muscl-cross cache
- build_and_persist:
Expand All @@ -283,20 +322,37 @@ workflows:
requires:
- x86-musl-cross-make

# dasharo_msi
# dasharo_msi: builds its own toolchain, msi_z690a_ddr5 depends on it
- build_and_persist:
name: UNTESTED_msi_z690a_ddr4
target: UNTESTED_msi_z690a_ddr4
subcommand: ""
requires:
- x86-musl-cross-make

# Cache one workspace per architecture
# Make sure workspace caches are chainloaded and the last in chain for an arch is saved
- save_cache:
# Dasharo forks: each fork builds its own toolchain (FSP header incompatibilities)
# - novacustom-nv4x_adl: builds dasharo_nv4x toolchain, nitropad-ns50 reuses it
# - novacustom-v560tu: builds dasharo_v56 toolchain, v540tu reuses it
# - UNTESTED_msi_z690a_ddr4: builds dasharo_msi_z690 toolchain, msi_z690a_ddr5 reuses it
# - UNTESTED_msi_z790p_ddr4: builds dasharo_msi_z790 toolchain, msi_z790p_ddr5 reuses it

# x86: combines x86 workspaces and saves x86 cache
# Workspaces combined: x86-musl-cross-make, novacustom-nv4x_adl, librem_14,
# EOL_t480-hotp-maximized, EOL_librem_l1um, UNTESTED_msi_z690a_ddr4
- save_cache_x86:
requires:
- UNTESTED_talos-2
- x86-musl-cross-make
- novacustom-nv4x_adl
- librem_14
- EOL_t480-hotp-maximized
- EOL_librem_l1um
- UNTESTED_msi_z690a_ddr4

# ppc64: combines ppc64 workspaces and saves ppc64 cache
# Workspaces combined: ppc64-musl-cross-make, UNTESTED_talos-2
- save_cache_ppc64:
requires:
- UNTESTED_talos-2

# Those onboarding new boards should add their entries below.
# coreboot 25.09 boards
Expand Down Expand Up @@ -482,8 +538,7 @@ workflows:
requires:
- EOL_t480-hotp-maximized

# coreboot purism
# librem boards
# librem boards: share purism 24.02.01 toolchain with librem_14
- build:
name: EOL_librem_13v2
target: EOL_librem_13v2
Expand Down Expand Up @@ -562,47 +617,50 @@ workflows:
requires:
- EOL_t480-hotp-maximized

# dasharo release, share 24.02.01 utils/crossgcc
# Dasharo nv4x: shares dasharo_nv4x toolchain with novacustom-nv4x_adl
- build:
name: UNTESTED_nitropad-ns50
target: UNTESTED_nitropad-ns50
subcommand: ""
requires:
- novacustom-nv4x_adl

#NovaCustom v56 boards are based on coreboot 24.02.01 fork, so depend on nv4x_adl
# NovaCustom v56: builds dasharo_v56 toolchain
- build:
name: novacustom-v560tu
target: novacustom-v560tu
subcommand: ""
requires:
- novacustom-nv4x_adl
- x86-musl-cross-make

# NovaCustom v56: shares dasharo_v56 toolchain with novacustom-v560tu
- build:
name: novacustom-v540tu
target: novacustom-v540tu
subcommand: ""
requires:
- novacustom-nv4x_adl
- novacustom-v560tu

# dasharo_msi
# Dasharo msi_z690: shares dasharo_msi_z690 toolchain with UNTESTED_msi_z690a_ddr4
- build:
name: UNTESTED_msi_z690a_ddr5
target: UNTESTED_msi_z690a_ddr5
subcommand: ""
requires:
- UNTESTED_msi_z690a_ddr4

# Dasharo msi_z790: builds dasharo_msi_z790 toolchain
- build:
name: UNTESTED_msi_z790p_ddr4
target: UNTESTED_msi_z790p_ddr4
subcommand: ""
requires:
- UNTESTED_msi_z690a_ddr4
- x86-musl-cross-make

# Dasharo msi_z790: shares dasharo_msi_z790 toolchain with UNTESTED_msi_z790p_ddr4
- build:
name: msi_z790p_ddr5
target: msi_z790p_ddr5
subcommand: ""
requires:
- UNTESTED_msi_z690a_ddr4
- UNTESTED_msi_z790p_ddr4
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,10 @@ define define_module =
git -C "$(build)/$($1_base_dir)" submodule sync && \
echo "INFO: Updating submodules (init and checkout)" && \
git -C "$(build)/$($1_base_dir)" submodule update --init --checkout && \
echo "INFO: Cleaning board-specific build directories to prevent stale artifacts" && \
rm -rf "$(build)/$(BOARD)" "$(build)/$($1_base_dir)/$(BOARD)" && \
echo "INFO: Recreating board directories" && \
mkdir -p "$(build)/$(BOARD)" "$(build)/$($1_base_dir)/$(BOARD)" && \
Comment on lines +495 to +498
Copy link

Copilot AI Jan 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Makefile now removes and recreates board directories every time submodules are updated. This aggressive cleaning approach could cause issues if other build artifacts or files exist in these directories that shouldn't be removed. The cleaning happens unconditionally even when it may not be necessary (e.g., when submodules haven't actually changed). Consider making this cleaning conditional or documenting why this aggressive approach is needed.

Copilot uses AI. Check for mistakes.
echo "INFO: Updating .canary file with new repo info" && \
echo -n '$($1_repo)|$($1_commit_hash)' > "$$@" ; \
fi
Expand Down
10 changes: 9 additions & 1 deletion bin/fetch_source_archive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ rm -f "$FILE" "$TMP_FILE"
# Try the primary source
download "$URL" && exit 0

# Log mirror fallback for developer awareness
MIRROR_LOG="${MIRROR_LOG:-build/mirror_fallbacks.log}"
mkdir -p "$(dirname "$MIRROR_LOG")"
echo "$(date -Iseconds) MIRROR_FALLBACK primary=$URL" >>"$MIRROR_LOG"

# Shuffle the mirrors so we try each equally
readarray -t BACKUP_MIRRORS < <(shuf -e "${BACKUP_MIRRORS[@]}")

Expand All @@ -86,7 +91,10 @@ archive="$(basename "$FILE")"
echo "Try mirrors for $archive" >&2

for mirror in "${BACKUP_MIRRORS[@]}"; do
download "$mirror$archive" && exit 0
if download "$mirror$archive"; then
echo "$(date -Iseconds) MIRROR_USED mirror=$mirror$archive" >>"$MIRROR_LOG"
exit 0
fi
done

# All mirrors failed
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# MSI PRO Z690-A DDR4 board configuration

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=dasharo_msi
export CONFIG_COREBOOT_VERSION=dasharo_msi_z690
export CONFIG_LINUX_VERSION=6.1.8

CONFIG_COREBOOT_CONFIG=config/coreboot-msi_z690a_ddr4.config
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# MSI PRO Z690-A (DDR5) board configuration

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=dasharo_msi
export CONFIG_COREBOOT_VERSION=dasharo_msi_z690
export CONFIG_LINUX_VERSION=6.1.8

CONFIG_COREBOOT_CONFIG=config/coreboot-msi_z690a_ddr5.config
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# MSI PRO Z790-P DDR4 board configuration

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=dasharo_msi
export CONFIG_COREBOOT_VERSION=dasharo_msi_z790
export CONFIG_LINUX_VERSION=6.1.8

CONFIG_COREBOOT_CONFIG=config/coreboot-msi_z790p_ddr4.config
Expand Down
3 changes: 2 additions & 1 deletion boards/UNTESTED_nitropad-ns50/UNTESTED_nitropad-ns50.config
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
# Dissassembly and Recovery: https://docs.dasharo.com/unified/novacustom/recovery/#ns5x7x-12th-gen

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=dasharo
export CONFIG_COREBOOT_VERSION=dasharo_nv4x
CONFIG_DASHARO_EC=y
export CONFIG_LINUX_VERSION=6.1.8

CONFIG_COREBOOT_CONFIG=config/coreboot-nitropad-ns50.config
Expand Down
2 changes: 1 addition & 1 deletion boards/msi_z790p_ddr5/msi_z790p_ddr5.config
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# MSI PRO Z790-P (DDR5) board configuration

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=dasharo_msi
export CONFIG_COREBOOT_VERSION=dasharo_msi_z790
export CONFIG_LINUX_VERSION=6.1.8

CONFIG_COREBOOT_CONFIG=config/coreboot-msi_z790p_ddr5.config
Expand Down
3 changes: 2 additions & 1 deletion boards/novacustom-nv4x_adl/novacustom-nv4x_adl.config
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
# Dissassembly and Recovery: https://docs.dasharo.com/unified/novacustom/recovery/#12th-gen

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=dasharo
export CONFIG_COREBOOT_VERSION=dasharo_nv4x
export CONFIG_DASHARO_EC=y
export CONFIG_LINUX_VERSION=6.1.8

CONFIG_COREBOOT_CONFIG=config/coreboot-novacustom-nv4x_adl.config
Expand Down
3 changes: 2 additions & 1 deletion boards/novacustom-v540tu/novacustom-v540tu.config
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
# ME/CSME for s0ix to work (unsupported by QubesOS when writing those lines) or use Hibernate (Not supported by QubesOS either)

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=dasharo
export CONFIG_COREBOOT_VERSION=dasharo_v56
export CONFIG_DASHARO_EC=y
export CONFIG_LINUX_VERSION=6.1.8

CONFIG_COREBOOT_CONFIG=config/coreboot-novacustom-v540tu.config
Expand Down
Loading