4654 Commits
Author SHA1 Message Date
Tianling Shen ef74cfd14f Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-07-22 11:02:55 +08:00
Paul Spooren ff41ddea1c build: gate firmware image signing behind SIGN_FIRMWARE
Firmware image signing in append-metadata/append-gl-metadata was conditional
only by the presence of the build key. Add an explicit SIGN_FIRMWARE option
(default enabled except with BUILDBOT) so appending the fwtool signature can be
toggled on its own.

It's disable on buildbot since we use a decentralized building with no
individual keys on builders. Instead, a fake key is currently used, which adds
an insecure signature.

The future of signing firmware  and key distribution across the build
infrastructure should be discussed separately.

Link: https://github.com/openwrt/openwrt/pull/24291
Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-07-20 10:33:41 +02:00
Paul Spooren 06c826e335 kernel: use iremap for assembly
Currently assembly code of the Kernel may contain the build path, resulting in
unreproducible firmware images (and Kernels). Fix this by adding a iremap
KAFLAG.

Before:

    strings "/path/to/vmlinux" | grep linux-6.18.38
    /path/to/openwrt/build_dir/target-x86_64_musl/linux-x86_64/linux-6.18.38
    /path/to/openwrt/build_dir/target-x86_64_musl/linux-x86_64/linux-6.18.38

After

    strings "/path/to/vmlinux" | grep linux-6.18.38
    target-x86_64_musl/linux-x86_64/linux-6.18.38
    target-x86_64_musl/linux-x86_64/linux-6.18.38

Link: https://github.com/openwrt/openwrt/pull/24271
Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-07-17 21:43:03 +02:00
Georgi ValkovandRobert Marko 6f703adcd3 kernel: set MACOSX_DEPLOYMENT_TARGET to host version
Fix a warning interpreted as error when building the Linux kernel
on macOS host, by setting MACOSX_DEPLOYMENT_TARGET to the version
of the host. Fixes:

make[5]: Entering directory '/Volumes/test/openwrt/build_dir/target-x86_64_musl/linux-x86_64/linux-6.18.38'
  HOSTCC  scripts/mod/modpost.o
scripts/mod/modpost.c:1719:9: error: 'strchrnul' is only available on macOS 15.4 or newer [-Werror,-Wunguarded-availability-new]
 1719 |                 sep = strchrnul(namespace, ',');
      |                       ^~~~~~~~~

Signed-off-by: Georgi Valkov <gvalkov@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/24251
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-07-16 22:58:21 +02:00
Tianling Shen 4cafb73e88 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-07-09 10:32:05 +08:00
Felix Fietkau 8bbaad10e0 build: support git-src override for host builds
Extend the git-src source tree override to host builds. It is opt-in via
HOST_USE_GIT_SRC, since by default the host build keeps using the tarball.

Move the git-src detection and checkout recipe into unpack.mk so both the
target and host build reuse the same code.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-07-07 10:46:12 +02:00
Tianling Shen 41c75c5a90 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-07-02 10:23:13 +08:00
Paul Spooren b0b4bf6ea0 build: don't store timestamps in APK packages
This commit statically sets SOURCE_DATE_EPOCH to 0, which causes `apk mkpkg` to
drop the date from generated packages. This improves reproducibility while
leaving package specific SOURCE_DATE_EPOCH untouched. The latter can be
interesting for i.e. packages like busybox, which prominently show that date on
the login shell.

Without this commit, packages that live inside feed repositories (openwrt.git,
packages.git etc) like `mtd` or `attendedsysupgrade-common` would have random
timestamps since no "full" git log was available.

Below an example with different source dates (0, 1):

│  0755  root:wheel    -                           -  /
│  0755  root:wheel    -                           -  lib/
│  0755  root:wheel    -                           -  lib/apk/
│  0755  root:wheel    -                           -  lib/apk/packages/
│ -0644  root:wheel    1970-01-01T00:00:01Z       10  lib/apk/packages/mtd.list
│ +0644  root:wheel    -                          10  lib/apk/packages/mtd.list
│  0755  root:wheel    -                           -  sbin/
│ -0755  root:wheel    1970-01-01T00:00:01Z    24595  sbin/mtd
│ +0755  root:wheel    -                       24595  sbin/mtd

