Skip to content

Commit a93f80c

Browse files
authored
Release 1.0.6 (#39)
* Fix runs-on runner for arm64 * Create Makefile.help file and recipe * Fix help indentation * Express clean cascades as dependencies * Rename safe remove helpers * Fix clean-toolchain target removal path * Fold log/output cleanup into clean-toolchain * Refine help messaging for optional targets * Update help output for toolchain recipes * Document additional toolchain options * Show runtime host default in help * Fix musl header cleanup repo root * Move toolchain check target to Makefile.check * Fix shellcheck quoting in toolchain check * Fix toolchain check for target bin layout * Uniform make check output * Clean downloaded signatures in component clean targets * Detect toolchain target during checks * Silence shellcheck for target detection * Fix target detection word splitting --------- Co-authored-by: strombetta <12155693+strombetta@users.noreply.github.com>
1 parent d07d2d7 commit a93f80c

8 files changed

Lines changed: 495 additions & 35 deletions

File tree

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
triple: x86_64-bugleos-linux-musl
2020
label: x86_64
2121
- arch: aarch64
22-
runs-on: arm64
22+
runs-on: ubuntu-24.04-arm
2323
target: aarch64
2424
triple: aarch64-bugleos-linux-musl
2525
label: aarch64

Makefile

Lines changed: 144 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,24 @@
2121

2222
include config/paths.mk
2323
include config/versions.mk
24+
include make/common.mk
2425

25-
MAKEFLAGS += --no-print-directory
26+
ROOT_DIR := $(abspath $(ROOT_DIR))
27+
28+
include Makefile.help
2629

27-
ARCHES := aarch64 x86_64
28-
load_target = $(strip $(shell awk -F':=' '/^TARGET/ {gsub(/[ \t]/,"",$$2);print $$2}' config/arch/$(1).mk))
30+
MAKEFLAGS += --no-print-directory
2931

30-
.PHONY: $(ARCHES) toolchain binutils-stage1 linux-headers gcc-stage1 musl binutils-stage2 gcc-stage2 verify-toolchain clean distclean check help sanity
32+
TRIPLET ?= $(TARGET)
3133

32-
help:
33-
@echo "BugleOS Cross-compiling Toolchain Builder"
34-
@echo
35-
@echo "Targets:"
36-
@echo " make help Show this help message"
37-
@echo " make toolchain Build BugleOS cross-compiling toolchain for host architecture"
38-
@echo " make x86_64 Build BugleOS cross-compiling toolchain for x86_64 architecture"
39-
@echo " make aarch64 Build BugleOS cross-compiling toolchain for aarch64 architecture"
40-
@echo " make clean Remove builds and logs"
41-
@echo " make distclean Full cleanup"
42-
@echo " make check TARGET=<triplet> Sanity-check an existing toolchain"
34+
BINUTILS_TOOLS := addr2line ar as c++filt elfedit gprof ld ld.bfd ld.gold nm objcopy objdump ranlib readelf size strings strip
35+
GCC_TOOLS := gcc g++ cpp gcc-ar gcc-nm gcc-ranlib gcov gcov-dump gcov-tool
36+
MUSL_LIBS := libc libm libpthread librt libdl libutil libxnet libresolv libcrypt
4337

44-
$(ARCHES):
45-
@$(MAKE) TARGET=$(call load_target,$@) toolchain
38+
.PHONY: toolchain binutils-stage1 linux-headers gcc-stage1 musl binutils-stage2 gcc-stage2 verify-toolchain \
39+
clean-toolchain clean-binutils clean-gcc clean-musl clean-kheaders \
40+
clean-binutils-stage2 clean-gcc-stage2 \
41+
clean check sanity
4642

4743
guard-%:
4844
@test -n "$($*)" || { echo "ERROR: $* is not set"; exit 1; }
@@ -72,13 +68,136 @@ verify-toolchain: guard-TARGET
7268

7369
toolchain: binutils-stage1 linux-headers gcc-stage1 musl binutils-stage2 gcc-stage2
7470

75-
clean:
76-
@rm -rf $(BUILDS_DIR) $(LOGS_DIR)
77-
78-
distclean: clean
79-
@rm -rf $(OUT_DIR)
80-
81-
check: verify-toolchain
71+
clean: clean-toolchain ## Remove toolchain output for the current triplet (plus logs/output cleanup)
72+
73+
clean-toolchain: clean-binutils clean-gcc clean-musl clean-kheaders clean-binutils-stage2 clean-gcc-stage2 ## Remove toolchain output for the current triplet (plus logs/output cleanup)
74+
$(call do_clean,toolchain)
75+
$(call do_safe_remove,$(LOGS_DIR))
76+
$(call do_safe_remove,$(OUT_DIR))
77+
$(call do_safe_remove,$(TOOLCHAIN_TARGET_DIR))
78+
$(call do_safe_remove,$(STAGE1_TOOLCHAIN_ROOT))
79+
80+
clean-binutils: clean-gcc ## Remove binutils build directories
81+
$(call do_clean,binutils)
82+
$(call do_safe_remove,$(BINUTILS1_BUILD_DIR))
83+
$(call do_safe_remove,$(BINUTILS2_BUILD_DIR))
84+
$(call do_safe_remove,$(BINUTILS_SRC_DIR))
85+
$(call do_safe_remove,$(BINUTILS_STAMP))
86+
$(call do_safe_remove,$(BINUTILS_ARCHIVE))
87+
$(call do_safe_remove,$(DOWNLOADS_DIR)/binutils-$(BINUTILS_VERSION).tar.xz.sig)
88+
$(call do_safe_remove,$(DOWNLOADS_DIR)/gnu-keyring.gpg)
89+
$(call do_safe_remove_glob,$(LOGS_DIR),binutils-stage1-*.log)
90+
$(call do_safe_remove_glob,$(LOGS_DIR),binutils-stage2-*.log)
91+
$(foreach tool,$(BINUTILS_TOOLS),$(call do_safe_remove,$(STAGE1_TOOLCHAIN_ROOT)/bin/$(TARGET)-$(tool)))
92+
$(foreach tool,$(BINUTILS_TOOLS),$(call do_safe_remove,$(TOOLCHAIN_ROOT)/bin/$(TARGET)-$(tool)))
93+
$(call do_safe_remove_glob,$(STAGE1_TOOLCHAIN_ROOT)/lib,libbfd.*)
94+
$(call do_safe_remove_glob,$(STAGE1_TOOLCHAIN_ROOT)/lib,libopcodes.*)
95+
$(call do_safe_remove_glob,$(STAGE1_TOOLCHAIN_ROOT)/lib,libiberty.*)
96+
$(call do_safe_remove_glob,$(STAGE1_TOOLCHAIN_ROOT)/lib,libctf.*)
97+
$(call do_safe_remove_glob,$(STAGE1_TOOLCHAIN_ROOT)/lib,libctf-nobfd.*)
98+
$(call do_safe_remove_glob,$(STAGE1_TOOLCHAIN_ROOT)/lib,libgprofng.*)
99+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libbfd.*)
100+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libopcodes.*)
101+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libiberty.*)
102+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libctf.*)
103+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libctf-nobfd.*)
104+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libgprofng.*)
105+
106+
clean-binutils-stage2:
107+
$(call do_clean,binutils-stage2)
108+
$(call do_safe_remove,$(BINUTILS2_BUILD_DIR))
109+
$(call do_safe_remove_glob,$(LOGS_DIR),binutils-stage2-*.log)
110+
$(foreach tool,$(BINUTILS_TOOLS),$(call do_safe_remove,$(TOOLCHAIN_ROOT)/bin/$(TARGET)-$(tool)))
111+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libbfd.*)
112+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libopcodes.*)
113+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libiberty.*)
114+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libctf.*)
115+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libctf-nobfd.*)
116+
$(call do_safe_remove_glob,$(TOOLCHAIN_ROOT)/lib,libgprofng.*)
117+
118+
clean-gcc: clean-musl ## Remove GCC build directory
119+
$(call do_clean,gcc)
120+
$(call do_safe_remove,$(GCC_BUILD_DIR))
121+
$(call do_safe_remove,$(GCC_SRC_DIR))
122+
$(call do_safe_remove,$(GCC_STAMP))
123+
$(call do_safe_remove,$(GCC_ARCHIVE))
124+
$(call do_safe_remove,$(DOWNLOADS_DIR)/gcc-$(GCC_VERSION).tar.xz.sig)
125+
$(call do_safe_remove,$(DOWNLOADS_DIR)/gnu-keyring.gpg)
126+
$(call do_safe_remove_glob,$(LOGS_DIR),gcc-stage1-*.log)
127+
$(call do_safe_remove_glob,$(LOGS_DIR),gcc-stage2-*.log)
128+
$(foreach tool,$(GCC_TOOLS),$(call do_safe_remove,$(STAGE1_TOOLCHAIN_ROOT)/bin/$(TARGET)-$(tool)))
129+
$(foreach tool,$(GCC_TOOLS),$(call do_safe_remove,$(TOOLCHAIN_ROOT)/bin/$(TARGET)-$(tool)))
130+
$(call do_safe_remove,$(STAGE1_TOOLCHAIN_ROOT)/lib/gcc/$(TARGET))
131+
$(call do_safe_remove,$(TOOLCHAIN_ROOT)/lib/gcc/$(TARGET))
132+
$(call do_safe_remove,$(STAGE1_TOOLCHAIN_ROOT)/libexec/gcc/$(TARGET))
133+
$(call do_safe_remove,$(TOOLCHAIN_ROOT)/libexec/gcc/$(TARGET))
134+
$(call do_safe_remove,$(STAGE1_TOOLCHAIN_ROOT)/$(TARGET)/lib)
135+
$(call do_safe_remove,$(STAGE1_TOOLCHAIN_ROOT)/$(TARGET)/lib64)
136+
$(call do_safe_remove,$(STAGE1_TOOLCHAIN_ROOT)/$(TARGET)/include)
137+
$(call do_safe_remove,$(TOOLCHAIN_ROOT)/$(TARGET)/lib)
138+
$(call do_safe_remove,$(TOOLCHAIN_ROOT)/$(TARGET)/lib64)
139+
$(call do_safe_remove,$(TOOLCHAIN_ROOT)/$(TARGET)/include)
140+
141+
clean-gcc-stage2:
142+
$(call do_clean,gcc-stage2)
143+
$(call do_safe_remove_glob,$(LOGS_DIR),gcc-stage2-*.log)
144+
$(foreach tool,$(GCC_TOOLS),$(call do_safe_remove,$(TOOLCHAIN_ROOT)/bin/$(TARGET)-$(tool)))
145+
$(call do_safe_remove,$(TOOLCHAIN_ROOT)/lib/gcc/$(TARGET))
146+
$(call do_safe_remove,$(TOOLCHAIN_ROOT)/libexec/gcc/$(TARGET))
147+
$(call do_safe_remove,$(TOOLCHAIN_ROOT)/$(TARGET)/lib)
148+
$(call do_safe_remove,$(TOOLCHAIN_ROOT)/$(TARGET)/lib64)
149+
$(call do_safe_remove,$(TOOLCHAIN_ROOT)/$(TARGET)/include)
150+
151+
clean-musl: clean-binutils-stage2 clean-gcc-stage2 ## Remove musl build directory
152+
$(call do_clean,musl)
153+
$(call do_safe_remove,$(MUSL_BUILD_DIR))
154+
$(call do_safe_remove,$(MUSL_SRC_DIR))
155+
$(call do_safe_remove,$(MUSL_STAMP))
156+
$(call do_safe_remove,$(MUSL_ARCHIVE))
157+
$(call do_safe_remove,$(DOWNLOADS_DIR)/musl-$(MUSL_VERSION).tar.gz.asc)
158+
$(call do_safe_remove,$(DOWNLOADS_DIR)/musl.pub)
159+
$(call do_safe_remove_glob,$(LOGS_DIR),musl-*.log)
160+
$(foreach lib,$(MUSL_LIBS),$(call do_safe_remove_glob,$(SYSROOT)/lib,$(lib).*))
161+
$(foreach lib,$(MUSL_LIBS),$(call do_safe_remove_glob,$(SYSROOT)/usr/lib,$(lib).*))
162+
$(call do_safe_remove,$(SYSROOT)/lib/$(MUSL_LDSO))
163+
$(call do_safe_remove,$(SYSROOT)/usr/lib/$(MUSL_LDSO))
164+
$(call do_safe_remove,$(SYSROOT)/lib/crt1.o)
165+
$(call do_safe_remove,$(SYSROOT)/lib/crti.o)
166+
$(call do_safe_remove,$(SYSROOT)/lib/crtn.o)
167+
$(call do_safe_remove,$(SYSROOT)/usr/lib/crt1.o)
168+
$(call do_safe_remove,$(SYSROOT)/usr/lib/crti.o)
169+
$(call do_safe_remove,$(SYSROOT)/usr/lib/crtn.o)
170+
@include_dir="$(SYSROOT)/usr/include"; \
171+
abs="$(abspath $(SYSROOT)/usr/include)"; \
172+
repo="$(ROOT_DIR)"; \
173+
if [ -z "$$include_dir" ] || [ -z "$$abs" ] || [ "$$abs" = "/" ] || [ "$$abs" = "$$repo" ]; then \
174+
echo "ERROR: Refusing to remove unsafe path '$$abs'."; \
175+
exit 1; \
176+
fi; \
177+
case "$$abs" in "$$repo"|"$$repo"/*) ;; \
178+
*) echo "ERROR: Refusing to remove $$abs (outside $$repo)."; exit 1;; \
179+
esac; \
180+
if [ -d "$$abs" ]; then \
181+
echo " removing musl headers under $$abs (preserving linux/asm/asm-generic)"; \
182+
find "$$abs" -mindepth 1 -maxdepth 1 \
183+
! -name linux ! -name asm ! -name asm-generic \
184+
-exec rm -rf -- {} +; \
185+
fi
186+
187+
clean-kheaders: clean-gcc ## Remove Linux UAPI headers build directory
188+
$(call do_clean,linux-headers)
189+
$(call do_safe_remove,$(LINUX_HEADERS_BUILD_DIR))
190+
$(call do_safe_remove,$(LINUX_SRC_DIR))
191+
$(call do_safe_remove,$(LINUX_STAMP))
192+
$(call do_safe_remove,$(LINUX_ARCHIVE))
193+
$(call do_safe_remove,$(DOWNLOADS_DIR)/linux-$(LINUX_VERSION).tar.sign)
194+
$(call do_safe_remove_glob,$(LOGS_DIR),linux-headers-*.log)
195+
$(call do_safe_remove,$(SYSROOT)/usr/include/linux)
196+
$(call do_safe_remove,$(SYSROOT)/usr/include/asm)
197+
$(call do_safe_remove,$(SYSROOT)/usr/include/asm-generic)
198+
199+
check: guard-TARGET
200+
@$(MAKE) -f Makefile.check TARGET=$(TARGET) check
82201

83202
sanity:
84-
@true
203+
@true

Makefile.check

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#
2+
# Copyright (c) 2025 Sebastiano Trombetta
3+
#
4+
# Permission is hereby granted, free of charge, to any person obtaining a copy
5+
# of this software and associated documentation files (the "Software"), to deal
6+
# in the Software without restriction, including without limitation the rights
7+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8+
# copies of the Software, and to permit persons to whom the Software is
9+
# furnished to do so, subject to the following conditions:
10+
#
11+
# The above copyright notice and this permission notice shall be included in all
12+
# copies or substantial portions of the Software.
13+
#
14+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20+
# SOFTWARE.
21+
22+
include config/paths.mk
23+
include make/common.mk
24+
25+
ROOT_DIR := $(abspath $(ROOT_DIR))
26+
27+
MAKEFLAGS += --no-print-directory
28+
29+
.PHONY: check
30+
31+
guard-%:
32+
@test -n "$($*)" || { echo "ERROR: $* is not set"; exit 1; }
33+
34+
check: guard-TARGET
35+
@ROOT_DIR=$(ROOT_DIR) TARGET=$(TARGET) TOOLCHAIN_ROOT=$(TOOLCHAIN_ROOT) TOOLCHAIN_TARGET_DIR=$(TOOLCHAIN_TARGET_DIR) \
36+
SYSROOT=$(SYSROOT) PREFIX=$(TOOLCHAIN_ROOT) \
37+
PATH="$(TOOLCHAIN_ROOT)/bin:$(TOOLCHAIN_TARGET_DIR)/bin:$$PATH" \
38+
$(ROOT_DIR)/scripts/check-toolchain.sh

Makefile.help

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Help target and documentation entries.
2+
3+
## make help Show this help message
4+
## make toolchain Build BugleOS cross-compiling toolchain for TARGET (defaults to host when supported)
5+
## make clean Remove toolchain output (includes logs/output cleanup)
6+
## make clean-toolchain Remove toolchain output (includes logs/output cleanup)
7+
## make clean-binutils Remove binutils builds, logs, sources, and installed outputs
8+
## make clean-gcc Remove GCC builds, logs, sources, and installed outputs
9+
## make clean-musl Remove musl builds, logs, sources, and installed outputs
10+
## make clean-kheaders Remove Linux UAPI headers builds, logs, sources, and installed outputs
11+
## make check TARGET=<triplet> Sanity-check an existing toolchain
12+
13+
HELP_COL_WIDTH ?= 24
14+
HELP_FILES = $(strip $(firstword $(MAKEFILE_LIST)) $(MAKEFILE_LIST) $(MAKEFILES) $(INCLUDES) $(MK_FILES))
15+
HELP_FILES_EXISTING = $(strip $(foreach f,$(HELP_FILES),$(wildcard $(f))))
16+
HELP_HOST_TARGET := $(if $(HOST_TARGET),$(HOST_TARGET),unknown)
17+
HELP_TARGET := $(firstword $(strip \
18+
$(if $(filter command\ line environment environment\ override,$(origin TARGET)),$(TARGET)) \
19+
$(if $(filter command\ line environment environment\ override,$(origin RECIPE)),$(RECIPE)) \
20+
))
21+
22+
.PHONY: help
23+
ifneq ($(HELP_TARGET),)
24+
help:
25+
@case "$(HELP_TARGET)" in \
26+
toolchain) \
27+
echo "Usage: make toolchain [options]"; \
28+
echo " Build cross-compiling toolchain."; \
29+
echo; \
30+
echo "Options:"; \
31+
echo " TARGET=<triplet> Specify for what architecture to build (default: $(HELP_HOST_TARGET))."; \
32+
echo " WITH_LINUX_HEADERS=1 Install Linux UAPI headers into SYSROOT (default: 0)."; \
33+
echo " JOBS=<n> Parallel build jobs (default: auto-detected)."; \
34+
echo " TOOLCHAIN_ROOT=<path> Override toolchain output root (default: out/toolchain)."; \
35+
;; \
36+
help) \
37+
echo "Usage: make help [options]"; \
38+
echo " Show this help message."; \
39+
echo; \
40+
echo "Options:"; \
41+
echo " TARGET=<target> Show further information about a target."; \
42+
;; \
43+
*) \
44+
echo "Usage: make $(HELP_TARGET) [options]"; \
45+
echo " No help available for '$(HELP_TARGET)'."; \
46+
;; \
47+
esac
48+
else
49+
help:
50+
@echo "BugleOS Cross-compiling Toolchain Builder"
51+
@echo
52+
@echo "Available targets:"
53+
@echo " make toolchain Build cross-compiling toolchain."
54+
@echo " make clean Remove toolchain output."
55+
@echo " make check Check an existing toolchain."
56+
@echo " make help Show this help message."
57+
@echo
58+
@echo "See 'make help TARGET=<target>' for details."
59+
endif

README.md

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,28 @@ scripts/fetch-sources.sh
2929
scripts/verify-checksums.sh
3030
```
3131

32-
Build a toolchain for a specific architecture:
32+
Build a toolchain for a specific architecture by overriding `TARGET` on the command line. The umbrella target `toolchain` builds the current `TARGET` from `config/paths.mk` or an override passed on the command line. By default, `TARGET` matches the host architecture when it is supported:
3333

3434
```
35-
make x86_64
36-
make aarch64
35+
make TARGET=aarch64-bugleos-linux-musl toolchain
3736
```
3837

39-
The umbrella target `toolchain` builds the current `TARGET` from `config/paths.mk` or an override passed on the command line. By default, `TARGET` matches the host architecture when it is supported:
38+
To list optional variables for a specific target, pass the target name via `TARGET`:
4039

4140
```
42-
make TARGET=aarch64-bugleos-linux-musl toolchain
41+
make help TARGET=toolchain
4342
```
4443

4544
To install Linux UAPI headers into the sysroot, set `WITH_LINUX_HEADERS=1` and update `LINUX_VERSION`/`LINUX_SHA256` in `config/versions.mk`:
4645

4746
```
48-
make WITH_LINUX_HEADERS=1 x86_64
47+
make WITH_LINUX_HEADERS=1 TARGET=x86_64-bugleos-linux-musl toolchain
48+
```
49+
50+
You can override build parallelism and the toolchain output root:
51+
52+
```
53+
make JOBS=8 TOOLCHAIN_ROOT=/opt/bugleos/toolchain TARGET=x86_64-bugleos-linux-musl toolchain
4954
```
5055

5156
## Using the toolchain environment
@@ -72,10 +77,27 @@ To validate an existing build and ensure the compiler never falls back to host h
7277
make TARGET=aarch64-bugleos-linux-musl verify-toolchain
7378
```
7479

75-
## Cleaning
80+
## Validation: make check
81+
82+
Run the toolchain validation target to assert that the installed binaries, sysroot, musl loader/libc, and kernel headers are present and match the requested target triplet and architecture:
83+
84+
```
85+
make TARGET=aarch64-bugleos-linux-musl check
86+
```
87+
88+
## Cleaning / Resetting
89+
90+
The Makefile provides a safe, explicit cleaning interface focused on per-package build artifacts and toolchain outputs. Use `TRIPLET=<triple>` (or `TARGET=<triple>`) to scope to a specific architecture. Destructive targets require `FORCE=1`.
91+
92+
Per-package build cleans (they also remove downstream toolchain stages that depend on the selected package, following the `toolchain` build order):
93+
- `make clean-binutils` removes binutils build trees, logs, sources, archives/stamps, and installed toolchain outputs.
94+
- `make clean-gcc` removes GCC build trees, logs, sources, archives/stamps, and installed toolchain outputs.
95+
- `make clean-musl` removes musl build trees, logs, sources, archives/stamps, and musl-installed sysroot headers/libs (preserving Linux UAPI headers).
96+
- `make clean-kheaders` removes Linux UAPI header builds, logs, sources, archives/stamps, and the installed Linux headers under the sysroot.
97+
98+
Destructive targets (require `FORCE=1`):
7699

77-
- `make clean` removes `builds/` and `logs/` only.
78-
- `make distclean` additionally removes `out/` while preserving downloads.
100+
- `make clean-toolchain FORCE=1` removes toolchain outputs (`out/toolchain/<triple>` and `out/toolchain-stage1`).
79101

80102
## Continuous Integration
81103

config/paths.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ SOURCES_DIR ?= $(ROOT_DIR)/sources
2525
BUILDS_DIR ?= $(ROOT_DIR)/builds
2626
OUT_DIR ?= $(ROOT_DIR)/out
2727
LOGS_DIR ?= $(ROOT_DIR)/logs
28+
MINISIGN_KEY ?= $(OUT_DIR)/minisign.key
29+
MINISIGN_PUB ?= $(OUT_DIR)/minisign.pub
2830

2931
HOST_ARCH := $(shell uname -m)
3032
HOST_TARGET := $(shell \

0 commit comments

Comments
 (0)