summaryrefslogtreecommitdiff
path: root/include/image.mk
Commit message (Collapse)AuthorAgeFilesLines
* Revert "image: update LZMA_XZ_OPTIONS with new squashfs4 tool"Christian Marangi2023-04-121-1/+1
| | | | | | | | This reverts commit a33b97dcb1bd6e68f01c571e92ef02c3ab721523. A new version of the squashfs4 tool patch reintroduced the -Xe option. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
* image: update LZMA_XZ_OPTIONS with new squashfs4 toolChristian Marangi2023-02-201-1/+1
| | | | | | | | | The -Xpreset option changed format and dropped the -Xe and just require the extreme string to be passed to the -Xpreset option. Update the LZMA_XZ_OPTIONS to reflect this change. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
* build: add ALT3 and ALT4 vendor/model/variantWenli Looi2023-01-251-1/+39
| | | | | | This is needed for the Netgear EX7300 series v2. Signed-off-by: Wenli Looi <wlooi@ucalgary.ca>
* image: add FACTORY_SIZE to DEFAULT_DEVICE_VARSSander Vanheule2023-01-131-1/+1
| | | | | | | | | | | | | FACTORY_SIZE is used as a device recipe variable on both the D-Link DIR-825-B1 and Trendnet TEW-673GRU, but is not listed as a device variable, neither globally, nor for ath79. Being assigned the same value, this probably hasn't caused any issues. Add FACTORY_SIZE to the global list DEFAULT_DEVICE_VARS, to ensure the variable is reset for every device, and to allow it to be used outside of the ath79 target. Signed-off-by: Sander Vanheule <sander@svanheule.net>
* image: add gzip-filename build recipeMichael Pratt2023-01-061-0/+2
| | | | | | | | | | Some vendors use basic gzip metadata (original filename and timestamp) to verify valid images, along with the size of it's contents. Also, add a new device profile variable FACTORY_IMG_NAME which would be ideal to use with this new recipe. Signed-off-by: Michael Pratt <mcpratt@pm.me>
* image: fix device profile specific COMPILE targetsMichael Pratt2022-12-191-0/+1
| | | | | | | | | | | | | | | Commit a01d23e75 ("image: always rebuild kernel loaders") is a step in the right direction, but exposed some issues and regressions in the makefile. Some of the files made by device specific COMPILE targets start with an "append" command (i.e. >> instead of > redirection) and if the file already exists, the target file is the input to itself before the first recipe-specified input. Fixes: a01d23e75 ("image: always rebuild kernel loaders") Fixes: a7fb589e8 ("image: always rebuild kernel loaders") Signed-off-by: Michael Pratt <mcpratt@pm.me>
* mkits: support definition of DTB loadaddrDavid Bauer2022-11-081-0/+2
| | | | | | | Support defining a per-device loadaddress for the DTB. This is required for devices which to not align the DTB from the bootloader correctly. Signed-off-by: David Bauer <mail@david-bauer.net>
* image: always rebuild kernel loadersMatthias Schiffer2022-10-141-1/+1
| | | | | | | | | | | Kernel loaders like the lzma-loader currently don't track changes to their sources. This can lead to an old version of a loader to be used when a build tree is not clean between builds. As the loaders are tiny and the build times are insignificant, simply force rebuilding them on every build to avoid this problem. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
* imagebuilder: clean KDIR_TMP before buildingPaul Spooren2022-09-101-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Building images usally stores them in KDIR_TMP and then copies them over to BIN_DIR. This is fine as rebuilding of images overwrites existing images. When using the EXTRA_IMAGE_NAME variable frequently this fills up the ImageBuilder KDIR_TMP folder since every built image is stored forever. This commit clears the KDIR_TMP folder before building a new image. Below an example how sysupgrade.openwrt.org filled up after the release of 22.03.0 where every created image contains a hash of the package selction in the filename: aparcar@asu-01:~/asu/worker1/cache/22.03.0$ du -d 1 -h 400M ./kirkwood 260M ./gemini 2.0G ./ipq806x 1.7G ./ipq40xx 8.1G ./ramips 4.0K ./octeon 495M ./sunxi 728M ./lantiq 1.8G ./rockchip 3.7G ./mediatek 4.0K ./realtek 5.4G ./mvebu 8.9G ./ath79 3.0G ./bcm47xx 14G ./bcm27xx 11G ./x86 4.0K ./bcm63xx 312M ./mpc85xx 600M ./apm821xx 5.4G ./bcm53xx 66G . Signed-off-by: Paul Spooren <mail@aparcar.org>
* image: drop unused 'BuildKernel/MkFIT'Piotr Dymacz2022-05-121-8/+0
| | | | | | The 'MkFIT' recipe is no longer used across whole codebase. Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
* build: store sha256_unsigned in JSONPaul Spooren2022-03-291-3/+3
| | | | | | | | | | | | Introduce `sha256_unsigned` which is a checksum of the image _before_ a signature is attached. This is helpful to compare image reproducibility. Since the `.sha256sum` file is located in the $(KDIR) folder, switch $(BIN_DIR) with $(KDIR) to simplify the code. The value of $(BIN_DIR) itself is not stored inside the resulting JSON file, so it can be replaced. Signed-off-by: Paul Spooren <mail@aparcar.org>
* image: let mksquashfs4 use all processorsStijn Tintel2022-03-291-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | Drop the -processors argument from the mksquashfs4 call, so it will use all available processors. This dramatically reduces the time to create squashfs filesystems. The times below are observed when building an image for my main router, the WatchGuard Firebox M300 (qoriq target): Before: real 4m45,973s After: real 0m23,497s With this commit `mksquashfs` may use more cores than defined via `-j`. This is the same behaviour as for archive creation of ImageBuilder, SDK or toolchain. There is no trivial way to limit `mksquashfs` CPU core usage to the amount of "free" make jobs since two running `mksquashfs` instances would each run with the total allowed number (-j) of threads. Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> [extended reasoning in commit message] Signed-off-by: Paul Spooren <mail@aparcar.org>
* build: add support for passing C preprocessor flags for DTS buildsFelix Fietkau2022-03-271-0/+1
| | | | | | | Useful for adding #ifdefs based on build system provided definitions, or for adding extra include paths Signed-off-by: Felix Fietkau <nbd@nbd.name>
* image: define DEVICE_DTS_DELIMITER as per-device variableChristian Lamparter2021-10-241-2/+3
| | | | | | | | | DEVICE_DTS_DELIMITER needs to be in the DEFAULT_DEVICE_VARS list to work as expected. This was missing from the original version and got overlooked. Fixes: fd6790864739 ("scripts: mkits.sh: Allow legacy @ mode for dts creation") Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
* build: store artifacts in JSONPaul Spooren2021-09-141-7/+38
| | | | | | | | | | | | | Multiple profiles create artifacts, these should be stored in the JSON file as well, allowing downstream tooling to show those files, too. Artifacts don't have specific filesystems so only the fields `name`, `type` and `sha256` are available. Rename env variable names from IMAGE_ to FILE_ prefixes to reflect that images, kernels and artifacts are added with the same command. Signed-off-by: Paul Spooren <mail@aparcar.org>
* image: fix build with SELinuxDaniel Golle2021-08-191-1/+1
| | | | | | | | The option '-xattr' for mksquashfs4 should be '-xattrs' which lead to build failure with SELinux enabled. Add the missing 's'. Fixes: 4baf47b9a8 ("images: squashfs: xattrs should not depend on buld host") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* images: squashfs: xattrs should not depend on buld hostDaniel Golle2021-08-031-0/+1
| | | | | | | | | Enable xattr for the generated squashfs only if needed for SELinux. This eliminates warnings during boot on target when building (non-SELinux) OpenWrt on SELinux-enabled hosts like Fedora. Reported-by: fda77 <fda77@users.noreply.github.com> Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* build: fix build for devices without initramfsDavid Bauer2021-06-081-1/+1
| | | | | | | | | Don't attempt to copy initramfs images for devices which do not output an initramfs image. This was breaking builds for mpc85xx-p1010 since mid-march. Signed-off-by: David Bauer <mail@david-bauer.net>
* build/json: fix DEVICE_PACKAGESPaul Spooren2021-06-021-1/+1
| | | | | | | | | | The variable was missing in the definition of DEFAULT_DEVICE_VARS which caused it to contain wrong values, messing up the resulting JSON files. This patch adds the variable DEVICE_PACKAGES to DEFAULT_DEVICE_VARS. Suggested-by: Baptiste Jonglez <git@bitsofnetworks.org> Signed-off-by: Paul Spooren <mail@aparcar.org>
* build: introduce $(MKHASH)Leonardo Mörlein2021-05-131-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before this commit, it was assumed that mkhash is in the PATH. While this was fine for the normal build workflow, this led to some issues if make TOPDIR="$(pwd)" -C "$pkgdir" compile was called manually. In most of the cases, I just saw warnings like this: make: Entering directory '/home/.../package/gluon-status-page' bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found [...] While these were only warnings and the package still compiled sucessfully, I also observed that some package even fail to build because of this. After applying this commit, the variable $(MKHASH) is introduced. This variable points to $(STAGING_DIR_HOST)/bin/mkhash, which is always the correct path. Signed-off-by: Leonardo Mörlein <me@irrelefant.net>
* image: fix append-image when building multiple profilesDaniel Golle2021-03-241-1/+1
| | | | | | | | In case CONFIG_TARGET_MULTI_PROFILE is set, IMG_PREFIX cannot be expanded. Use DEVICE_IMG_PREFIX instead and make sure it's defined. Fixes: 8f89b1ab0f ("image: add 'append-image' build command") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* build: artifacts: add dependency for built imagesOskari Lemmela2021-03-241-2/+4
| | | | | | | Add possibility to use images and initramfs in artifacts. Signed-off-by: Oskari Lemmela <oskari@lemmela.net> Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* include/image*: add support for device-tree overlaysDaniel Golle2021-03-171-3/+5
| | | | | | | | | | | Add new target feature 'dt-overlay' which makes DTC keep the symbol names in the generated dtb. Make sure additional DT overlay sources specified by the new device variable DEVICE_DTS_OVERLAY get compiled together with the main DTS (currently overlays got to be in the same folder). Let Build/fit pass the generated DT overlay blobs to mkits.sh. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* build: use config-1 instead of config@1 as defaultRobert Marko2021-03-051-1/+1
| | | | | | | | | | U-boot will reject all nodes with @ since commit: https://gitlab.denx.de/u-boot/u-boot/-/commit/79af75f7776fc20b0d7eb6afe1e27c00fdb4b9b4 This will cause the OpenWrt images to fail booting, to rectify use the config-1 as default. Signed-off-by: Robert Marko <robert.marko@sartura.hr>
* build: use numeric uid/gid on cpio callsFelix Fietkau2021-03-031-1/+1
| | | | | | | There are systems that don't have the 'root' group, so don't rely on host specific user/group names Signed-off-by: Felix Fietkau <nbd@nbd.name>
* include: use cpio from staging dirDavid Bauer2021-02-281-1/+1
| | | | | | | As we built our own CPIO now, use this version instead of whatever the host may or may not provide. Signed-off-by: David Bauer <mail@david-bauer.net>
* treewide: rename IMAGE_PREFIX/IMAGE_NAME to DEVICE_IMG_*Adrian Schmutzler2021-02-251-21/+21
| | | | | | | | | | | | | | We so far had two variables IMG_PREFIX and IMAGE_PREFIX with different content. Since these names are obviously quite confusing, this patch renames the latter to DEVICE_IMG_PREFIX, as it's a device-dependent variable, while IMG_PREFIX is only (sub)target-dependent. For consistency, also rename IMAGE_NAME to DEVICE_IMG_NAME, as that's a device-dependent variable as well. Cc: Paul Spooren <mail@aparcar.org> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* build: avoid generating JSON info on missing imageDavid Bauer2021-02-241-2/+2
| | | | | | | | | | | Previously, build would fail for targets containing devices with not initramfs image (such as mpc85xx-p1010). Only generate the JSON image info for the initramfs image when we have one to avoid breaking the builds. Fixes commit d3140d052964 ("build/json: generate json file for initramfs") Signed-off-by: David Bauer <mail@david-bauer.net>
* build/json: generate json file for initramfsMoritz Warning2021-02-211-1/+34
| | | | | | | | The initramfs images are missing from the profiles.json files. Signed-off-by: Moritz Warning <moritzwarning@web.de> [fix code by exporting device variables] Signed-off-by: Paul Spooren <mail@aparcar.org>
* mediatek: more clean solution for out-of-tree DTSDaniel Golle2021-02-191-2/+2
| | | | | | | | | | | Use approach suggested by Adrian Schmutzler instead of introducing another device variable. Also revert the unnecessary white-space changes accidentally introduced by the previous commit. Fixed: c067b1e79b ("mediatek: move out-of-tree DTS files to dedicated dts folder") Suggested-by: Adrian Schmutzler <mail@adrianschmutzler.de> Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* mediatek: move out-of-tree DTS files to dedicated dts folderDaniel Golle2021-02-191-2/+2
| | | | | | | | | | | Use dedicated dts folder like on ramips to store device tree source files for boards not already supported in vanilla Linux. Doing so instead of having them in files-* has several advantages: * we don't need to duplicate them for several kernel versions * changes to a device tree don't trigger a complete kernel rebuild * the files are more obvious to find Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* build: use SPDX license tagsPaul Spooren2021-02-051-5/+2
| | | | | | | | | The license folder is a core part of OpenWrt and all GPL-2.0 licensed. Use SPDX license tags to allow machines to check licenses. Signed-off-by: Paul Spooren <mail@aparcar.org> [rebase, keep some Copyright lines, sharpen commit message] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* treewide: provide global default for SUPPORTED_DEVICESAdrian Schmutzler2021-01-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The majority of our targets provide a default value for the variable SUPPORTED_DEVICES, which is used in images to check against the compatible on a running device: SUPPORTED_DEVICES := $(subst _,$(comma),$(1)) At the moment, this is implemented in the Device/Default block of the individual targets or even subtargets. However, since we standardized device names and compatible in the recent past, almost all targets are following the same scheme now: device/image name: vendor_model compatible: vendor,model The equal redundant definitions are a symptom of this process. Consequently, this patch moves the definition to image.mk making it a global default. For the few targets not using the scheme above, SUPPORTED_DEVICES will be defined to a different value in Device/Default anyway, overwriting the default. In other words: This change is supposed to be cosmetic. This can be used as a global measure to get the current compatible with: $(firstword $(SUPPORTED_DEVICES)) (Though this is not precisely an achievement of this commit.) Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* build/json: add filesystem informationPaul Spooren2020-12-131-0/+1
| | | | | | | | Some images are created using different filesystems, most popular squashfs and ext4. To allow downstream projects to distinguesh between those, add the `filesystem` information to created json files. Signed-off-by: Paul Spooren <mail@aparcar.org>
* build: add UIMAGE_MAGIC to device variablesSander Vanheule2020-11-251-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | Allow a device recipe to specify a custom UIMAGE_MAGIC value, as used by OpenWrt's -M flag for mkimage. This allows to automatically customize the magic bytes in all calls to Build/uImage for this device, similar to the behaviour of UIMAGE_NAME. Since the -M argument is inserted before the user arguments, it can be overriden. The following example would use 0x87654321 for the KERNEL image, but 0x12345678 for the KERNEL_INITRAMFS image: define Device/MyDevice UIMAGE_MAGIC := 0x87654321 KERNEL := ... | uImage lzma KERNEL_INITRAMFS := ... | uImage lzma -M 0x12345678 ... endef Fixes: df8e6be59a1f ("rtl838x: add new architecture") [UIMAGE_MAGIC was not declared as a device variable] Signed-off-by: Sander Vanheule <sander@svanheule.net> [rebase, improve formatting of "Fixes"] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* build: store SOURCE_DATE_EPOCH in JSON info filesPaul Spooren2020-11-121-0/+1
| | | | | | | | The source date epoch is the only reproducible date close to the actual build date. It can be used for tooling like the firmware wizard to show the image age. Signed-off-by: Paul Spooren <mail@aparcar.org>
* kernel: remove obsolete kernel version switches for 4.19Adrian Schmutzler2020-10-301-12/+6
| | | | | | | This removes switches dependent on kernel version 4.19 as well as several packages/modules selected only for that version. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* image: drop obsolete legacy image recipesAdrian Schmutzler2020-10-301-11/+0
| | | | | | | LegacyDevice is not used anymore in our tree, so let's drop it together with the relevant definitions and recipes. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* image: drop unused legacy NAND build recipesAdrian Schmutzler2020-10-301-29/+0
| | | | | | | This drops unused legacy recipes Image/Build/SysupgradeNAND and Image/Build/UbinizeImage. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* image.mk: evaluate /etc/selinux/config to choose SELinux policyDaniel Golle2020-09-291-2/+3
| | | | | | | | Instead of hardcoding 'targeted' policy, evaluate /etc/selinux/config in rootfs to choose according to which policy files in the rootfs got to be labeled. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* policycoreutils: install to host/bin not hostpkgPaul Spooren2020-09-291-1/+1
| | | | | | | | By installing policycoreutils to host/bin it is also available within the ImageBuilder and SDK, allowing to correctly label both filesystems and packages. Signed-off-by: Paul Spooren <mail@aparcar.org>
* policycoreutils: fix host utils rpath and bin directoryDaniel Golle2020-09-271-2/+1
| | | | | | | | | 'setfiles' and others should be installed to $(STAGING_DIR_HOSTPKG)/bin rather than $(...)/sbin which isn't in PATH. Also using -Wl,-rpath to set library search location instead of setting LD_LIBRARY_PATH when calling setfiles in image.mk. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* scripts: mkits.sh make it possible to specify fdt@#Christian Lamparter2020-09-251-2/+4
| | | | | | | | | | | | | | Some bootloaders are really keen on just one special fdt in a multi-image fit image. This is a problem, because currently this is fixed to "fdt@1". This patch introduces a new device variable: DEVICE_FDT_NUM that allows to specify the right fdt number. If the value is absent "1" will be chosen. Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
* build: unbreak fakeroot in SDKDaniel Golle2020-09-011-1/+1
| | | | | | | | Using fakeroot without passing the paths to libfakeroot.sh and faked causes havoc. Use the $(FAKEROOT) Make variable which includes them. Fixes: 353ce2e521 ("build: ipkg-build use fakeroot with PKG_FILE_MODES") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* build: add support for SELinux to include/image.mkThomas Petazzoni2020-08-311-1/+18
| | | | | | | | | This allows the build process to prepare a squashfs filesystem for use with SELinux. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> [rebase, add commit message] Signed-off-by: W. Michael Petullo <mike@flyn.org>
* build: add DEVICE_COMPAT_VERSION and DEVICE_COMPAT_MESSAGEAdrian Schmutzler2020-07-311-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We regularly encounter the situation that devices are subject to changes that will make them incompatible to previous versions. Removing SUPPORTED_DEVICES will not really be helpful in most of these cases, as this only helps after a rename. To solve this situation, this patchset introduces a compatibility version for devices. It will be implemented via a per-device Make variable DEVICE_COMPAT_VERSION, which will be set to 1.0 globally by default and then can be overwritten as needed. Furthermore, a variable DEVICE_COMPAT_MESSAGE is added, where a message to be displayed during sysupgrade may be specified optionally. This patch only implements the build variables and adds them to the sysupgrade metadata, the evaluation will be addressed in a subsequent patch. To set it, one would just need to add the following to a device node: define Device/somedevice ... DEVICE_COMPAT_VERSION := 1.1 DEVICE_COMPAT_MESSAGE := Config cannot be migrated from swconfig to DSA endef Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* build: add option to mark devices as BROKENAdrian Schmutzler2020-07-301-0/+2
| | | | | | | | | | | By specifying "BROKEN := 1" or "BROKEN := y" for a device, it will be hidden (and deselected) by default. By that, it provides a stronger option to "disable" a device beyond just using DEFAULT := n. To make these devices visible, just enable the BROKEN option in developer settings as already implemented for targets and packages. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* build: store default/device packages in JSONPaul Spooren2020-06-301-0/+1
| | | | | | | | | | | | With this commit the `profiles.json` contain both the target specific `default_packages` as well as the device specific `device_packages` as a array of strings. This information is required for downstream projects like the various web-based interactive firmware generators. Signed-off-by: Daniel Golle <daniel@makrotopia.org> Signed-off-by: Paul Spooren <mail@aparcar.org>
* treewide: convert sed -r to posix -EKevin Darbyshire-Bryant2020-04-041-1/+1
| | | | Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
* build: refactor JSON info files to `profiles.json`Paul Spooren2020-04-031-29/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | JSON info files contain machine readable information of built profiles and resulting images. These files were added in commit 881ed09ee6e2 ("build: create JSON files containing image info"). They are useful for firmware wizards and script checking for reproducibility. Currently all JSON files are stored next to the built images, resulting in up to 168 individual files for the ath79/generic target. This patch refactors the JSON creation to store individual per image (not per profile) files in $(BUILD_DIR)/json_info_files and create an single overview file called `profiles.json` in the target directory. Storing per image files and not per profile solves the problem of parallel file writes. If a profiles sysupgrade and factory image are finished at the same time both processes would write to the same JSON file, resulting in randomly broken outputs. Some target like x86/64 do not use the image code yet, resulting in missing JSON files. If no JSON info files were created, no `profiles.json` files is created as it would be empty anyway. As before, this creation is enabled by default only if `BUILDBOT` is set. Tested via buildroot & ImageBuilder on ath79/generic, imx6 and x86/64. Signed-off-by: Paul Spooren <mail@aparcar.org> [json_info_files dir handling in Make, if case refactoring] Signed-off-by: Petr Štetiar <ynezz@true.cz>