Link: https://github.com/openwrt/openwrt/pull/24005
Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-06-30 18:53:03 +02:00
Tianling Shen 1e920a0024 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-06-29 13:33:20 +08:00
Mieczyslaw NalewajandRobert Marko 9635f44ead kernel: split nf-nathelper-extra into individual packages
Split kmod-nf-nathelper-extra into separate helper packages
and keep the original package as a compatibility meta-package.

This allows selecting only the required protocol helpers
instead of installing all helper modules and dependencies.

Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/23690
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-06-24 13:26:32 +02:00
Etienne ChampetierandTest Dev 0a9fcdf571 prereq-build/u-boot: add Python 3.14 support
Python 3.14 is the default version on Fedora 43/44.

Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23243
Signed-off-by: Test Dev <dev@example.org>
2026-06-16 12:51:01 +02:00
Rosen PenevandJonas Jelonek a62ffbf3ac prereq-build: add clang support
The Apple g++ check is really clang in disguise. Furthermore, testing on
Linux hosts reveals that clang can sufficiently replace gcc.

Minimum version of clang is 12 because of ccache.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17259
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-06-16 10:56:46 +02:00
Tianling Shen fd28cb248b Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-06-15 11:26:42 +08:00
Paul Spooren 8ba4c5e993 build: fixup version.date creation for source archives
Published sources archives may contain a mixture of MTIMEs, so taking the time
of the first file found varies based on filesystem order. To fix this, sort all
MTIMEs and take the latest.

Since piping into a file directly creates that file, we also need to
specifically tell `find` to ignore `version.date`.

Furthermore, move this prior to the ./src copy step, since for some packages,
the OpenWrt build system ships extra ./src files, which would introduce the
wrong timestamps again.

Fix: e36c2946b7 build: derive PKG_SOURCE_DATE_EPOCH from the unpacked source tree
Link: https://github.com/openwrt/openwrt/pull/23756
Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-06-12 17:41:09 +02:00
Rosen PenevandRobert Marko 631d74d1b7 prereq-build: increase GCC requirement to 10
With ccache 4.13, it mandates a minimum of 10.

Fixes: 84cb042e3a ("tools/ccache: update to 4.13.3")
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23718
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-06-10 11:43:38 +02:00
Rosen PenevandJonas Jelonek 31d7dd77c6 prereq-build: bump python requirement to 3.8
Even though 3.8 is quite old, it's still used by Ubuntu 20.04 LTS. Bump
the version to get some extra features.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23521
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-06-10 09:00:33 +02:00
Tianling Shen 8db35fe4fd Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-06-08 10:36:55 +08:00
Karsten SperlingandRobert Marko 28fa9c7540 build: fix recipe line break in wrap_mirror fallback path
Commit 042996b46b ("build: stricter hash validation on download")
refactored the $(if) in wrap_mirror from a single line to multiple lines.
The else branch (used when MIRROR is empty) was moved to a new line without
a trailing backslash on the preceding line. This causes download methods
that use wrap_mirror (e.g. git) to fail when PKG_SOURCE_MIRROR is 0:

    SHELL= flock ...flock -c '  ...
    bash: -c: line 1: unexpected EOF while looking for matching `''

The fix is to add the missing \ to the else branch.

Signed-off-by: Karsten Sperling <ksperling@apple.com>
2026-06-04 21:12:27 +02:00
Mark MentovaiandRobert Marko b3601af4e4 kernel: don't disable stack validation in cross builds
c3e31b6a9b (2019-07-03), 5f8e587240 (2019-10-02), and 802bfe0806
(2022-10-20) disabled kernel stack validation when the build host was
not running Linux, as the objtool kernel build tool required for stack
validation was not portable to other build host environments. This is no
longer true, and it is not necessary to attempt to disable kernel stack
validation any longer.

Signed-off-by: Mark Mentovai <mark@mentovai.com>
Link: https://github.com/openwrt/openwrt/pull/23612
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-06-04 20:00:36 +02:00
Paul SpoorenandClaude Opus 4.7 e36c2946b7 build: derive PKG_SOURCE_DATE_EPOCH from the unpacked source tree
Previously PKG_SOURCE_DATE_EPOCH came from a git log on the OpenWrt
package directory. That fails in shallow feed clones and in the SDK
(no .git), collapsing to the script's mtime and breaking .apk
reproducibility across SDK rebuilds and between buildbot and SDK.

With this comment, PKG_UNPACK generates a version.date file, later used to
determine a reproducible SOURCE_DATE_EPOCH. Since unpack happens after
download, the evaluation of SOURCE_DATE_EPOCH is now lazy, invoking the
`get_source_date_epoch.sh` script on every use.

While at it, drop export of PKG_SOURCE_DATE_EPOCH and clean it from the
ipkg-build script.

Link: https://github.com/openwrt/openwrt/issues/21579
Link: https://github.com/openwrt/openwrt/pull/21587

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Link: https://github.com/openwrt/openwrt/pull/23576
Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-06-02 11:51:00 +02:00
Tianling Shen 1ebf87589d Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-06-02 14:54:29 +08:00
Guoxin PuandRobert Marko 246b216df5 image: fix per device targz rootfs wrong suffix and redundant images
In commit d89cb72c23 , a new rootfs type "targz" was introduced, to correctly pack the rootfs AFTER `DEVICE_PACKAGES` installation (unlike the old simple `rootfs.tar.gz`) .

The expected release artifact shall be a single corresponding tar gz release accompanying or relacing the old simple `rootfs.tar.gz`.

However, if one take a look at the v25.12 series release download pages, e.g. [25.12.4/x86/64](https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/), one could see that there're now four release artifacts related to rootfs targz:

- [generic-targz-combined-efi.img.gz](https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-25.12.4-x86-64-generic-targz-combined-efi.img.gz)
- [generic-targz-combined.img.gz](https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-25.12.4-x86-64-generic-targz-combined.img.gz)
- [generic-targz-rootfs.img.gz](https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-25.12.4-x86-64-generic-targz-rootfs.img.gz)
- [rootfs.tar.gz](https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-25.12.4-x86-64-rootfs.tar.gz)

It's obvious the new `targz` release actually reuses the same `TARGET_ROOTFS_{TYPE}` handler same as `squashfs`, `ext4` and alike. And the three `generic-targz` img.gz contains the same expected tar gz either as their second partition, or as the whole image. This could be verified by the following script:

```bash
URL_PARENT=https://downloads.openwrt.org/releases/25.12.4/targets/x86/64/openwrt-25.12.4-x86-64-
for TYPE in combined-efi combined rootfs; do
        curl -L "${URL_PARENT}generic-targz-${TYPE}.img.gz" | gzip -cd > "${TYPE}.img"
done
for TYPE in combined-efi combined; do
        INFO=$(sfdisk -d "${TYPE}.img" | sed -n 's/^'"${TYPE}.img"'2 : start= \+\([0-9]\+\), size= \+\([0-9]\+\),.\+.\+$/\1 \2/p')
        dd if="${TYPE}.img" of="${TYPE}.tar.gz" bs=512 skip="${INFO%% *}" count="${INFO##* }"
done
cp rootfs.img rootfs.tar.gz
sha256sum combined-efi.tar.gz combined.tar.gz rootfs.tar.gz
file rootfs.tar.gz
```

Output:
```log
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100 13.12M 100 13.12M   0      0 194.6M      0                              0
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100 12.93M 100 12.93M   0      0 190.9M      0                              0
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100  7.13M 100  7.13M   0      0 257.6M      0                              0
GPT PMBR size mismatch (246304 != 246334) will be corrected by write.
The backup GPT table is corrupt, but the primary appears OK, so that will be used.
The backup GPT table is not on the end of the device.
212992+0 records in
212992+0 records out
109051904 bytes (109 MB, 104 MiB) copied, 0.258064 s, 423 MB/s
212992+0 records in
212992+0 records out
109051904 bytes (109 MB, 104 MiB) copied, 0.261621 s, 417 MB/s
18b98d3562dc3067ae095ee44d4ff3158cf84e89063c3df66c0ef6638922ba71  combined-efi.tar.gz
18b98d3562dc3067ae095ee44d4ff3158cf84e89063c3df66c0ef6638922ba71  combined.tar.gz
18b98d3562dc3067ae095ee44d4ff3158cf84e89063c3df66c0ef6638922ba71  rootfs.tar.gz
rootfs.tar.gz: gzip compressed data, max compression, from Unix, original size modulo 2^32 0
```

The checksum of the extracted, actually expected .tar.gz are all same. And if we peek inside its content, it's indeed what we expected:

```
> tar -tzf rootfs.tar.gz
./
./bin/
./bin/ash
./bin/board_detect
./bin/busybox
./bin/cat
./bin/chgrp
./bin/chmod
./bin/chown
./bin/config_generate
./bin/cp
./bin/date
...
```

A disk image with a `tar.gz` as its second partiton doesn't boot anyway and I doubt if there's any mechanic to make it bootable. So `generic-targz-combined-efi.img.gz` and `generic-targz-combined.img.gz` are not needed at all, and `generic-targz-rootfs.img.gz` shall be renamed to have a `tar.gz` suffix instead.

Therefore work around this by skipping creating images for fs `targz` in the general loop, and only create the rootfs.tar.gz later for `targz` "fs"

This affects both the real builder and imagebuilder. I've tested this with multiple imagebuilders.

Tested with `openwrt-imagebuilder-25.12.4-mvebu-cortexa53.Linux-x86_64`:

```sh
rm -rf bin && make image PROFILE=generic
```

Without the fix:

```
> tree bin/
bin/
└── targets
    └── x86
        └── 64
            ├── openwrt-25.12.4-x86-64-generic.bom.cdx.json
            ├── openwrt-25.12.4-x86-64-generic-ext4-combined-efi.img.gz
            ├── openwrt-25.12.4-x86-64-generic-ext4-combined.img.gz
            ├── openwrt-25.12.4-x86-64-generic-ext4-rootfs.img.gz
            ├── openwrt-25.12.4-x86-64-generic-kernel.bin
            ├── openwrt-25.12.4-x86-64-generic.manifest
            ├── openwrt-25.12.4-x86-64-generic-rootfs.tar.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-combined-efi.img.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-combined.img.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-rootfs.img.gz
            ├── openwrt-25.12.4-x86-64-generic-targz-combined-efi.img.gz
            ├── openwrt-25.12.4-x86-64-generic-targz-combined.img.gz
            ├── openwrt-25.12.4-x86-64-generic-targz-rootfs.img.gz
            ├── profiles.json
            └── sha256sums
```

With the fix:
```
> tree bin/
bin/
└── targets
    └── x86
        └── 64
            ├── openwrt-25.12.4-x86-64-generic.bom.cdx.json
            ├── openwrt-25.12.4-x86-64-generic-ext4-combined-efi.img.gz
            ├── openwrt-25.12.4-x86-64-generic-ext4-combined.img.gz
            ├── openwrt-25.12.4-x86-64-generic-ext4-rootfs.img.gz
            ├── openwrt-25.12.4-x86-64-generic-kernel.bin
            ├── openwrt-25.12.4-x86-64-generic.manifest
            ├── openwrt-25.12.4-x86-64-generic-rootfs.tar.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-combined-efi.img.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-combined.img.gz
            ├── openwrt-25.12.4-x86-64-generic-squashfs-rootfs.img.gz
            ├── openwrt-25.12.4-x86-64-generic-targz-rootfs.tar.gz
            ├── profiles.json
            └── sha256sums
```

And with `openwrt-imagebuilder-25.12.4-mvebu-cortexa53.Linux-x86_64`:

```sh
rm -rf bin && make image PROFILE=ripe_atlas-v5
```

Without the fix:
```
> tree bin/
bin/
└── targets
    └── mvebu
        └── cortexa53
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5.bom.cdx.json
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-ext4-sdcard.img.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5.manifest
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-rootfs.tar.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-squashfs-sdcard.img.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-targz-sdcard.img.gz
            ├── profiles.json
            └── sha256sums
```

With the fix:
```
> tree bin/
bin/
└── targets
    └── mvebu
        └── cortexa53
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5.bom.cdx.json
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-ext4-sdcard.img.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5.manifest
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-rootfs.tar.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-squashfs-sdcard.img.gz
            ├── openwrt-25.12.4-mvebu-cortexa53-ripe_atlas-v5-targz-rootfs.tar.gz
            ├── profiles.json
            └── sha256sums
```

Signed-off-by: Guoxin Pu <pugokushin@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23570
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-05-29 13:10:23 +02:00
Tianling Shen 5ae787d9d1 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-05-23 17:21:09 +08:00
Felix Fietkau e7530a287a build: fix apk_package_files wildcard for packages without ABI version
The wildcard combined an apk_package_files pattern of $(pkg)-*.apk with a
gen_package_wildcard that ends in [^a-z]*, so the full glob required two
dashes. Files for packages without an ABI version (e.g. ubbf-0~....apk)
only contain one dash and never matched, so ipkg-remove was never called
on them and stale .apk files accumulated in the bin directory.

Drop the explicit dash from apk_package_files. The [^a-z] in
gen_package_wildcard already serves as the dash matcher, and
scripts/ipkg-remove filters precisely by reading apk metadata.

Fixes: 642d568b0f ("build: fix ipkg-remove: add support for removing apk files")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2026-05-22 14:54:34 +02:00
Tianling Shen 34d8b08712 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-05-22 12:06:42 +08:00
Eric FahlgrenandPaul Spooren f1e4aaf7b4 imagebuilder: suppress rootfs image when filesystem specified
When using imagebuilder to create images, ROOTFS_FILESYSTEM may be
defined to create just the desired images, but the '*-rootfs.tar.gz'
and '*-rootfs.cpio.gz' images are being created unconditionally
for many targets.

By making generation of these images conditional on the state of
ROOTFS_FILESYSTEM, we can save significant space (measured 3-7 MB
depending on length of package list) and time.

Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
2026-05-21 18:29:28 +02:00
Tianling Shen 098690ddf3 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-05-20 10:16:28 +08:00
Paul Spooren db7af22e49 imagebuilder: allow to specify filesystem
The ImageBuilder creates by default all filesystems enabled during it's own
build, which are typically squashfs and sometimes ext4.

This commit allows to set ROOTFS_FILESYSTEM to specify which specific
filesystem should be build (instead of all).

Motivation is to reduce the load on sysupgrade servers but also fix corner
cases where a squashfs filesystem results in a working image while the ext4
image fails, resulting in a ImageBuilder failure.

Signed-off-by: Paul Spooren <mail@aparcar.org>
2026-05-18 22:31:53 +02:00
Florian EckertandRobert Marko 54d58b05e8 build: add additional apk tags
This commit adds additional information to the apk database. This new tags
are required for SBOM generation.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2026-05-17 12:21:08 +02:00
Tianling Shen 2abf273729 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-05-11 14:58:54 +08:00
Andre HeiderandRobert Marko 34db7ecd94 kernel: fix lz4 initramfs creation
lz4c expects the target filename, provide it.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23239
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-05-07 18:14:58 +02:00
Andre HeiderandRobert Marko e3271a6786 treewide: remove unused archs leftovers
These are all unused by the current targets, clean up and stop
irritating the user with irrelevant grep results.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23240
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-05-07 10:58:47 +02:00
Shiji YangandTianling Shen bdf0428863 u-boot: add PKG_CONFIG_SYSROOT_DIR make flag
On u-boot v2026.04, we need to add PKG_CONFIG_SYSROOT_DIR flag to
fix in-tree dtc tools build without yaml[1-2]. Fixes:

/usr/bin/ld: yamltree.c:(.text+0xa7c): undefined reference to `yaml_sequence_start_event_initialize'
/usr/bin/ld: yamltree.c:(.text+0xa87): undefined reference to `yaml_emitter_emit'
/usr/bin/ld: yamltree.c:(.text+0xaa4): undefined reference to `yaml_sequence_end_event_initialize'
/usr/bin/ld: yamltree.c:(.text+0xaaf): undefined reference to `yaml_emitter_emit'
/usr/bin/ld: yamltree.c:(.text+0xac1): undefined reference to `yaml_document_end_event_initialize'
/usr/bin/ld: yamltree.c:(.text+0xacc): undefined reference to `yaml_emitter_emit'
/usr/bin/ld: yamltree.c:(.text+0xadc): undefined reference to `yaml_stream_end_event_initialize'
/usr/bin/ld: yamltree.c:(.text+0xae7): undefined reference to `yaml_emitter_emit'
/usr/bin/ld: yamltree.c:(.text+0xaf3): undefined reference to `yaml_emitter_delete'

[1] https://github.com/u-boot/u-boot/commit/0535e46d55d7423094d8b553d704a0f7f678de77
[2] https://github.com/u-boot/u-boot/commit/807bcd844afeadbfe47ac132524cc7e3b699bc46
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
2026-05-07 09:47:38 +08:00
Tianling Shen a2ff671fec Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-04-18 20:23:48 +08:00
Eric FahlgrenandRobert Marko 233946b04a base-files: add warning to distfeeds.list
Add a message to the apk distfeeds.list that changes won't be saved
and that users should modify customfeeds.list instead.

Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22586
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-04-15 10:03:10 +02:00
Tianling Shen c7e6b40e89 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-04-14 10:54:59 +08:00
Roland ReinlandHauke Mehrtens 145bc7e52f filogic: add support for D-Link AQUILA PRO AI E30
Specification:
The device is similar to the M30 but has only one LAN port and no WAN port.

- MT7981 CPU using 2.4GHz and 5GHz WiFi (both AX)
- 512MB RAM
- 128MB NAND flash with two UBI partitions with identical size
- 1 multi color LED (red, green, blue, white) connected via GCA230718
- 2 buttons (WPS, reset, LED)
- 1 1Gbit LAN port

Disassembly:
- There are two screws at the power connector which must be removed. Afterwards the top case can be removed (it is clipped on, so some tools are required).

Serial Interface:
- The serial interface can be connected to the 4 pin holes on the board. Do NOT connect VCC.
- The pins are labelled on the PCB (RX, TX, GND)
- Settings: 115200, 8N1

MAC addresses:
- LAN MAC is stored in partition "Odm" at offset 0x8f
- WLAN MAC (2.4 GHz and 5GHz) is LAN MAC + 1

Reverting back to OEM firmware:
- There is currently no easy way to revert back to the OEM image
- The methods from M30 and M60 doesn't seem to work anymore
- If you plan to revert back to OEM firmware later, do the following steps before flashing OpenWrt:
  - Boot from initramfs as described in "Flashing via U-Boot" but don't flash anything
  - Instead, make a backup of UBI and UBI1 partition
  - The created dumps must be written to the initial partitions to revert back to OEM

Flashing via Recovery Web Interface:
- Set your IP address to 192.168.200.10, subnetmask 255.255.255.0
- Press the reset button while powering on the device
- Keep the reset button pressed until the LED blinks red
- Open a Chromium based and goto http://192.168.200.50/ (recovery web interface)
- Download openwrt-mediatek-filogic-dlink_aquila-pro-ai-e30-a1-squashfs-recovery.bin
- Note: The recovery web interface always reports successful flashing, even if it fails
- After flashing, the recovery web interface will try to forward the browser to 192.168.0.1 (can be ignored)
- If flashing was successful, OpenWrt is accessible via 192.168.1.1
- The recovery image boots an initramfs image, flash the sys upgrade image to get to „normal“ OpenWrt mode

Flashing via U-Boot:
- Open the case, connect to the UART console
- Set your IP address to 192.168.200.2, subnet mask 255.255.255.0. Connect to one of the LAN interfaces of the router
- Run a tftp server which provides openwrt-mediatek-filogic-dlink_aquila-pro-ai-e30-a1-initramfs-kernel.bin
- Supply the board with 12V
- Select "7. Load image" in the U-Boot menu
- Enter image file, tftp server IP and device IP (if they differ from the default).
- TFTP download to RAM will start. After a few seconds OpenWrt initramfs should start
- The initramfs is accessible via 192.168.1.1, change your IP address accordingly (or use multiple IP addresses on your interface)
- Perform a sysupgrade using openwrt-mediatek-filogic-dlink_aquila-pro-ai-e30-a1-squashfs-sysupgrade.bin
- Reboot the device. OpenWrt should start from flash now

Flashing via OEM web interface is not possible, as it will change the active partition and OpenWrt is only running on the first UBI partition.

Signed-off-by: Roland Reinl <reinlroland+github@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22776
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-04-13 01:52:29 +02:00
Tianling Shen 584f938f24 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-04-10 10:19:41 +08:00
Hauke Mehrtens 04f10eb796 build: set max-page-size linker flag to match target page size
ELF binaries embed the maximum page size used during linking in the
PT_LOAD segment alignment. If this value is larger than the actual
system page size, the kernel will still load the binary but wastes
memory due to over-alignment. If it is smaller, the binary may fail
to load or cause incorrect behavior with features like RELRO.

Most architectures use 4KB pages, but loongarch64 uses 16KB pages
(CONFIG_PAGE_SIZE_16KB). Explicitly pass -z max-page-size to the
linker so that binaries are built with the correct page alignment for
the target, avoiding issues with RELRO segment padding and ensuring
correct memory mapping on the target system.

Before binutils 2.39 RELRO sections were padded to common page size
which is 4K on MIPS, with binutils 3.29 the padding was changed to
max page size which is 64K on MIPS. With this change we will pad them to
4K again.

This reduces the size of user space binaries in OpenWrt.
The size of the uncompressed root file system of a mips malta be build
decreased by about 20%.

old file size:
```
$ du -s build_dir/target-mips_24kc_musl/root-malta/
15844	build_dir/target-mips_24kc_musl/root-malta/
```

New file size:
```
$ du -s build_dir/target-mips_24kc_musl/root-malta/
12564	build_dir/target-mips_24kc_musl/root-malta/
```

The size of the image did not decrease much because of the strong
compression used by OpenWrt.

Link: https://github.com/openwrt/openwrt/pull/22800
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-04-08 00:34:59 +02:00
Tianling Shen 7220e63fda Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-03-31 14:21:12 +08:00
Til KaiserandRobert Marko 666fee6f48 kernel.mk: add 6.18 workaround for empty Module.symvers.tmp
On Linux 6.18 the path-based symvers filter can
yield an empty tmp file for external modules.

Add a 6.18-only fallback using modules.order
to populate Module.symvers.tmp.

Signed-off-by: Til Kaiser <mail@tk154.de>
Link: https://github.com/openwrt/openwrt/pull/21078
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-03-28 11:51:10 +01:00
Tianling Shen 7d2599cc6e Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-03-05 17:04:21 +08:00
Hannu NymanandPaul Spooren f20794a6f3 config: add build config option to sign each .apk package
Add a build config option to sign each individual .apk package.

If individual .apk files are signed with the build key, they can be
installed with 'apk add' without '--allow-untrusted' to a firmware
compiled by the same buildhost.

Enable the option by default, but disable it for BUILDBOT.

(At the moment, since commit 084697e, only the package index is signed,
which forces users to use '--allow-untrusted' when installing
self-built .apk files.)

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2026-03-02 11:08:10 +01:00
Robert Marko 17139e35b1 targets: add REGULATOR_SUPPORT auto-feature
Not all targets need regulator support, so they dont enable it as its
disabled in the generic config by default.

So, in order to allow kernel modules to depend on regulator support lets
add a new feature flag "regulator" and set it automatically if target
kernel config enables CONFIG_REGULATOR.

Link: https://github.com/openwrt/openwrt/pull/22172
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-03-01 10:59:19 +01:00
Tianling Shen c165709dfe Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-02-19 15:39:59 +08:00
Hauke Mehrtens 7bf8d568f6 build: pass CPPFLAGS to cmake build
The TARGET_CPPFLAGS contain the include paths used by OpenWrt. This also
contains the including of the fortify sources headers. If they are not
provided, the applications will not use fortify sources headers when
compiled against musl. Add them to cmake builds too. cmake does not
support a special CPPFLGS option [0], just add them to CFLAGS and
CXXFLAGS like we also do it for meson and normal make.
This should fix fortify sources support for cmake builds.

I found this explanation for the flags:
 * CFLAGS: C flags, passed during compile AND link
 * CXXFLAGS: C++ flags, passed during compile AND link
 * CPPFLAGS: pre-processor flags, passed ONLY during compile
 * LDFLAGS: linker flags, passed ONLY during link

[0]: https://gitlab.kitware.com/cmake/cmake/-/issues/12928

Link: https://github.com/openwrt/openwrt/pull/22042
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-02-17 01:29:57 +01:00
Yanase YukiandRobert Marko 2c099e5623 treewide: drop CVS support
We have no CVS-managed package in official repositories.
This commit drops obsolete SCM system support.

Signed-off-by: Yanase Yuki <dev@zpc.st>
Link: https://github.com/openwrt/openwrt/pull/21340
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-02-13 15:40:13 +01:00
Robert Marko d89cb72c23 image: support generating per device targz rootfs
Currently, for targets that use the CONFIG_TARGET_ROOTFS_TARGZ a single
rootfs tarball is generated for the subtarget based of $(TARGET_DIR).

However, this means that it does not respect DEVICE_PACKAGES like other
rootfs images.

So, lets augment CONFIG_TARGET_ROOTFS_TARGZ by adding a proper targz fstype
so that per device rootfs is generated under lock.

This is required so that devices that use custom sysupgrade archives like
Methode devices, can actually include a per device rootfs so when building
for multiple devices and with CONFIG_TARGET_PER_DEVICE_ROOTFS set the built
image actually includes the listed DEVICE_PACKAGES.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
2026-02-09 16:43:29 +01:00
Tianling Shen e98d1a093f Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2026-02-09 17:26:19 +08:00
Rosen PenevandHauke Mehrtens 71ad91ecfa package-pack: fix Ubuntu 18.04 compilation
Add \ to fix parsing with make 4.1.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21910
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-02-08 00:23:13 +01:00