From 89d316815dc16dbb3461c0d8b67bf2334568df9e Mon Sep 17 00:00:00 2001 From: kemna Date: Wed, 9 Oct 2024 00:18:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=94=E7=A5=A5=E6=B6=B5=E7=9A=84=E6=96=87?= =?UTF-8?q?=E4=BB=B6part01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSES/BSD-2-Clause | 32 - LICENSES/BSD-3-Clause | 36 - LICENSES/GPL-1.0 | 261 --- LICENSES/GPL-2.0 | 355 ---- LICENSES/ISC | 24 - LICENSES/Linux-syscall-note | 25 - LICENSES/MIT | 30 - UA2F | 1 + config/Config-build.in | 419 ----- config/Config-devel.in | 159 -- config/Config-images.in | 325 ---- config/Config-kernel.in | 1448 ----------------- config/check-hostcxx.sh | 12 - config/check-uname.sh | 1 - include/autotools.mk | 170 -- include/bpf.mk | 86 - include/cmake.mk | 185 --- include/debug.mk | 48 - include/depends.mk | 53 - include/device_table.txt | 5 - include/download.mk | 357 ---- include/feeds.mk | 71 - include/hardened-ld-pie.specs | 2 - include/hardening.mk | 66 - include/host-build.mk | 234 --- include/image-commands.mk | 747 --------- include/image.mk | 910 ----------- include/kernel-6.6 | 2 - include/kernel-build.mk | 187 --- include/kernel-defaults.mk | 230 --- include/kernel-version.mk | 51 - include/kernel.mk | 309 ---- include/logo.png | Bin 81750 -> 0 bytes include/logo.svg | 398 ----- include/meson.mk | 151 -- include/netfilter.mk | 389 ----- include/nls.mk | 48 - include/openssl-module.mk | 79 - include/package-bin.mk | 41 - include/package-defaults.mk | 164 -- include/package-dumpinfo.mk | 58 - include/package-pack.mk | 369 ----- include/package-seccomp.mk | 12 - include/package.mk | 381 ----- include/prereq-build.mk | 241 --- include/prereq.mk | 125 -- include/quilt.mk | 184 --- include/rootfs.mk | 128 -- include/scan.awk | 19 - include/scan.mk | 122 -- include/shell.sh | 15 - include/site/aarch64 | 30 - include/site/aarch64_be | 30 - include/site/arc | 30 - include/site/arm | 30 - include/site/armeb | 30 - include/site/darwin | 2 - include/site/i386 | 3 - include/site/i486 | 30 - include/site/i686 | 3 - include/site/linux | 80 - include/site/loongarch64 | 30 - include/site/m68k | 28 - include/site/mips | 30 - include/site/mips64 | 30 - include/site/mips64el | 30 - include/site/mipsel | 30 - include/site/powerpc | 30 - include/site/powerpc64 | 26 - include/site/riscv64 | 30 - include/site/sparc | 30 - include/site/x86_64 | 30 - include/subdir.mk | 109 -- include/target.mk | 402 ----- include/toolchain-build.mk | 23 - include/toplevel.mk | 287 ---- include/trusted-firmware-a.mk | 104 -- include/u-boot.mk | 144 -- include/uclibc++.mk | 2 - include/unpack.mk | 72 - include/verbose.mk | 72 - include/version.mk | 108 -- luci-theme-argon | 1 + package/base-files/files/etc/os-release | 0 package/firmware/linux-firmware/intel.mk | 4 +- package/kernel/linux/Makefile | 3 +- .../network/config/netifd/files/sbin/ifdown | 0 package/rkp-ipid | 1 + rkp-ipid | 1 + .../files/drivers/gpio/gpio-latch-mikrotik.c | 11 +- target/linux/ath79/mikrotik/config-default | 1 - .../700-phy-add-ath79-usb-phys.patch | 75 +- .../files/drivers/platform/mikrotik/Kconfig | 7 - .../files/drivers/platform/mikrotik/Makefile | 1 - .../drivers/platform/mikrotik/rb_hardconfig.c | 90 +- .../drivers/platform/mikrotik/routerboot.h | 1 - .../dts/qcom/qcom-ipq4029-insect-common.dtsi | 16 +- target/linux/ipq40xx/mikrotik/config-default | 1 - target/linux/mediatek/filogic/config-6.6 | 16 +- target/linux/mvebu/cortexa72/config-6.6 | 1 - target/linux/ramips/mt7621/config-6.6 | 1 - .../firmware/brcm/brcmfmac43430a0-sdio.txt | 0 .../firmware/brcm/brcmfmac43430a0-sdio.txt | 0 vermagic | 1 + 104 files changed, 108 insertions(+), 11804 deletions(-) delete mode 100644 LICENSES/BSD-2-Clause delete mode 100644 LICENSES/BSD-3-Clause delete mode 100644 LICENSES/GPL-1.0 delete mode 100644 LICENSES/GPL-2.0 delete mode 100644 LICENSES/ISC delete mode 100644 LICENSES/Linux-syscall-note delete mode 100644 LICENSES/MIT create mode 160000 UA2F delete mode 100644 config/Config-build.in delete mode 100644 config/Config-devel.in delete mode 100644 config/Config-images.in delete mode 100644 config/Config-kernel.in delete mode 100755 config/check-hostcxx.sh delete mode 100755 config/check-uname.sh delete mode 100644 include/autotools.mk delete mode 100644 include/bpf.mk delete mode 100644 include/cmake.mk delete mode 100644 include/debug.mk delete mode 100644 include/depends.mk delete mode 100644 include/device_table.txt delete mode 100644 include/download.mk delete mode 100644 include/feeds.mk delete mode 100644 include/hardened-ld-pie.specs delete mode 100644 include/hardening.mk delete mode 100644 include/host-build.mk delete mode 100644 include/image-commands.mk delete mode 100644 include/image.mk delete mode 100644 include/kernel-6.6 delete mode 100644 include/kernel-build.mk delete mode 100644 include/kernel-defaults.mk delete mode 100644 include/kernel-version.mk delete mode 100644 include/kernel.mk delete mode 100644 include/logo.png delete mode 100644 include/logo.svg delete mode 100644 include/meson.mk delete mode 100644 include/netfilter.mk delete mode 100644 include/nls.mk delete mode 100644 include/openssl-module.mk delete mode 100644 include/package-bin.mk delete mode 100644 include/package-defaults.mk delete mode 100644 include/package-dumpinfo.mk delete mode 100644 include/package-pack.mk delete mode 100644 include/package-seccomp.mk delete mode 100644 include/package.mk delete mode 100644 include/prereq-build.mk delete mode 100644 include/prereq.mk delete mode 100644 include/quilt.mk delete mode 100644 include/rootfs.mk delete mode 100644 include/scan.awk delete mode 100644 include/scan.mk delete mode 100644 include/shell.sh delete mode 100644 include/site/aarch64 delete mode 100644 include/site/aarch64_be delete mode 100644 include/site/arc delete mode 100644 include/site/arm delete mode 100644 include/site/armeb delete mode 100644 include/site/darwin delete mode 100644 include/site/i386 delete mode 100644 include/site/i486 delete mode 100644 include/site/i686 delete mode 100644 include/site/linux delete mode 100644 include/site/loongarch64 delete mode 100644 include/site/m68k delete mode 100644 include/site/mips delete mode 100644 include/site/mips64 delete mode 100644 include/site/mips64el delete mode 100644 include/site/mipsel delete mode 100644 include/site/powerpc delete mode 100644 include/site/powerpc64 delete mode 100644 include/site/riscv64 delete mode 100644 include/site/sparc delete mode 100644 include/site/x86_64 delete mode 100644 include/subdir.mk delete mode 100644 include/target.mk delete mode 100644 include/toolchain-build.mk delete mode 100644 include/toplevel.mk delete mode 100644 include/trusted-firmware-a.mk delete mode 100644 include/u-boot.mk delete mode 100644 include/uclibc++.mk delete mode 100644 include/unpack.mk delete mode 100644 include/verbose.mk delete mode 100644 include/version.mk create mode 160000 luci-theme-argon mode change 120000 => 100755 package/base-files/files/etc/os-release mode change 120000 => 100755 package/network/config/netifd/files/sbin/ifdown create mode 160000 package/rkp-ipid create mode 160000 rkp-ipid mode change 120000 => 100755 target/linux/starfive/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt mode change 120000 => 100755 target/linux/sunxi/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt create mode 100644 vermagic diff --git a/LICENSES/BSD-2-Clause b/LICENSES/BSD-2-Clause deleted file mode 100644 index da366e2ce5..0000000000 --- a/LICENSES/BSD-2-Clause +++ /dev/null @@ -1,32 +0,0 @@ -Valid-License-Identifier: BSD-2-Clause -SPDX-URL: https://spdx.org/licenses/BSD-2-Clause.html -Usage-Guide: - To use the BSD 2-clause "Simplified" License put the following SPDX - tag/value pair into a comment according to the placement guidelines in - the licensing rules documentation: - SPDX-License-Identifier: BSD-2-Clause -License-Text: - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSES/BSD-3-Clause b/LICENSES/BSD-3-Clause deleted file mode 100644 index 34c7f057c8..0000000000 --- a/LICENSES/BSD-3-Clause +++ /dev/null @@ -1,36 +0,0 @@ -Valid-License-Identifier: BSD-3-Clause -SPDX-URL: https://spdx.org/licenses/BSD-3-Clause.html -Usage-Guide: - To use the BSD 3-clause "New" or "Revised" License put the following SPDX - tag/value pair into a comment according to the placement guidelines in - the licensing rules documentation: - SPDX-License-Identifier: BSD-3-Clause -License-Text: - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSES/GPL-1.0 b/LICENSES/GPL-1.0 deleted file mode 100644 index 1c50e3b839..0000000000 --- a/LICENSES/GPL-1.0 +++ /dev/null @@ -1,261 +0,0 @@ -Valid-License-Identifier: GPL-1.0-or-later -Valid-License-Identifier: GPL-1.0+ -SPDX-URL: https://spdx.org/licenses/GPL-1.0.html -Usage-Guide: - The GNU General Public License (GPL) version 1 should not be used in new - code. For existing kernel code the 'or any later version' option is - required to be compatible with the general license of the project: GPLv2. - To use the license in source code, put the following SPDX tag/value pair - into a comment according to the placement guidelines in the licensing - rules documentation: - SPDX-License-Identifier: GPL-1.0-or-later -License-Text: - - GNU GENERAL PUBLIC LICENSE - Version 1, February 1989 - - Copyright (C) 1989 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The license agreements of most software companies try to keep users -at the mercy of those companies. By contrast, our General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. The -General Public License applies to the Free Software Foundation's -software and to any other program whose authors commit to using it. -You can use it for your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Specifically, the General Public License is designed to make -sure that you have the freedom to give away or sell copies of free -software, that you receive source code or can get it if you want it, -that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of a such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any program or other work which -contains a notice placed by the copyright holder saying it may be -distributed under the terms of this General Public License. The -"Program", below, refers to any such program or work, and a "work based -on the Program" means either the Program or any work containing the -Program or a portion of it, either verbatim or with modifications. Each -licensee is addressed as "you". - - 1. You may copy and distribute verbatim copies of the Program's source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this -General Public License and to the absence of any warranty; and give any -other recipients of the Program a copy of this General Public License -along with the Program. You may charge a fee for the physical act of -transferring a copy. - - 2. You may modify your copy or copies of the Program or any portion of -it, and copy and distribute such modifications under the terms of Paragraph -1 above, provided that you also do the following: - - a) cause the modified files to carry prominent notices stating that - you changed the files and the date of any change; and - - b) cause the whole of any work that you distribute or publish, that - in whole or in part contains the Program or any part thereof, either - with or without modifications, to be licensed at no charge to all - third parties under the terms of this General Public License (except - that you may choose to grant warranty protection to some or all - third parties, at your option). - - c) If the modified program normally reads commands interactively when - run, you must cause it, when started running for such interactive use - in the simplest and most usual way, to print or display an - announcement including an appropriate copyright notice and a notice - that there is no warranty (or else, saying that you provide a - warranty) and that users may redistribute the program under these - conditions, and telling the user how to view a copy of this General - Public License. - - d) You may charge a fee for the physical act of transferring a - copy, and you may at your option offer warranty protection in - exchange for a fee. - -Mere aggregation of another independent work with the Program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other work under the scope of these terms. - - 3. You may copy and distribute the Program (or a portion or derivative of -it, under Paragraph 2) in object code or executable form under the terms of -Paragraphs 1 and 2 above provided that you also do one of the following: - - a) accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Paragraphs 1 and 2 above; or, - - b) accompany it with a written offer, valid for at least three - years, to give any third party free (except for a nominal charge - for the cost of distribution) a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of - Paragraphs 1 and 2 above; or, - - c) accompany it with the information you received as to where the - corresponding source code may be obtained. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form alone.) - -Source code for a work means the preferred form of the work for making -modifications to it. For an executable file, complete source code means -all the source code for all modules it contains; but, as a special -exception, it need not include source code for modules which are standard -libraries that accompany the operating system on which the executable -file runs, or for standard header files or definitions files that -accompany that operating system. - - 4. You may not copy, modify, sublicense, distribute or transfer the -Program except as expressly provided under this General Public License. -Any attempt otherwise to copy, modify, sublicense, distribute or transfer -the Program is void, and will automatically terminate your rights to use -the Program under this License. However, parties who have received -copies, or rights to use copies, from you under this General Public -License will not have their licenses terminated so long as such parties -remain in full compliance. - - 5. By copying, distributing or modifying the Program (or any work based -on the Program) you indicate your acceptance of this license to do so, -and all its terms and conditions. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. - - 7. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of the license which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -the license, you may choose any version ever published by the Free Software -Foundation. - - 8. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to humanity, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - - To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively convey -the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19xx name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the -appropriate parts of the General Public License. Of course, the -commands you use may be called something other than `show w' and `show -c'; they could even be mouse-clicks or menu items--whatever suits your -program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - program `Gnomovision' (a program to direct compilers to make passes - at assemblers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/LICENSES/GPL-2.0 b/LICENSES/GPL-2.0 deleted file mode 100644 index 4d90dc142d..0000000000 --- a/LICENSES/GPL-2.0 +++ /dev/null @@ -1,355 +0,0 @@ -Valid-License-Identifier: GPL-2.0-only -Valid-License-Identifier: GPL-2.0 -Valid-License-Identifier: GPL-2.0-or-later -Valid-License-Identifier: GPL-2.0+ -SPDX-URL: https://spdx.org/licenses/GPL-2.0.html -Usage-Guide: - To use this license in source code, put one of the following SPDX - tag/value pairs into a comment according to the placement - guidelines in the licensing rules documentation. - For 'GNU General Public License (GPL) version 2 only' use: - SPDX-License-Identifier: GPL-2.0-only - For 'GNU General Public License (GPL) version 2 or any later version' use: - SPDX-License-Identifier: GPL-2.0-or-later -License-Text: - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/LICENSES/ISC b/LICENSES/ISC deleted file mode 100644 index 8953c31420..0000000000 --- a/LICENSES/ISC +++ /dev/null @@ -1,24 +0,0 @@ -Valid-License-Identifier: ISC -SPDX-URL: https://spdx.org/licenses/ISC.html -Usage-Guide: - To use the ISC License put the following SPDX tag/value pair into a - comment according to the placement guidelines in the licensing rules - documentation: - SPDX-License-Identifier: ISC -License-Text: - -ISC License - -Copyright (c) - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/LICENSES/Linux-syscall-note b/LICENSES/Linux-syscall-note deleted file mode 100644 index eb170681ba..0000000000 --- a/LICENSES/Linux-syscall-note +++ /dev/null @@ -1,25 +0,0 @@ -SPDX-Exception-Identifier: Linux-syscall-note -SPDX-URL: https://spdx.org/licenses/Linux-syscall-note.html -SPDX-Licenses: GPL-2.0-only, GPL-2.0, GPL-2.0-or-later, GPL-2.0+, GPL-1.0-or-later, GPL-1.0+, LGPL-2.0, LGPL-2.0+, LGPL-2.1, LGPL-2.1+ -Usage-Guide: - This exception is used together with one of the above SPDX-Licenses - to mark user space API (uapi) header files so they can be included - into non GPL compliant user space application code. - To use this exception add it with the keyword WITH to one of the - identifiers in the SPDX-Licenses tag: - SPDX-License-Identifier: WITH Linux-syscall-note -License-Text: - - NOTE! This copyright does *not* cover user programs that use kernel - services by normal system calls - this is merely considered normal use - of the kernel, and does *not* fall under the heading of "derived work". - Also note that the GPL below is copyrighted by the Free Software - Foundation, but the instance of code that it refers to (the Linux - kernel) is copyrighted by me and others who actually wrote it. - - Also note that the only valid version of the GPL as far as the kernel - is concerned is _this_ particular version of the license (ie v2, not - v2.2 or v3.x or whatever), unless explicitly otherwise stated. - - Linus Torvalds - diff --git a/LICENSES/MIT b/LICENSES/MIT deleted file mode 100644 index f33a68ceb3..0000000000 --- a/LICENSES/MIT +++ /dev/null @@ -1,30 +0,0 @@ -Valid-License-Identifier: MIT -SPDX-URL: https://spdx.org/licenses/MIT.html -Usage-Guide: - To use the MIT License put the following SPDX tag/value pair into a - comment according to the placement guidelines in the licensing rules - documentation: - SPDX-License-Identifier: MIT -License-Text: - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/UA2F b/UA2F new file mode 160000 index 0000000000..e1d6231ee6 --- /dev/null +++ b/UA2F @@ -0,0 +1 @@ +Subproject commit e1d6231ee6c5948d5a7f78b82c7f57f750b984ee diff --git a/config/Config-build.in b/config/Config-build.in deleted file mode 100644 index 41c1daccd9..0000000000 --- a/config/Config-build.in +++ /dev/null @@ -1,419 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2013 OpenWrt.org -# Copyright (C) 2016 LEDE Project - -config EXPERIMENTAL - bool "Enable experimental features by default" - help - Set this option to build with latest bleeding edge features - which may or may not work as expected. - If you would like to help the development of OpenWrt, you are - encouraged to set this option and provide feedback (both - positive and negative). But do so only if you know how to - recover your device in case of flashing potentially non-working - firmware. - - If you plan to use this build in production, say NO! - -menu "Global build settings" - - config JSON_OVERVIEW_IMAGE_INFO - bool "Create JSON info file overview per target" - default y - help - Create a JSON info file called profiles.json in the target - directory containing machine readable list of built profiles - and resulting images. - - config JSON_CYCLONEDX_SBOM - bool "Create CycloneDX SBOM JSON" - default BUILDBOT - help - Create a JSON files *.bom.cdx.json in the build - directory containing Software Bill Of Materials in CycloneDX - format. - - config ALL_NONSHARED - bool "Select all target specific packages by default" - select ALL_KMODS - default BUILDBOT - - config ALL_KMODS - bool "Select all kernel module packages by default" - - config ALL - bool "Select all userspace packages by default" - select ALL_KMODS - select ALL_NONSHARED - - config BUILDBOT - bool "Set build defaults for automatic builds (e.g. via buildbot)" - help - This option changes several defaults to be more suitable for - automatic builds. This includes the following changes: - - Deleting build directories after compiling (to save space) - - Enabling per-device rootfs support - ... - - config SIGNED_PACKAGES - bool "Cryptographically signed package lists" - default y - - config SIGNATURE_CHECK - bool "Enable signature checking in opkg" - default SIGNED_PACKAGES - - config DOWNLOAD_CHECK_CERTIFICATE - bool "Enable TLS certificate verification during package download" - default y - - config USE_APK - imply PACKAGE_apk-mbedtls - bool "Use APK instead of OPKG to build distribution (EXPERIMENTAL)" - - comment "General build options" - - config TESTING_KERNEL - bool "Use the testing kernel version" - depends on HAS_TESTING_KERNEL - default EXPERIMENTAL - help - If the target supports a newer kernel version than the default, - you can use this config option to enable it - - - config DISPLAY_SUPPORT - bool "Show packages that require graphics support (local or remote)" - - config BUILD_PATENTED - bool "Compile with support for patented functionality" - help - When this option is disabled, software which provides patented functionality - will not be built. In case software provides optional support for patented - functionality, this optional support will get disabled for this package. - - config BUILD_NLS - bool "Compile with full language support" - help - When this option is enabled, packages are built with the full versions of - iconv and GNU gettext instead of the default OpenWrt stubs. If uClibc is - used, it is also built with locale support. - - config SHADOW_PASSWORDS - bool - default y - - config CLEAN_IPKG - bool - prompt "Remove ipkg/opkg status data files in final images" - help - This removes all ipkg/opkg status data files from the target directory - before building the root filesystem. - - config IPK_FILES_CHECKSUMS - bool - prompt "Record files checksums in package metadata" - depends on !USE_APK - help - This makes file checksums part of package metadata. It increases size - but provides you with pkg_check command to check for flash corruptions. - - config INCLUDE_CONFIG - bool "Include build configuration in firmware" if DEVEL - help - If enabled, buildinfo files will be stored in /etc/build.* of firmware. - - config REPRODUCIBLE_DEBUG_INFO - bool "Make debug information reproducible" - default BUILDBOT - help - This strips the local build path out of debug information. This has the - advantage of making it reproducible, but the disadvantage of making local - debugging using ./scripts/remote-gdb harder, since the debug data will - no longer point to the full path on the build host. - - config COLLECT_KERNEL_DEBUG - bool - prompt "Collect kernel debug information" - select KERNEL_DEBUG_INFO - default BUILDBOT - help - This collects debugging symbols from the kernel and all compiled modules. - Useful for release builds, so that kernel issues can be debugged offline - later. - - menu "Kernel build options" - - source "config/Config-kernel.in" - - endmenu - - comment "Package build options" - - config DEBUG - bool - prompt "Compile packages with debugging info" - help - Adds -g3 to the CFLAGS. - - config USE_GC_SECTIONS - bool - prompt "Dead code and data elimination for all packages (EXPERIMENTAL)" - help - Places functions and data items into its own sections to use the linker's - garbage collection capabilites. - Packages can choose to opt-out via setting PKG_BUILD_FLAGS:=no-gc-sections - - config USE_LTO - bool - prompt "Use the link-time optimizer for all packages (EXPERIMENTAL)" - help - Adds LTO flags to the CFLAGS and LDFLAGS. - Packages can choose to opt-out via setting PKG_BUILD_FLAGS:=no-lto - - config MOLD - depends on (aarch64 || arm || i386 || i686 || m68k || powerpc || powerpc64 || sh4 || x86_64) - depends on !GCC_USE_VERSION_11 - def_bool $(shell, ./config/check-hostcxx.sh 10 2 12) - - config USE_MOLD - bool - prompt "Use the mold linker for all packages" - depends on MOLD - help - Link packages with mold, a modern linker - Packages can opt-out via setting PKG_BUILD_FLAGS:=no-mold - - config IPV6 - def_bool y - - comment "Stripping options" - - choice - prompt "Binary stripping method" - default USE_STRIP if USE_GLIBC - default USE_SSTRIP - help - Select the binary stripping method you wish to use. - - config NO_STRIP - bool "none" - help - This will install unstripped binaries (useful for native - compiling/debugging). - - config USE_STRIP - bool "strip" - help - This will install binaries stripped using strip from binutils. - - config USE_SSTRIP - bool "sstrip" - depends on !USE_GLIBC - help - This will install binaries stripped using sstrip. - endchoice - - config STRIP_ARGS - string - prompt "Strip arguments" - depends on USE_STRIP - default "--strip-unneeded --remove-section=.comment --remove-section=.note" if DEBUG - default "--strip-all" - help - Specifies arguments passed to the strip command when stripping binaries. - - config SSTRIP_DISCARD_TRAILING_ZEROES - bool "Strip trailing zero bytes" - depends on USE_SSTRIP && !USE_MOLD - default y - help - Use sstrip's -z option to discard trailing zero bytes - - config STRIP_KERNEL_EXPORTS - bool "Strip unnecessary exports from the kernel image" - depends on BROKEN - help - Reduces kernel size by stripping unused kernel exports from the kernel - image. Note that this might make the kernel incompatible with any kernel - modules that were not selected at the time the kernel image was created. - - config USE_MKLIBS - bool "Strip unnecessary functions from libraries" - help - Reduces libraries to only those functions that are necessary for using all - selected packages (including those selected as ). Note that this will - make the system libraries incompatible with most of the packages that are - not selected during the build process. - - comment "Hardening build options" - - config PKG_CHECK_FORMAT_SECURITY - bool - prompt "Enable gcc format-security" - default y - help - Add -Wformat -Werror=format-security to the CFLAGS. You can disable - this per package by adding PKG_CHECK_FORMAT_SECURITY:=0 in the package - Makefile. - - choice - prompt "User space ASLR PIE compilation" - default PKG_ASLR_PIE_NONE if ((SMALL_FLASH || LOW_MEMORY_FOOTPRINT) && !SDK) - default PKG_ASLR_PIE_REGULAR - help - Add -fPIC to CFLAGS and -specs=hardened-build-ld to LDFLAGS. - This enables package build as Position Independent Executables (PIE) - to protect against "return-to-text" attacks. This belongs to the - feature of Address Space Layout Randomisation (ASLR), which is - implemented by the kernel and the ELF loader by randomising the - location of memory allocations. This makes memory addresses harder - to predict when an attacker is attempting a memory-corruption exploit. - You can disable this per package by adding PKG_ASLR_PIE:=0 in the package - Makefile. - Be ware that ASLR increases the binary size. - config PKG_ASLR_PIE_NONE - bool "None" - help - PIE is deactivated for all applications - config PKG_ASLR_PIE_REGULAR - bool "Regular" - help - PIE is activated for some binaries, mostly network exposed applications - config PKG_ASLR_PIE_ALL - bool "All" - select BUSYBOX_DEFAULT_PIE - help - PIE is activated for all applications - endchoice - - choice - prompt "User space Stack-Smashing Protection" - default PKG_CC_STACKPROTECTOR_REGULAR - help - Enable GCC Stack Smashing Protection (SSP) for userspace applications - config PKG_CC_STACKPROTECTOR_NONE - bool "None" - config PKG_CC_STACKPROTECTOR_REGULAR - bool "Regular" - config PKG_CC_STACKPROTECTOR_STRONG - bool "Strong" - config PKG_CC_STACKPROTECTOR_ALL - bool "All" - endchoice - - choice - prompt "Kernel space Stack-Smashing Protection" - default KERNEL_CC_STACKPROTECTOR_REGULAR - help - Enable GCC Stack-Smashing Protection (SSP) for the kernel - config KERNEL_CC_STACKPROTECTOR_NONE - bool "None" - config KERNEL_CC_STACKPROTECTOR_REGULAR - bool "Regular" - config KERNEL_CC_STACKPROTECTOR_STRONG - bool "Strong" - endchoice - - config KERNEL_STACKPROTECTOR - bool - default KERNEL_CC_STACKPROTECTOR_REGULAR || KERNEL_CC_STACKPROTECTOR_STRONG - - config KERNEL_STACKPROTECTOR_STRONG - bool - default KERNEL_CC_STACKPROTECTOR_STRONG - - choice - prompt "Enable buffer-overflows detection (FORTIFY_SOURCE)" - default PKG_FORTIFY_SOURCE_1 - help - Enable the _FORTIFY_SOURCE macro which introduces additional - checks to detect buffer-overflows in the following standard library - functions: memcpy, mempcpy, memmove, memset, strcpy, stpcpy, - strncpy, strcat, strncat, sprintf, vsprintf, snprintf, vsnprintf, - gets. "Conservative" (_FORTIFY_SOURCE set to 1) only introduces - checks that shouldn't change the behavior of conforming programs, - while "aggressive" (_FORTIFY_SOURCES set to 2) some more checking is - added, but some conforming programs might fail. - config PKG_FORTIFY_SOURCE_NONE - bool "None" - config PKG_FORTIFY_SOURCE_1 - bool "Conservative" - config PKG_FORTIFY_SOURCE_2 - bool "Aggressive" - endchoice - - choice - prompt "Enable RELRO protection" - default PKG_RELRO_FULL - help - Enable a link-time protection known as RELRO (Relocation Read Only) - which helps to protect from certain type of exploitation techniques - altering the content of some ELF sections. "Partial" RELRO makes the - .dynamic section not writeable after initialization, introducing - almost no performance penalty, while "full" RELRO also marks the GOT - as read-only at the cost of initializing all of it at startup. - config PKG_RELRO_NONE - bool "None" - config PKG_RELRO_PARTIAL - bool "Partial" - config PKG_RELRO_FULL - bool "Full" - endchoice - - config TARGET_ROOTFS_SECURITY_LABELS - bool - select KERNEL_SQUASHFS_XATTR - select KERNEL_EXT4_FS_SECURITY - select KERNEL_F2FS_FS_SECURITY - select KERNEL_UBIFS_FS_SECURITY - select KERNEL_JFFS2_FS_SECURITY - - config SELINUX - bool "Enable SELinux" - select KERNEL_SECURITY_SELINUX - select TARGET_ROOTFS_SECURITY_LABELS - select PACKAGE_procd-selinux - select PACKAGE_busybox-selinux - help - This option enables SELinux kernel features, applies security labels - in squashfs rootfs and selects the selinux-variants of busybox and procd. - - Selecting this option results in about 0.5MiB of additional flash space - usage accounting for increased kernel and rootfs size. - - choice - prompt "default SELinux type" - depends on TARGET_ROOTFS_SECURITY_LABELS - default SELINUXTYPE_dssp - help - Select SELinux policy to be installed and used for applying rootfs labels. - - config SELINUXTYPE_targeted - bool "targeted" - select PACKAGE_refpolicy - help - SELinux Reference Policy (refpolicy) - - config SELINUXTYPE_dssp - bool "dssp" - select PACKAGE_selinux-policy - help - Defensec SELinux Security Policy -- OpenWrt edition - - endchoice - - config SECCOMP - bool "Enable SECCOMP" - select KERNEL_SECCOMP - select PACKAGE_procd-seccomp - depends on (aarch64 || arm || armeb || mips || mipsel || mips64 || mips64el || i386 || powerpc || x86_64) - depends on !TARGET_uml - default y - help - This option enables seccomp kernel features to safely - execute untrusted bytecode and selects the seccomp-variants - of procd - -endmenu diff --git a/config/Config-devel.in b/config/Config-devel.in deleted file mode 100644 index cbac91c09d..0000000000 --- a/config/Config-devel.in +++ /dev/null @@ -1,159 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2013 OpenWrt.org - -menuconfig DEVEL - bool "Advanced configuration options (for developers)" - - config BROKEN - bool "Show broken platforms / packages / devices" if DEVEL - - config BINARY_FOLDER - string "Binary folder" if DEVEL - default "" - help - Store built firmware images and filesystem images in this directory. - If not set, uses './bin/$(BOARD)' - - config DOWNLOAD_TOOL_CUSTOM - string "Use custom download tool" if DEVEL - default "" - help - Use and force custom download tool instead of relying on autoselection - between curl if available and wget as a fallback. - - download.pl supports 3 tools officially aria2c, curl and wget. - If one of the tool is used in this config, download.pl will use the - default args to make use of them. - - If the provided string is different than aria2c, curl or wget, the command - is used as is and the download url will be appended at the end of such command. - - config DOWNLOAD_FOLDER - string "Download folder" if DEVEL - default "" - help - Store downloaded source bundles in this directory. - If not set then defaults to './dl', which is removed by operations such as - 'git clean -xdf' or 'make distclean'. - This option is useful if you have a low bandwidth Internet connection, and by - setting a path outside the OpenWrt tree downloads will be saved. - - config LOCALMIRROR - string "Local mirror for source packages" if DEVEL - default "" - - config AUTOREBUILD - bool "Automatic rebuild of packages" if DEVEL - default y - help - Automatically rebuild packages when their files change. - - config AUTOREMOVE - bool "Automatic removal of build directories" if DEVEL - help - Automatically delete build directories after make target completed. - This allows you to symlink build_dir into a scratch location, e.g. a ramdisk, - which does not have enough space to keep a complete build_dir. - - config BUILD_ALL_HOST_TOOLS - bool "Compile all host tools" if DEVEL - help - Compile all host host tools even if not needed. This is needed to prepare a - universal precompiled host tools archive to use in another buildroot. - - config BUILD_SUFFIX - string "Build suffix to append to the target BUILD_DIR variable" if DEVEL - default "" - help - Build suffix to append to the BUILD_DIR variable, i.e: './build_dir/{target-build-dir}_$(BUILD_SUFFIX)'. - This allows you to switch to a different .config whilst retaining all the build - objects generated by the first .config - - config TARGET_ROOTFS_DIR - string "Override the default TARGET_ROOTFS_DIR variable" if DEVEL - default "" - help - Override the default TARGET_ROOTFS_DIR variable content $(BUILD_DIR) with - custom path. Use this option to re-define the location of the target - root filesystem directory. - - config CCACHE - bool "Use ccache" if DEVEL - help - Compiler cache; see https://ccache.samba.org/ - - config CCACHE_DIR - string "Set ccache directory" if CCACHE - default "" - help - Store ccache in this directory. - If not set, uses './.ccache' - - config KERNEL_CFLAGS - string "Kernel extra CFLAGS" if DEVEL - default "-falign-functions=32" if TARGET_bcm53xx - default "" - - config EXTERNAL_KERNEL_TREE - string "Use external kernel tree" if DEVEL - default "" - - config KERNEL_GIT_CLONE_URI - string "Enter git repository to clone" if DEVEL - default "" - help - Enter the full git repository path i.e.: - git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git - This will create a git clone of the kernel in your build directory. - - config KERNEL_GIT_LOCAL_REPOSITORY - string "Enter path to local reference repository" if DEVEL - depends on (KERNEL_GIT_CLONE_URI != "") - default "" - help - Enter a full pathname to a local reference git repository. - In this instance, the --reference option of git clone will - be used thus creating a quick local clone of your repo. - - config KERNEL_GIT_REF - string "Enter git ref at which to checkout" if DEVEL - depends on (KERNEL_GIT_CLONE_URI != "") - default "" - help - Enter the git ref at which to checkout the git repository - after it is cloned, and before making it a tar-ball. - It can be a git hash or a branch name. - If unused, the clone's repository HEAD will be checked-out. - - config KERNEL_GIT_MIRROR_HASH - string "Enter hash of Git kernel tree source checkout tarball" if DEVEL - depends on (KERNEL_GIT_CLONE_URI != "") - default "" - - config BUILD_LOG - bool "Enable log files during build process" if DEVEL - help - If enabled, log files will be written to the ./log directory. - - config BUILD_LOG_DIR - string "Log folder" if DEVEL - default "" - help - Store build logs in this directory. - If not set, uses './logs' - - config SRC_TREE_OVERRIDE - bool "Enable package source tree override" if DEVEL - help - If enabled, you can force a package to use a git tree as source - code instead of the normal tarball. Create a symlink 'git-src' - in the package directory, pointing to the .git tree that you want - to pull the source code from. - - config EXTRA_OPTIMIZATION - string "Additional compiler options" if DEVEL - default "-fno-caller-saves -fno-plt" if !CONFIG_EXTERNAL_TOOLCHAIN && !arc - default "-fno-caller-saves" - help - Extra target-independent optimizations to use when building for the target. diff --git a/config/Config-images.in b/config/Config-images.in deleted file mode 100644 index 47f3dfc0d9..0000000000 --- a/config/Config-images.in +++ /dev/null @@ -1,325 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2013 OpenWrt.org - -menu "Target Images" - - menuconfig TARGET_ROOTFS_INITRAMFS - bool "ramdisk" - default y if USES_INITRAMFS - help - Embed the root filesystem into the kernel (initramfs). - - choice - prompt "Compression" - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_apm821xx - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ath79_mikrotik - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_lantiq - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_mpc85xx - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ramips - default TARGET_INITRAMFS_COMPRESSION_ZSTD if TARGET_qualcommax - default TARGET_INITRAMFS_COMPRESSION_XZ if USES_SEPARATE_INITRAMFS - default TARGET_INITRAMFS_COMPRESSION_NONE - depends on TARGET_ROOTFS_INITRAMFS - help - Select ramdisk compression. - - config TARGET_INITRAMFS_COMPRESSION_NONE - bool "none" - - config TARGET_INITRAMFS_COMPRESSION_GZIP - bool "gzip" - - config TARGET_INITRAMFS_COMPRESSION_BZIP2 - bool "bzip2" - - config TARGET_INITRAMFS_COMPRESSION_LZMA - bool "lzma" - - config TARGET_INITRAMFS_COMPRESSION_LZO - bool "lzo" - - config TARGET_INITRAMFS_COMPRESSION_LZ4 - bool "lz4" - - config TARGET_INITRAMFS_COMPRESSION_XZ - bool "xz" - - config TARGET_INITRAMFS_COMPRESSION_ZSTD - bool "zstd" - endchoice - - config EXTERNAL_CPIO - string - prompt "Use external cpio" if TARGET_ROOTFS_INITRAMFS - default "" - help - Kernel uses specified external cpio as INITRAMFS_SOURCE. - - config TARGET_INITRAMFS_FORCE - bool "Force" - depends on TARGET_ROOTFS_INITRAMFS - help - Ignore the initramfs passed by the bootloader. - - config TARGET_ROOTFS_INITRAMFS_SEPARATE - bool "separate ramdisk" - depends on USES_SEPARATE_INITRAMFS && TARGET_ROOTFS_INITRAMFS && !TARGET_INITRAMFS_FORCE - default y if USES_SEPARATE_INITRAMFS - help - Generate separate initrd.cpio instead of embedding it. - This is useful for generating images with a dedicated - ramdisk e.g. in U-Boot's uImage and uImage.FIT formats. - - comment "Root filesystem archives" - - config TARGET_ROOTFS_CPIOGZ - bool "cpio.gz" - default y if USES_CPIOGZ - help - Build a compressed cpio archive of the root filesystem. - - config TARGET_ROOTFS_TARGZ - bool "tar.gz" - default y if USES_TARGZ - help - Build a compressed tar archive of the root filesystem. - - comment "Root filesystem images" - - menuconfig TARGET_ROOTFS_EXT4FS - bool "ext4" - default y if USES_EXT4 - help - Build an ext4 root filesystem. - - config TARGET_EXT4_RESERVED_PCT - int "Percentage of reserved blocks in root filesystem" - depends on TARGET_ROOTFS_EXT4FS - default 0 - help - Select the percentage of reserved blocks in the root filesystem. - - choice - prompt "Root filesystem block size" - default TARGET_EXT4_BLOCKSIZE_4K - depends on TARGET_ROOTFS_EXT4FS - help - Select the block size of the root filesystem. - - config TARGET_EXT4_BLOCKSIZE_4K - bool "4k" - - config TARGET_EXT4_BLOCKSIZE_2K - bool "2k" - - config TARGET_EXT4_BLOCKSIZE_1K - bool "1k" - endchoice - - config TARGET_EXT4_BLOCKSIZE - int - default 4096 if TARGET_EXT4_BLOCKSIZE_4K - default 2048 if TARGET_EXT4_BLOCKSIZE_2K - default 1024 if TARGET_EXT4_BLOCKSIZE_1K - depends on TARGET_ROOTFS_EXT4FS - - config TARGET_EXT4_JOURNAL - bool "Create a journaling filesystem" - depends on TARGET_ROOTFS_EXT4FS - default y - help - Create an ext4 filesystem with a journal. - - config TARGET_ROOTFS_JFFS2 - bool "jffs2" - depends on USES_JFFS2 - help - Build a JFFS2 root filesystem. - - config TARGET_ROOTFS_JFFS2_NAND - bool "jffs2 for NAND" - default y if USES_JFFS2_NAND - depends on USES_JFFS2_NAND - help - Build a JFFS2 root filesystem for NAND flash. - - menuconfig TARGET_ROOTFS_SQUASHFS - bool "squashfs" - default y if USES_SQUASHFS - help - Build a squashfs root filesystem. - - config TARGET_SQUASHFS_BLOCK_SIZE - int "Block size (in KiB)" - depends on TARGET_ROOTFS_SQUASHFS - default 64 if LOW_MEMORY_FOOTPRINT - default 1024 if (SMALL_FLASH && !LOW_MEMORY_FOOTPRINT) - default 256 - help - Select squashfs block size, must be one of: - 4, 8, 16, 32, 64, 128, 256, 512, 1024 - - menuconfig TARGET_ROOTFS_UBIFS - bool "ubifs" - default y if USES_UBIFS - depends on USES_UBIFS - help - Build a UBIFS root filesystem. - - choice - prompt "compression" - default TARGET_UBIFS_COMPRESSION_ZLIB - depends on TARGET_ROOTFS_UBIFS - help - Select compression type - - config TARGET_UBIFS_COMPRESSION_NONE - bool "none" - - config TARGET_UBIFS_COMPRESSION_LZO - bool "lzo" - - config TARGET_UBIFS_COMPRESSION_ZLIB - bool "zlib" - endchoice - - config TARGET_UBIFS_FREE_SPACE_FIXUP - bool "free space fixup" if TARGET_ROOTFS_UBIFS - default y - help - The filesystem free space has to be fixed up on first mount. - - config TARGET_UBIFS_JOURNAL_SIZE - string - prompt "journal size" if TARGET_ROOTFS_UBIFS - default "" - - config GRUB_IMAGES - bool "Build GRUB images (Linux x86 or x86_64 host only)" - depends on TARGET_x86 - depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS - select PACKAGE_grub2 - select PACKAGE_grub2-bios-setup - default y - - config GRUB_EFI_IMAGES - bool "Build GRUB EFI images" - depends on TARGET_x86 || TARGET_armsr || TARGET_loongarch64 - depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS - select PACKAGE_grub2 if TARGET_x86 - select PACKAGE_grub2-efi if TARGET_x86 - select PACKAGE_grub2-bios-setup if TARGET_x86 - select PACKAGE_grub2-efi-arm if TARGET_armsr - select PACKAGE_grub2-efi-loongarch64 if TARGET_loongarch64 - select PACKAGE_kmod-fs-vfat - default y - - config GRUB_CONSOLE - bool "Use Console Terminal (in addition to Serial)" - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - default y - - config GRUB_BAUDRATE - int "Serial port baud rate" - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - default 38400 if TARGET_x86_generic - default 115200 - - config GRUB_FLOWCONTROL - bool "Use RTE/CTS on serial console" - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - depends on TARGET_SERIAL != "" - - config GRUB_BOOTOPTS - string "Extra kernel boot options" - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - help - If you don't know, just leave it blank. - - config GRUB_TIMEOUT - string "Seconds to wait before booting the default entry" - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - default "5" - help - If you don't know, 5 seconds is a reasonable default. - - config GRUB_TITLE - string "Title for the menu entry in GRUB" - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - default "OpenWrt" - help - This is the title of the GRUB menu entry. - If unspecified, it defaults to OpenWrt. - - config ISO_IMAGES - bool "Build LiveCD image (ISO)" - depends on TARGET_x86 - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - - config VDI_IMAGES - bool "Build VirtualBox image files (VDI)" - depends on TARGET_x86 - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - select PACKAGE_kmod-e1000 - - config VMDK_IMAGES - bool "Build VMware image files (VMDK)" - depends on TARGET_x86 || TARGET_armsr - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - select PACKAGE_kmod-e1000 - - config VHDX_IMAGES - bool "Build Hyper-V image files (VHDX)" - depends on TARGET_x86 - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - select PACKAGE_kmod-e1000 - - config TARGET_SERIAL - string "Serial port device" - depends on TARGET_x86 || TARGET_armsr || TARGET_loongarch64 - default "ttyS0" - - config TARGET_IMAGES_GZIP - bool "GZip images" - depends on TARGET_ROOTFS_EXT4FS || TARGET_x86 || TARGET_armsr || TARGET_malta || TARGET_loongarch64 - default y - - comment "Image Options" - - source "target/linux/*/image/Config.in" - source "target/linux/*/*/image/Config.in" - - config TARGET_KERNEL_PARTSIZE - int "Kernel partition size (in MiB)" - depends on USES_BOOT_PART - default 8 if TARGET_apm821xx_sata - default 64 if TARGET_bcm27xx - default 128 if TARGET_armsr - default 16 - - config TARGET_ROOTFS_PARTSIZE - int "Root filesystem partition size (in MiB)" - depends on USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS - default 232 if TARGET_loongarch64 - default 448 if TARGET_mediatek - default 104 - help - Select the root filesystem partition size. - - config TARGET_ROOTFS_PARTNAME - string "Root partition on target device" - depends on GRUB_IMAGES || GRUB_EFI_IMAGES - help - Override the root partition on the final device. If left empty, - it will be mounted by PARTUUID which makes the kernel find the - appropriate disk automatically. - - config TARGET_ROOTFS_PERSIST_VAR - bool "Make /var persistent" - help - Do not symlink /var to /tmp, so that its content will persist - across reboots. When enabled, /var/run will still be linked - to /tmp/run. - -endmenu diff --git a/config/Config-kernel.in b/config/Config-kernel.in deleted file mode 100644 index 4bd2cde135..0000000000 --- a/config/Config-kernel.in +++ /dev/null @@ -1,1448 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2014 OpenWrt.org - -config KERNEL_BUILD_USER - string "Custom Kernel Build User Name" - default "builder" if BUILDBOT - default "" - help - Sets the Kernel build user string, which for example will be returned - by 'uname -a' on running systems. - If not set, uses system user at build time. - -config KERNEL_BUILD_DOMAIN - string "Custom Kernel Build Domain Name" - default "buildhost" if BUILDBOT - default "" - help - Sets the Kernel build domain string, which for example will be - returned by 'uname -a' on running systems. - If not set, uses system hostname at build time. - -config KERNEL_PRINTK - bool "Enable support for printk" - default y - -config KERNEL_SWAP - bool "Support for paging of anonymous memory (swap)" - default y if !SMALL_FLASH - -config KERNEL_PROC_STRIPPED - bool "Strip non-essential /proc functionality to reduce code size" - default y if SMALL_FLASH - -config KERNEL_DEBUG_FS - bool "Compile the kernel with debug filesystem enabled" - default y - help - debugfs is a virtual file system that kernel developers use to put - debugging files into. Enable this option to be able to read and - write to these files. Many common debugging facilities, such as - ftrace, require the existence of debugfs. - -config KERNEL_MIPS_FP_SUPPORT - bool - default y if TARGET_pistachio - -config KERNEL_ARM_PMU - bool - default y if TARGET_armsr_armv8 - depends on (arm || aarch64) - -config KERNEL_ARM_PMUV3 - bool - default y if TARGET_armsr_armv8 - depends on (arm_v7 || aarch64) && LINUX_6_6 - -config KERNEL_RISCV_PMU - bool - select KERNEL_RISCV_PMU_SBI - depends on riscv64 - -config KERNEL_RISCV_PMU_SBI - bool - depends on riscv64 - -config KERNEL_X86_VSYSCALL_EMULATION - bool "Enable vsyscall emulation" - depends on x86_64 - help - This enables emulation of the legacy vsyscall page. Disabling - it is roughly equivalent to booting with vsyscall=none, except - that it will also disable the helpful warning if a program - tries to use a vsyscall. With this option set to N, offending - programs will just segfault, citing addresses of the form - 0xffffffffff600?00. - - This option is required by many programs built before 2013, and - care should be used even with newer programs if set to N. - - Disabling this option saves about 7K of kernel size and - possibly 4K of additional runtime pagetable memory. - -config KERNEL_PERF_EVENTS - bool "Compile the kernel with performance events and counters" - select KERNEL_ARM_PMU if (arm || aarch64) - select KERNEL_ARM_PMUV3 if (arm_v7 || aarch64) && LINUX_6_6 - select KERNEL_RISCV_PMU if riscv64 - -config KERNEL_PROFILING - bool "Compile the kernel with profiling enabled" - select KERNEL_PERF_EVENTS - help - Enable the extended profiling support mechanisms used by profilers such - as OProfile. - -config KERNEL_RPI_AXIPERF - bool "Compile the kernel with RaspberryPi AXI Performance monitors" - default y - depends on KERNEL_PERF_EVENTS && TARGET_bcm27xx - -config KERNEL_UBSAN - bool "Compile the kernel with undefined behaviour sanity checker" - help - This option enables undefined behaviour sanity checker - Compile-time instrumentation is used to detect various undefined - behaviours in runtime. Various types of checks may be enabled - via boot parameter ubsan_handle - (see: Documentation/dev-tools/ubsan.rst). - -config KERNEL_UBSAN_SANITIZE_ALL - bool "Enable instrumentation for the entire kernel" - depends on KERNEL_UBSAN - default y - help - This option activates instrumentation for the entire kernel. - If you don't enable this option, you have to explicitly specify - UBSAN_SANITIZE := y for the files/directories you want to check for UB. - Enabling this option will get kernel image size increased - significantly. - -config KERNEL_UBSAN_ALIGNMENT - bool "Enable checking of pointers alignment" - depends on KERNEL_UBSAN - help - This option enables detection of unaligned memory accesses. - Enabling this option on architectures that support unaligned - accesses may produce a lot of false positives. - -config KERNEL_UBSAN_BOUNDS - bool "Perform array index bounds checking" - depends on KERNEL_UBSAN - help - This option enables detection of directly indexed out of bounds array - accesses, where the array size is known at compile time. Note that - this does not protect array overflows via bad calls to the - {str,mem}*cpy() family of functions (that is addressed by - FORTIFY_SOURCE). - -config KERNEL_UBSAN_NULL - bool "Enable checking of null pointers" - depends on KERNEL_UBSAN - help - This option enables detection of memory accesses via a - null pointer. - -config KERNEL_UBSAN_TRAP - bool "On Sanitizer warnings, abort the running kernel code" - depends on KERNEL_UBSAN - help - Building kernels with Sanitizer features enabled tends to grow the - kernel size by around 5%, due to adding all the debugging text on - failure paths. To avoid this, Sanitizer instrumentation can just - issue a trap. This reduces the kernel size overhead but turns all - warnings (including potentially harmless conditions) into full - exceptions that abort the running kernel code (regardless of context, - locks held, etc), which may destabilize the system. For some system - builders this is an acceptable trade-off. - -config KERNEL_KASAN - bool "Compile the kernel with KASan: runtime memory debugger" - select KERNEL_SLUB_DEBUG - depends on (x86_64 || aarch64 || arm || powerpc || riscv64) - help - Enables kernel address sanitizer - runtime memory debugger, - designed to find out-of-bounds accesses and use-after-free bugs. - This is strictly a debugging feature and it requires a gcc version - of 4.9.2 or later. Detection of out of bounds accesses to stack or - global variables requires gcc 5.0 or later. - This feature consumes about 1/8 of available memory and brings about - ~x3 performance slowdown. - For better error detection enable CONFIG_STACKTRACE. - Currently CONFIG_KASAN doesn't work with CONFIG_DEBUG_SLAB - (the resulting kernel does not boot). - -config KERNEL_KASAN_VMALLOC - bool "Back mappings in vmalloc space with real shadow memory" - depends on KERNEL_KASAN - help - By default, the shadow region for vmalloc space is the read-only - zero page. This means that KASAN cannot detect errors involving - vmalloc space. - - Enabling this option will hook in to vmap/vmalloc and back those - mappings with real shadow memory allocated on demand. This allows - for KASAN to detect more sorts of errors (and to support vmapped - stacks), but at the cost of higher memory usage. - - This option depends on HAVE_ARCH_KASAN_VMALLOC, but we can't - depend on that in here, so it is possible that enabling this - will have no effect. - -if KERNEL_KASAN -choice - prompt "KASAN mode" - depends on KERNEL_KASAN - default KERNEL_KASAN_GENERIC - help - KASAN has three modes: - - 1. Generic KASAN (supported by many architectures, enabled with - CONFIG_KASAN_GENERIC, similar to userspace ASan), - 2. Software Tag-Based KASAN (arm64 only, based on software memory - tagging, enabled with CONFIG_KASAN_SW_TAGS, similar to userspace - HWASan), and - 3. Hardware Tag-Based KASAN (arm64 only, based on hardware memory - tagging, enabled with CONFIG_KASAN_HW_TAGS). - -config KERNEL_KASAN_GENERIC - bool "Generic KASAN" - select KERNEL_SLUB_DEBUG - help - Enables Generic KASAN. - - Consumes about 1/8th of available memory at kernel start and adds an - overhead of ~50% for dynamic allocations. - The performance slowdown is ~x3. - -config KERNEL_KASAN_SW_TAGS - bool "Software Tag-Based KASAN" - depends on aarch64 - select KERNEL_SLUB_DEBUG - help - Enables Software Tag-Based KASAN. - - Supported only on arm64 CPUs and relies on Top Byte Ignore. - - Consumes about 1/16th of available memory at kernel start and - add an overhead of ~20% for dynamic allocations. - - May potentially introduce problems related to pointer casting and - comparison, as it embeds a tag into the top byte of each pointer. - -config KERNEL_KASAN_HW_TAGS - bool "Hardware Tag-Based KASAN" - depends on aarch64 - select KERNEL_SLUB_DEBUG - select KERNEL_ARM64_MTE - help - Enables Hardware Tag-Based KASAN. - - Supported only on arm64 CPUs starting from ARMv8.5 and relies on - Memory Tagging Extension and Top Byte Ignore. - - Consumes about 1/32nd of available memory. - - May potentially introduce problems related to pointer casting and - comparison, as it embeds a tag into the top byte of each pointer. - -endchoice - - config KERNEL_ARM64_MTE - def_bool n - -endif - -choice - prompt "Instrumentation type" - depends on KERNEL_KASAN - depends on !KERNEL_KASAN_HW_TAGS - default KERNEL_KASAN_OUTLINE - -config KERNEL_KASAN_OUTLINE - bool "Outline instrumentation" - help - Before every memory access compiler insert function call - __asan_load*/__asan_store*. These functions performs check - of shadow memory. This is slower than inline instrumentation, - however it doesn't bloat size of kernel's .text section so - much as inline does. - -config KERNEL_KASAN_INLINE - bool "Inline instrumentation" - help - Compiler directly inserts code checking shadow memory before - memory accesses. This is faster than outline (in some workloads - it gives about x2 boost over outline instrumentation), but - make kernel's .text size much bigger. - This requires a gcc version of 5.0 or later. - -endchoice - -config KERNEL_KCOV - bool "Compile the kernel with code coverage for fuzzing" - select KERNEL_DEBUG_FS - help - KCOV exposes kernel code coverage information in a form suitable - for coverage-guided fuzzing (randomized testing). - - If RANDOMIZE_BASE is enabled, PC values will not be stable across - different machines and across reboots. If you need stable PC values, - disable RANDOMIZE_BASE. - - For more details, see Documentation/kcov.txt. - -config KERNEL_KCOV_ENABLE_COMPARISONS - bool "Enable comparison operands collection by KCOV" - depends on KERNEL_KCOV - help - KCOV also exposes operands of every comparison in the instrumented - code along with operand sizes and PCs of the comparison instructions. - These operands can be used by fuzzing engines to improve the quality - of fuzzing coverage. - -config KERNEL_KCOV_INSTRUMENT_ALL - bool "Instrument all code by default" - depends on KERNEL_KCOV - default y if KERNEL_KCOV - help - If you are doing generic system call fuzzing (like e.g. syzkaller), - then you will want to instrument the whole kernel and you should - say y here. If you are doing more targeted fuzzing (like e.g. - filesystem fuzzing with AFL) then you will want to enable coverage - for more specific subsets of files, and should say n here. - -config KERNEL_TASKSTATS - bool "Compile the kernel with task resource/io statistics and accounting" - help - Enable the collection and publishing of task/io statistics and - accounting. Enable this option to enable i/o monitoring in system - monitors. - -if KERNEL_TASKSTATS - - config KERNEL_TASK_DELAY_ACCT - def_bool y - - config KERNEL_TASK_IO_ACCOUNTING - def_bool y - - config KERNEL_TASK_XACCT - def_bool y - -endif - -config KERNEL_KALLSYMS - bool "Compile the kernel with symbol table information" - default y if !SMALL_FLASH - help - This will give you more information in stack traces from kernel oopses. - -config KERNEL_FTRACE - bool "Compile the kernel with tracing support" - depends on !TARGET_uml - -config KERNEL_FTRACE_SYSCALLS - bool "Trace system calls" - depends on KERNEL_FTRACE - -config KERNEL_ENABLE_DEFAULT_TRACERS - bool "Trace process context switches and events" - depends on KERNEL_FTRACE - -config KERNEL_FUNCTION_TRACER - bool "Function tracer" - depends on KERNEL_FTRACE - -config KERNEL_FUNCTION_GRAPH_TRACER - bool "Function graph tracer" - depends on KERNEL_FUNCTION_TRACER - -config KERNEL_DYNAMIC_FTRACE - bool "Enable/disable function tracing dynamically" - depends on KERNEL_FUNCTION_TRACER - -config KERNEL_FUNCTION_PROFILER - bool "Function profiler" - depends on KERNEL_FUNCTION_TRACER - -config KERNEL_IRQSOFF_TRACER - bool "Interrupts-off Latency Tracer" - depends on KERNEL_FTRACE - help - This option measures the time spent in irqs-off critical - sections, with microsecond accuracy. - - The default measurement method is a maximum search, which is - disabled by default and can be runtime (re-)started - via: - - echo 0 > /sys/kernel/debug/tracing/tracing_max_latency - - (Note that kernel size and overhead increase with this option - enabled. This option and the preempt-off timing option can be - used together or separately.) - -config KERNEL_PREEMPT_TRACER - bool "Preemption-off Latency Tracer" - depends on KERNEL_FTRACE - help - This option measures the time spent in preemption-off critical - sections, with microsecond accuracy. - - The default measurement method is a maximum search, which is - disabled by default and can be runtime (re-)started - via: - - echo 0 > /sys/kernel/debug/tracing/tracing_max_latency - - (Note that kernel size and overhead increase with this option - enabled. This option and the irqs-off timing option can be - used together or separately.) - -config KERNEL_HIST_TRIGGERS - bool "Histogram triggers" - depends on KERNEL_FTRACE - help - Hist triggers allow one or more arbitrary trace event fields to be - aggregated into hash tables and dumped to stdout by reading a - debugfs/tracefs file. They're useful for gathering quick and dirty - (though precise) summaries of event activity as an initial guide for - further investigation using more advanced tools. - - Inter-event tracing of quantities such as latencies is also - supported using hist triggers under this option. - -config KERNEL_DEBUG_KERNEL - bool - -config KERNEL_DEBUG_INFO - bool "Compile the kernel with debug information" - default y if !SMALL_FLASH - select KERNEL_DEBUG_KERNEL - help - This will compile your kernel and modules with debug information. - -config KERNEL_DEBUG_INFO_BTF - bool "Enable additional BTF type information" - depends on !HOST_OS_MACOS - depends on KERNEL_DEBUG_INFO && !KERNEL_DEBUG_INFO_REDUCED - select DWARVES - help - Generate BPF Type Format (BTF) information from DWARF debug info. - Turning this on expects presence of pahole tool, which will convert - DWARF type info into equivalent deduplicated BTF type info. - - Required to run BPF CO-RE applications. - -config KERNEL_DEBUG_INFO_BTF_MODULES - def_bool y - depends on KERNEL_DEBUG_INFO_BTF - -config KERNEL_MODULE_ALLOW_BTF_MISMATCH - bool "Allow loading modules with non-matching BTF type info" - depends on KERNEL_DEBUG_INFO_BTF_MODULES - help - For modules whose split BTF does not match vmlinux, load without - BTF rather than refusing to load. The default behavior with - module BTF enabled is to reject modules with such mismatches; - this option will still load module BTF where possible but ignore - it when a mismatch is found. - -config KERNEL_DEBUG_INFO_REDUCED - bool "Reduce debugging information" - default y - depends on KERNEL_DEBUG_INFO - help - If you say Y here gcc is instructed to generate less debugging - information for structure types. This means that tools that - need full debugging information (like kgdb or systemtap) won't - be happy. But if you merely need debugging information to - resolve line numbers there is no loss. Advantage is that - build directory object sizes shrink dramatically over a full - DEBUG_INFO build and compile times are reduced too. - Only works with newer gcc versions. - -config KERNEL_FRAME_WARN - int - range 0 8192 - default 1280 if KERNEL_KASAN && !ARCH_64BIT - default 1024 if !ARCH_64BIT - default 2048 if ARCH_64BIT - help - Tell the compiler to warn at build time for stack frames larger than this. - Setting this too low will cause a lot of warnings. - Setting it to 0 disables the warning. - -# KERNEL_DEBUG_LL symbols must have the default value set as otherwise -# KConfig wont evaluate them unless KERNEL_EARLY_PRINTK is selected -# which means that buildroot wont override the DEBUG_LL symbols in target -# kernel configurations and lead to devices that dont have working console -config KERNEL_DEBUG_LL_UART_NONE - bool - default n - depends on arm - -config KERNEL_DEBUG_LL - bool - default n - depends on arm - select KERNEL_DEBUG_LL_UART_NONE - help - ARM low level debugging. - -config KERNEL_DEBUG_VIRTUAL - bool "Compile the kernel with VM translations debugging" - select KERNEL_DEBUG_KERNEL - help - Enable checks sanity checks to catch invalid uses of - virt_to_phys()/phys_to_virt() against the non-linear address space. - -config KERNEL_DYNAMIC_DEBUG - bool "Compile the kernel with dynamic printk" - select KERNEL_DEBUG_FS - help - Compiles debug level messages into the kernel, which would not - otherwise be available at runtime. These messages can then be - enabled/disabled based on various levels of scope - per source file, - function, module, format string, and line number. This mechanism - implicitly compiles in all pr_debug() and dev_dbg() calls, which - enlarges the kernel text size by about 2%. - -config KERNEL_EARLY_PRINTK - bool "Compile the kernel with early printk" - default y if TARGET_bcm53xx - depends on arm - select KERNEL_DEBUG_KERNEL - select KERNEL_DEBUG_LL if arm - help - Compile the kernel with early printk support. This is only useful for - debugging purposes to send messages over the serial console in early boot. - Enable this to debug early boot problems. - -config KERNEL_KPROBES - bool "Compile the kernel with kprobes support" - select KERNEL_FTRACE - select KERNEL_PERF_EVENTS - help - Compiles the kernel with KPROBES support, which allows you to trap - at almost any kernel address and execute a callback function. - register_kprobe() establishes a probepoint and specifies the - callback. Kprobes is useful for kernel debugging, non-intrusive - instrumentation and testing. - If in doubt, say "N". - -config KERNEL_KPROBE_EVENTS - bool - default y if KERNEL_KPROBES - -config KERNEL_BPF_EVENTS - bool "Compile the kernel with BPF event support" - select KERNEL_KPROBES - help - Allows to attach BPF programs to kprobe, uprobe and tracepoint events. - This is required to use BPF maps of type BPF_MAP_TYPE_PERF_EVENT_ARRAY - for sending data from BPF programs to user-space for post-processing - or logging. - -config KERNEL_PROBE_EVENTS_BTF_ARGS - bool "Support BTF function arguments for probe events" - depends on KERNEL_DEBUG_INFO_BTF && KERNEL_KPROBE_EVENTS && LINUX_6_6 - -config KERNEL_BPF_KPROBE_OVERRIDE - bool - depends on KERNEL_KPROBES - default n - -config KERNEL_AIO - bool "Compile the kernel with asynchronous IO support" - default y if !SMALL_FLASH - -config KERNEL_IO_URING - bool "Compile the kernel with io_uring support" - depends on !SMALL_FLASH - default y if (x86_64 || aarch64) - -config KERNEL_FHANDLE - bool "Compile the kernel with support for fhandle syscalls" - default y if !SMALL_FLASH - -config KERNEL_FANOTIFY - bool "Compile the kernel with modern file notification support" - default y if !SMALL_FLASH - -config KERNEL_BLK_DEV_BSG - bool "Compile the kernel with SCSI generic v4 support for any block device" - -config KERNEL_TRANSPARENT_HUGEPAGE - bool - -choice - prompt "Transparent Hugepage Support sysfs defaults" - depends on KERNEL_TRANSPARENT_HUGEPAGE - default KERNEL_TRANSPARENT_HUGEPAGE_ALWAYS - - config KERNEL_TRANSPARENT_HUGEPAGE_ALWAYS - bool "always" - - config KERNEL_TRANSPARENT_HUGEPAGE_MADVISE - bool "madvise" -endchoice - -config KERNEL_HUGETLBFS - bool - -config KERNEL_HUGETLB_PAGE - bool "Compile the kernel with HugeTLB support" - select KERNEL_TRANSPARENT_HUGEPAGE - select KERNEL_HUGETLBFS - -config KERNEL_MAGIC_SYSRQ - bool "Compile the kernel with SysRq support" - default y - -config KERNEL_DEBUG_PINCTRL - bool "Compile the kernel with pinctrl debugging" - select KERNEL_DEBUG_KERNEL - -config KERNEL_DEBUG_GPIO - bool "Compile the kernel with gpio debugging" - select KERNEL_DEBUG_KERNEL - -config KERNEL_COREDUMP - bool - -config KERNEL_ELF_CORE - bool "Enable process core dump support" - select KERNEL_COREDUMP - default y if !SMALL_FLASH - -config KERNEL_PROVE_LOCKING - bool "Enable kernel lock checking" - select KERNEL_DEBUG_KERNEL - -config KERNEL_SOFTLOCKUP_DETECTOR - bool "Compile the kernel with detect Soft Lockups" - depends on KERNEL_DEBUG_KERNEL - help - Say Y here to enable the kernel to act as a watchdog to detect - soft lockups. - - Softlockups are bugs that cause the kernel to loop in kernel - mode for more than 20 seconds, without giving other tasks a - chance to run. The current stack trace is displayed upon - detection and the system will stay locked up. - -config KERNEL_HARDLOCKUP_DETECTOR - bool "Compile the kernel with detect Hard Lockups" - depends on KERNEL_DEBUG_KERNEL - help - Say Y here to enable the kernel to act as a watchdog to detect - hard lockups. - - Hardlockups are bugs that cause the CPU to loop in kernel mode - for more than 10 seconds, without letting other interrupts have a - chance to run. The current stack trace is displayed upon detection - and the system will stay locked up. - -config KERNEL_DETECT_HUNG_TASK - bool "Compile the kernel with detect Hung Tasks" - depends on KERNEL_DEBUG_KERNEL - default KERNEL_SOFTLOCKUP_DETECTOR - help - Say Y here to enable the kernel to detect "hung tasks", - which are bugs that cause the task to be stuck in - uninterruptible "D" state indefinitely. - - When a hung task is detected, the kernel will print the - current stack trace (which you should report), but the - task will stay in uninterruptible state. If lockdep is - enabled then all held locks will also be reported. This - feature has negligible overhead. - -config KERNEL_WQ_WATCHDOG - bool "Compile the kernel with detect Workqueue Stalls" - depends on KERNEL_DEBUG_KERNEL - help - Say Y here to enable stall detection on workqueues. If a - worker pool doesn't make forward progress on a pending work - item for over a given amount of time, 30s by default, a - warning message is printed along with dump of workqueue - state. This can be configured through kernel parameter - "workqueue.watchdog_thresh" and its sysfs counterpart. - -config KERNEL_DEBUG_ATOMIC_SLEEP - bool "Compile the kernel with sleep inside atomic section checking" - depends on KERNEL_DEBUG_KERNEL - help - If you say Y here, various routines which may sleep will become very - noisy if they are called inside atomic sections: when a spinlock is - held, inside an rcu read side critical section, inside preempt disabled - sections, inside an interrupt, etc... - -config KERNEL_DEBUG_VM - bool "Compile the kernel with debug VM" - depends on KERNEL_DEBUG_KERNEL - help - Enable this to turn on extended checks in the virtual-memory system - that may impact performance. - - If unsure, say N. - -config KERNEL_PRINTK_TIME - bool "Enable printk timestamps" - default y - -config KERNEL_SLUB_DEBUG - bool "Enable SLUB debugging support" - help - This enables various debugging features: - - Accepts "slub_debug" kernel parameter - - Provides caches debugging options (e.g. tracing, validating) - - Adds /sys/kernel/slab/ attrs for reading amounts of *objects* - - Enables /proc/slabinfo support - - Prints info when running out of memory - - Enabling this can result in a significant increase of code size. - -config KERNEL_SLUB_DEBUG_ON - depends on KERNEL_SLUB_DEBUG - bool "Boot kernel with basic caches debugging enabled" - help - This enables by default sanity_checks, red_zone, poison and store_user - debugging options for all caches. - -config KERNEL_SLABINFO - select KERNEL_SLUB_DEBUG - select KERNEL_SLUB_DEBUG_ON - bool "Enable /proc slab debug info" - -config KERNEL_PROC_PAGE_MONITOR - bool "Enable /proc page monitoring" - -config KERNEL_RELAY - bool - -config KERNEL_KEXEC - bool "Enable kexec support" - -config KERNEL_PROC_VMCORE - bool - -config KERNEL_PROC_KCORE - bool - -config KERNEL_CRASH_DUMP - depends on i386 || x86_64 || arm || armeb - select KERNEL_KEXEC - select KERNEL_PROC_VMCORE - select KERNEL_PROC_KCORE - bool "Enable support for kexec crashdump" - default y - -config USE_RFKILL - bool "Enable rfkill support" - default RFKILL_SUPPORT - -config USE_SPARSE - bool "Enable sparse check during kernel build" - -config KERNEL_DEVTMPFS - bool "Compile the kernel with device tmpfs enabled" - help - devtmpfs is a simple, kernel-managed /dev filesystem. The kernel creates - devices nodes for all registered devices to simplify boot, but leaves more - complex tasks to userspace (e.g. udev). - -if KERNEL_DEVTMPFS - - config KERNEL_DEVTMPFS_MOUNT - bool "Automatically mount devtmpfs after root filesystem is mounted" - -endif - -config KERNEL_KEYS - bool "Enable kernel access key retention support" - default !SMALL_FLASH - -config KERNEL_PERSISTENT_KEYRINGS - bool "Enable kernel persistent keyrings" - depends on KERNEL_KEYS - -config KERNEL_KEYS_REQUEST_CACHE - bool "Enable temporary caching of the last request_key() result" - depends on KERNEL_KEYS - -config KERNEL_BIG_KEYS - bool "Enable large payload keys on kernel keyrings" - depends on KERNEL_KEYS - -# -# CGROUP support symbols -# - -config KERNEL_CGROUPS - bool "Enable kernel cgroups" - default y if !SMALL_FLASH - -if KERNEL_CGROUPS - - config KERNEL_CGROUP_DEBUG - bool "Example debug cgroup subsystem" - help - This option enables a simple cgroup subsystem that - exports useful debugging information about the cgroups - framework. - - config KERNEL_FREEZER - bool - - config KERNEL_CGROUP_FREEZER - bool "legacy Freezer cgroup subsystem" - select KERNEL_FREEZER - help - Provides a way to freeze and unfreeze all tasks in a - cgroup. - (legacy cgroup1-only controller, in cgroup2 freezer - is integrated in the Memory controller) - - config KERNEL_CGROUP_DEVICE - bool "legacy Device controller for cgroups" - help - Provides a cgroup implementing whitelists for devices which - a process in the cgroup can mknod or open. - (legacy cgroup1-only controller) - - config KERNEL_CGROUP_HUGETLB - bool "HugeTLB controller" - select KERNEL_HUGETLB_PAGE - - config KERNEL_CGROUP_PIDS - bool "PIDs cgroup subsystem" - default y - help - Provides enforcement of process number limits in the scope of a - cgroup. - - config KERNEL_CGROUP_RDMA - bool "RDMA controller for cgroups" - default y - - config KERNEL_CGROUP_BPF - bool "Support for eBPF programs attached to cgroups" - default y - - config KERNEL_CPUSETS - bool "Cpuset support" - default y - help - This option will let you create and manage CPUSETs which - allow dynamically partitioning a system into sets of CPUs and - Memory Nodes and assigning tasks to run only within those sets. - This is primarily useful on large SMP or NUMA systems. - - config KERNEL_PROC_PID_CPUSET - bool "Include legacy /proc//cpuset file" - depends on KERNEL_CPUSETS - - config KERNEL_CGROUP_CPUACCT - bool "Simple CPU accounting cgroup subsystem" - default y - help - Provides a simple Resource Controller for monitoring the - total CPU consumed by the tasks in a cgroup. - - config KERNEL_RESOURCE_COUNTERS - bool "Resource counters" - default y - help - This option enables controller independent resource accounting - infrastructure that works with cgroups. - - config KERNEL_MM_OWNER - bool - default y if KERNEL_MEMCG - - config KERNEL_MEMCG - bool "Memory Resource Controller for Control Groups" - default y - select KERNEL_FREEZER - depends on KERNEL_RESOURCE_COUNTERS - help - Provides a memory resource controller that manages both anonymous - memory and page cache. (See Documentation/cgroups/memory.txt) - - Note that setting this option increases fixed memory overhead - associated with each page of memory in the system. By this, - 20(40)bytes/PAGE_SIZE on 32(64)bit system will be occupied by memory - usage tracking struct at boot. Total amount of this is printed out - at boot. - - Only enable when you're ok with these tradeoffs and really - sure you need the memory resource controller. Even when you enable - this, you can set "cgroup_disable=memory" at your boot option to - disable memory resource controller and you can avoid overheads - (but lose benefits of memory resource controller). - - This config option also selects MM_OWNER config option, which - could in turn add some fork/exit overhead. - - config KERNEL_MEMCG_SWAP - bool "Memory Resource Controller Swap Extension" - default y - depends on KERNEL_MEMCG - help - Add swap management feature to memory resource controller. When you - enable this, you can limit mem+swap usage per cgroup. In other words, - when you disable this, memory resource controller has no cares to - usage of swap...a process can exhaust all of the swap. This extension - is useful when you want to avoid exhaustion swap but this itself - adds more overheads and consumes memory for remembering information. - Especially if you use 32bit system or small memory system, please - be careful about enabling this. When memory resource controller - is disabled by boot option, this will be automatically disabled and - there will be no overhead from this. Even when you set this config=y, - if boot option "swapaccount=0" is set, swap will not be accounted. - Now, memory usage of swap_cgroup is 2 bytes per entry. If swap page - size is 4096bytes, 512k per 1Gbytes of swap. - - config KERNEL_MEMCG_SWAP_ENABLED - bool "Memory Resource Controller Swap Extension enabled by default" - depends on KERNEL_MEMCG_SWAP - help - Memory Resource Controller Swap Extension comes with its price in - a bigger memory consumption. General purpose distribution kernels - which want to enable the feature but keep it disabled by default - and let the user enable it by swapaccount boot command line - parameter should have this option unselected. - - Those who want to have the feature enabled by default should - select this option (if, for some reason, they need to disable it, - then swapaccount=0 does the trick). - - - config KERNEL_MEMCG_KMEM - bool "Memory Resource Controller Kernel Memory accounting (EXPERIMENTAL)" - default y - depends on KERNEL_MEMCG - help - The Kernel Memory extension for Memory Resource Controller can limit - the amount of memory used by kernel objects in the system. Those are - fundamentally different from the entities handled by the standard - Memory Controller, which are page-based, and can be swapped. Users of - the kmem extension can use it to guarantee that no group of processes - will ever exhaust kernel resources alone. - - config KERNEL_CGROUP_PERF - bool "Enable perf_event per-cpu per-container group (cgroup) monitoring" - select KERNEL_PERF_EVENTS - help - This option extends the per-cpu mode to restrict monitoring to - threads which belong to the cgroup specified and run on the - designated cpu. - - menuconfig KERNEL_CGROUP_SCHED - bool "Group CPU scheduler" - default y - help - This feature lets CPU scheduler recognize task groups and control CPU - bandwidth allocation to such task groups. It uses cgroups to group - tasks. - - if KERNEL_CGROUP_SCHED - - config KERNEL_FAIR_GROUP_SCHED - bool "Group scheduling for SCHED_OTHER" - default y - - config KERNEL_CFS_BANDWIDTH - bool "CPU bandwidth provisioning for FAIR_GROUP_SCHED" - default y - depends on KERNEL_FAIR_GROUP_SCHED - help - This option allows users to define CPU bandwidth rates (limits) for - tasks running within the fair group scheduler. Groups with no limit - set are considered to be unconstrained and will run with no - restriction. - See tip/Documentation/scheduler/sched-bwc.txt for more information. - - config KERNEL_RT_GROUP_SCHED - bool "Group scheduling for SCHED_RR/FIFO" - default y - help - This feature lets you explicitly allocate real CPU bandwidth - to task groups. If enabled, it will also make it impossible to - schedule realtime tasks for non-root users until you allocate - realtime bandwidth for them. - - endif - - config KERNEL_BLK_CGROUP - bool "Block IO controller" - default y - help - Generic block IO controller cgroup interface. This is the common - cgroup interface which should be used by various IO controlling - policies. - - Currently, CFQ IO scheduler uses it to recognize task groups and - control disk bandwidth allocation (proportional time slice allocation) - to such task groups. It is also used by bio throttling logic in - block layer to implement upper limit in IO rates on a device. - - This option only enables generic Block IO controller infrastructure. - One needs to also enable actual IO controlling logic/policy. For - enabling proportional weight division of disk bandwidth in CFQ, set - CONFIG_CFQ_GROUP_IOSCHED=y; for enabling throttling policy, set - CONFIG_BLK_DEV_THROTTLING=y. - - if KERNEL_BLK_CGROUP - - config KERNEL_CFQ_GROUP_IOSCHED - bool "Proportional weight of disk bandwidth in CFQ" - - config KERNEL_BLK_DEV_THROTTLING - bool "Enable throttling policy" - default y - - config KERNEL_BLK_DEV_THROTTLING_LOW - bool "Block throttling .low limit interface support (EXPERIMENTAL)" - depends on KERNEL_BLK_DEV_THROTTLING - endif - - config KERNEL_DEBUG_BLK_CGROUP - bool "Enable Block IO controller debugging" - depends on KERNEL_BLK_CGROUP - help - Enable some debugging help. Currently it exports additional stat - files in a cgroup which can be useful for debugging. - - config KERNEL_NET_CLS_CGROUP - bool "legacy Control Group Classifier" - - config KERNEL_CGROUP_NET_CLASSID - bool "legacy Network classid cgroup" - - config KERNEL_CGROUP_NET_PRIO - bool "legacy Network priority cgroup" - -endif - -# -# Namespace support symbols -# - -config KERNEL_NAMESPACES - bool "Enable kernel namespaces" - default y if !SMALL_FLASH - -if KERNEL_NAMESPACES - - config KERNEL_UTS_NS - bool "UTS namespace" - default y - help - In this namespace, tasks see different info provided - with the uname() system call. - - config KERNEL_IPC_NS - bool "IPC namespace" - default y - help - In this namespace, tasks work with IPC ids which correspond to - different IPC objects in different namespaces. - - config KERNEL_USER_NS - bool "User namespace (EXPERIMENTAL)" - default y - help - This allows containers, i.e. vservers, to use user namespaces - to provide different user info for different servers. - - config KERNEL_PID_NS - bool "PID Namespaces" - default y - help - Support process id namespaces. This allows having multiple - processes with the same pid as long as they are in different - pid namespaces. This is a building block of containers. - - config KERNEL_NET_NS - bool "Network namespace" - default y - help - Allow user space to create what appear to be multiple instances - of the network stack. - -endif - -config KERNEL_DEVPTS_MULTIPLE_INSTANCES - bool "Support multiple instances of devpts" - default y if !SMALL_FLASH - help - Enable support for multiple instances of devpts filesystem. - If you want to have isolated PTY namespaces (eg: in containers), - say Y here. Otherwise, say N. If enabled, each mount of devpts - filesystem with the '-o newinstance' option will create an - independent PTY namespace. - -config KERNEL_POSIX_MQUEUE - bool "POSIX Message Queues" - default y if !SMALL_FLASH - help - POSIX variant of message queues is a part of IPC. In POSIX message - queues every message has a priority which decides about succession - of receiving it by a process. If you want to compile and run - programs written e.g. for Solaris with use of its POSIX message - queues (functions mq_*) say Y here. - - POSIX message queues are visible as a filesystem called 'mqueue' - and can be mounted somewhere if you want to do filesystem - operations on message queues. - - -config KERNEL_SECCOMP_FILTER - bool - default y if !SMALL_FLASH - -config KERNEL_SECCOMP - bool "Enable seccomp support" - depends on !(TARGET_uml) - select KERNEL_SECCOMP_FILTER - default y if !SMALL_FLASH - help - Build kernel with support for seccomp. - -# -# IPv4 configuration -# - -config KERNEL_IP_MROUTE - bool "Enable IPv4 multicast routing" - default y - help - Multicast routing requires a multicast routing daemon in - addition to kernel support. - -if KERNEL_IP_MROUTE - - config KERNEL_IP_MROUTE_MULTIPLE_TABLES - def_bool y - - config KERNEL_IP_PIMSM_V1 - def_bool y - - config KERNEL_IP_PIMSM_V2 - def_bool y - -endif - -# -# IPv6 configuration -# - -config KERNEL_IPV6 - def_bool IPV6 - -if KERNEL_IPV6 - - config KERNEL_IPV6_MULTIPLE_TABLES - def_bool y - - config KERNEL_IPV6_SUBTREES - def_bool y - - config KERNEL_IPV6_MROUTE - bool "Enable IPv6 multicast routing" - default y - help - Multicast routing requires a multicast routing daemon in - addition to kernel support. - - if KERNEL_IPV6_MROUTE - - config KERNEL_IPV6_MROUTE_MULTIPLE_TABLES - def_bool y - - config KERNEL_IPV6_PIMSM_V2 - def_bool y - - endif - - config KERNEL_IPV6_SEG6_LWTUNNEL - bool "Enable support for lightweight tunnels" - default y if !SMALL_FLASH - help - Using lwtunnel (needed for IPv6 segment routing) requires ip-full package. - - config KERNEL_LWTUNNEL_BPF - def_bool n - -endif - -# -# Miscellaneous network configuration -# - -config KERNEL_NET_L3_MASTER_DEV - bool "L3 Master device support" - help - This module provides glue between core networking code and device - drivers to support L3 master devices like VRF. - -config KERNEL_XDP_SOCKETS - bool "XDP sockets support" - help - XDP sockets allows a channel between XDP programs and - userspace applications. - -config KERNEL_PAGE_POOL - def_bool n - -config KERNEL_PAGE_POOL_STATS - bool "Page pool stats support" - depends on KERNEL_PAGE_POOL - -# -# NFS related symbols -# -config KERNEL_IP_PNP - bool "Compile the kernel with rootfs on NFS" - help - If you want to make your kernel boot off a NFS server as root - filesystem, select Y here. - -if KERNEL_IP_PNP - - config KERNEL_IP_PNP_DHCP - def_bool y - - config KERNEL_IP_PNP_BOOTP - def_bool n - - config KERNEL_IP_PNP_RARP - def_bool n - - config KERNEL_NFS_FS - def_bool y - - config KERNEL_NFS_V2 - def_bool y - - config KERNEL_NFS_V3 - def_bool y - - config KERNEL_ROOT_NFS - def_bool y - -endif - -config KERNEL_BTRFS_FS - bool "Compile the kernel with built-in BTRFS support" - help - Say Y here if you want to make the kernel to be able to boot off a - BTRFS partition. - -menu "Filesystem ACL and attr support options" - config USE_FS_ACL_ATTR - bool "Use filesystem ACL and attr support by default" - default y if !SMALL_FLASH - help - Make using ACLs (e.g. POSIX ACL, NFSv4 ACL) the default - for kernel and packages, except old NFS. - Also enable userspace extended attribute support - by default. (OpenWrt already has an expection it will be - present in the kernel). - - config KERNEL_FS_POSIX_ACL - bool "Enable POSIX ACL support" - default y if USE_FS_ACL_ATTR - - config KERNEL_BTRFS_FS_POSIX_ACL - bool "Enable POSIX ACL for BtrFS Filesystems" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - - config KERNEL_EXT4_FS_POSIX_ACL - bool "Enable POSIX ACL for Ext4 Filesystems" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - - config KERNEL_F2FS_FS_POSIX_ACL - bool "Enable POSIX ACL for F2FS Filesystems" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - - config KERNEL_JFFS2_FS_POSIX_ACL - bool "Enable POSIX ACL for JFFS2 Filesystems" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - - config KERNEL_TMPFS_POSIX_ACL - bool "Enable POSIX ACL for TMPFS Filesystems" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - - config KERNEL_CIFS_ACL - bool "Enable CIFS ACLs" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - - config KERNEL_HFS_FS_POSIX_ACL - bool "Enable POSIX ACL for HFS Filesystems" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - - config KERNEL_HFSPLUS_FS_POSIX_ACL - bool "Enable POSIX ACL for HFS+ Filesystems" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - - config KERNEL_NFS_ACL_SUPPORT - bool "Enable ACLs for NFS" - default y if USE_FS_ACL_ATTR - - config KERNEL_NFS_V3_ACL_SUPPORT - bool "Enable ACLs for NFSv3" - - config KERNEL_NFSD_V2_ACL_SUPPORT - bool "Enable ACLs for NFSDv2" - - config KERNEL_NFSD_V3_ACL_SUPPORT - bool "Enable ACLs for NFSDv3" - - config KERNEL_REISER_FS_POSIX_ACL - bool "Enable POSIX ACLs for ReiserFS" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - - config KERNEL_XFS_POSIX_ACL - bool "Enable POSIX ACLs for XFS" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - - config KERNEL_JFS_POSIX_ACL - bool "Enable POSIX ACLs for JFS" - select KERNEL_FS_POSIX_ACL - default y if USE_FS_ACL_ATTR - -endmenu - -config KERNEL_DEVMEM - bool "/dev/mem virtual device support" - help - Say Y here if you want to support the /dev/mem device. - The /dev/mem device is used to access areas of physical - memory. - -config KERNEL_DEVKMEM - bool "/dev/kmem virtual device support" - help - Say Y here if you want to support the /dev/kmem device. The - /dev/kmem device is rarely used, but can be used for certain - kind of kernel debugging operations. - -config KERNEL_SQUASHFS_FRAGMENT_CACHE_SIZE - int "Number of squashfs fragments cached" - default 2 if (SMALL_FLASH && !LOW_MEMORY_FOOTPRINT) - default 3 - -config KERNEL_SQUASHFS_XATTR - bool "Squashfs XATTR support" - -# -# compile optimization setting -# -choice - prompt "Compiler optimization level" - default KERNEL_CC_OPTIMIZE_FOR_SIZE if SMALL_FLASH - -config KERNEL_CC_OPTIMIZE_FOR_PERFORMANCE - bool "Optimize for performance" - help - This is the default optimization level for the kernel, building - with the "-O2" compiler flag for best performance and most - helpful compile-time warnings. - -config KERNEL_CC_OPTIMIZE_FOR_SIZE - bool "Optimize for size" - help - Enabling this option will pass "-Os" instead of "-O2" to - your compiler resulting in a smaller kernel. - -endchoice - -config KERNEL_AUDIT - bool "Auditing support" - -config KERNEL_SECURITY - bool "Enable different security models" - -config KERNEL_SECURITY_NETWORK - bool "Socket and Networking Security Hooks" - select KERNEL_SECURITY - -config KERNEL_SECURITY_SELINUX - bool "NSA SELinux Support" - select KERNEL_SECURITY_NETWORK - select KERNEL_AUDIT - -config KERNEL_SECURITY_SELINUX_BOOTPARAM - bool "NSA SELinux boot parameter" - depends on KERNEL_SECURITY_SELINUX - default y - -config KERNEL_SECURITY_SELINUX_DISABLE - bool "NSA SELinux runtime disable" - depends on KERNEL_SECURITY_SELINUX - -config KERNEL_SECURITY_SELINUX_DEVELOP - bool "NSA SELinux Development Support" - depends on KERNEL_SECURITY_SELINUX - default y - -config KERNEL_SECURITY_SELINUX_SIDTAB_HASH_BITS - int - depends on KERNEL_SECURITY_SELINUX - default 9 - -config KERNEL_SECURITY_SELINUX_SID2STR_CACHE_SIZE - int - depends on KERNEL_SECURITY_SELINUX - default 256 - -config KERNEL_LSM - string - default "lockdown,yama,loadpin,safesetid,integrity,selinux" - depends on KERNEL_SECURITY_SELINUX - -config KERNEL_EXT4_FS_SECURITY - bool "Ext4 Security Labels" - default y if !SMALL_FLASH - -config KERNEL_F2FS_FS_SECURITY - bool "F2FS Security Labels" - default y if !SMALL_FLASH - -config KERNEL_UBIFS_FS_SECURITY - bool "UBIFS Security Labels" - default y if !SMALL_FLASH - -config KERNEL_JFFS2_FS_SECURITY - bool "JFFS2 Security Labels" - default y if !SMALL_FLASH - -config KERNEL_WERROR - bool "Compile the kernel with warnings as errors" - help - A kernel build should not cause any compiler warnings, and this - enables the '-Werror' (for C) and '-Dwarnings' (for Rust) flags - to enforce that rule by default. Certain warnings from other tools - such as the linker may be upgraded to errors with this option as - well. - - However, if you have a new (or very old) compiler or linker with odd - and unusual warnings, or you have some architecture with problems, - you may need to disable this config option in order to - successfully build the kernel. diff --git a/config/check-hostcxx.sh b/config/check-hostcxx.sh deleted file mode 100755 index 442f4cfb40..0000000000 --- a/config/check-hostcxx.sh +++ /dev/null @@ -1,12 +0,0 @@ -cat << EOF | "$STAGING_DIR_HOST/bin/g++" -c -x c++ -o /dev/null - >/dev/null 2>&1 -#if __clang__ - #if __clang_major__ < $3 - #error "clang too old" - #endif -#else - #if __GNUC__ < $1 || (__GNUC__ == $1 && (__GNUC_MINOR__ < $2)) - #error "gcc too old" - #endif -#endif -EOF -[ $? -eq 0 ] && echo y || echo n diff --git a/config/check-uname.sh b/config/check-uname.sh deleted file mode 100755 index 1f1bf9ee07..0000000000 --- a/config/check-uname.sh +++ /dev/null @@ -1 +0,0 @@ -[ "$(uname)" = "$1" ] && echo y || echo n diff --git a/include/autotools.mk b/include/autotools.mk deleted file mode 100644 index 7fc6f37175..0000000000 --- a/include/autotools.mk +++ /dev/null @@ -1,170 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2007-2020 OpenWrt.org - -ifneq ($(__autotools_inc),1) -__autotools_inc=1 - -autoconf_bool = $(patsubst %,$(if $($(1)),--enable,--disable)-%,$(2)) - -# delete *.la-files from staging_dir - we can not yet remove respective lines within all package -# Makefiles, since backfire still uses libtool v1.5.x which (may) require those files -define libtool_remove_files - find $(1) -name '*.la' | $(XARGS) rm -f; -endef - - -AM_TOOL_PATHS:= \ - AUTOM4TE=$(STAGING_DIR_HOST)/bin/autom4te \ - AUTOCONF=$(STAGING_DIR_HOST)/bin/autoconf \ - AUTOMAKE=$(STAGING_DIR_HOST)/bin/automake \ - ACLOCAL=$(STAGING_DIR_HOST)/bin/aclocal \ - AUTOHEADER=$(STAGING_DIR_HOST)/bin/autoheader \ - LIBTOOLIZE=$(STAGING_DIR_HOST)/bin/libtoolize \ - LIBTOOL=$(STAGING_DIR_HOST)/bin/libtool \ - M4=$(STAGING_DIR_HOST)/bin/m4 \ - AUTOPOINT=true \ - GTKDOCIZE=true - -AM_TOOL_PATHS_FAKE:=$(subst = ,=,$(patsubst "%,"$(TRUE)",$(subst =,= ",$(AM_TOOL_PATHS)))) - -# 1: build dir -# 2: remove files -# 3: automake paths -# 4: libtool paths -# 5: extra m4 dirs -define autoreconf - (cd $(1); \ - $(patsubst %,rm -f %;,$(2)) \ - $(foreach p,$(3), \ - if [ -f $(p)/configure.ac ] || [ -f $(p)/configure.in ]; then \ - [ -d $(p)/autom4te.cache ] && rm -rf $(p)/autom4te.cache; \ - [ -e $(p)/config.rpath ] || \ - ln -s $(SCRIPT_DIR)/config.rpath $(p)/config.rpath; \ - touch NEWS AUTHORS COPYING ABOUT-NLS ChangeLog; \ - $(AM_TOOL_PATHS) \ - LIBTOOLIZE='$(STAGING_DIR_HOST)/bin/libtoolize --install' \ - $(STAGING_DIR_HOST)/bin/autoreconf -v -f -i \ - $(if $(word 2,$(3)),--no-recursive) \ - -B $(STAGING_DIR_HOST)/share/aclocal \ - $(patsubst %,-I %,$(5)) \ - $(patsubst %,-I %,$(4)) $(p) || true; \ - fi; \ - ) \ - ); -endef - -# 1: build dir -define patch_libtool - @(cd $(1); \ - for lt in $$$$($$(STAGING_DIR_HOST)/bin/find . -name ltmain.sh); do \ - lt_version="$$$$($$(STAGING_DIR_HOST)/bin/sed -ne 's,^[[:space:]]*VERSION="\?\([0-9]\.[0-9]\+\).*,\1,p' $$$$lt)"; \ - case "$$$$lt_version" in \ - 1.5|2.2|2.4) echo "autotools.mk: Found libtool v$$$$lt_version - applying patch to $$$$lt"; \ - (cd $$$$(dirname $$$$lt) && $$(PATCH) -N -s -p1 < $$(TOPDIR)/tools/libtool/files/libtool-v$$$$lt_version.patch || true) ;; \ - *) echo "autotools.mk: error: Unsupported libtool version v$$$$lt_version - cannot patch $$$$lt"; exit 1 ;; \ - esac; \ - done; \ - ); -endef - -define set_libtool_abiver - sed -i \ - -e 's,^soname_spec=.*,soname_spec="\\$$$${libname}\\$$$${shared_ext}.$(PKG_ABI_VERSION)",' \ - -e 's,^library_names_spec=.*,library_names_spec="\\$$$${libname}\\$$$${shared_ext}.$(PKG_ABI_VERSION) \\$$$${libname}\\$$$${shared_ext}",' \ - $(PKG_BUILD_DIR)/libtool -endef - -PKG_LIBTOOL_PATHS?=$(CONFIGURE_PATH) -PKG_AUTOMAKE_PATHS?=$(CONFIGURE_PATH) -PKG_MACRO_PATHS?=m4 -PKG_REMOVE_FILES?=aclocal.m4 - -Hooks/InstallDev/Post += libtool_remove_files - -define autoreconf_target - $(strip $(call autoreconf, \ - $(PKG_BUILD_DIR), $(PKG_REMOVE_FILES), \ - $(PKG_AUTOMAKE_PATHS), $(PKG_LIBTOOL_PATHS), \ - $(STAGING_DIR)/host/share/aclocal $(STAGING_DIR_HOSTPKG)/share/aclocal $(STAGING_DIR)/usr/share/aclocal $(PKG_MACRO_PATHS))) -endef - -define patch_libtool_target - $(strip $(call patch_libtool, \ - $(PKG_BUILD_DIR))) -endef - -define gettext_version_target - (cd $(PKG_BUILD_DIR) && \ - GETTEXT_VERSION=$(shell $(STAGING_DIR_HOSTPKG)/bin/gettext -V | $(STAGING_DIR_HOST)/bin/sed -rne '1s/.*\b([0-9]\.[0-9]+(\.[0-9]+)?)\b.*/\1/p' ) && \ - $(STAGING_DIR_HOST)/bin/sed \ - -i $(PKG_BUILD_DIR)/configure.ac \ - -e "s/AM_GNU_GETTEXT_VERSION(.*)/AM_GNU_GETTEXT_VERSION(\[$$$$GETTEXT_VERSION\])/g" && \ - $(STAGING_DIR_HOSTPKG)/bin/autopoint --force \ - ); -endef - -ifneq ($(filter gettext-version,$(PKG_FIXUP)),) - Hooks/Configure/Pre += gettext_version_target - ifeq ($(filter no-autoreconf,$(PKG_FIXUP)),) - Hooks/Configure/Pre += autoreconf_target - endif -endif - -ifneq ($(filter patch-libtool,$(PKG_FIXUP)),) - Hooks/Configure/Pre += patch_libtool_target -endif - -ifneq ($(filter libtool,$(PKG_FIXUP)),) - PKG_BUILD_DEPENDS += libtool - ifeq ($(filter no-autoreconf,$(PKG_FIXUP)),) - Hooks/Configure/Pre += autoreconf_target - endif -endif - -ifneq ($(filter libtool-abiver,$(PKG_FIXUP)),) - Hooks/Configure/Post += set_libtool_abiver -endif - -ifneq ($(filter autoreconf,$(PKG_FIXUP)),) - ifeq ($(filter autoreconf,$(Hooks/Configure/Pre)),) - Hooks/Configure/Pre += autoreconf_target - endif -endif - - -HOST_FIXUP?=$(PKG_FIXUP) -HOST_LIBTOOL_PATHS?=$(if $(PKG_LIBTOOL_PATHS),$(PKG_LIBTOOL_PATHS),.) -HOST_AUTOMAKE_PATHS?=$(if $(PKG_AUTOMAKE_PATHS),$(PKG_AUTOMAKE_PATHS),.) -HOST_MACRO_PATHS?=$(if $(PKG_MACRO_PATHS),$(PKG_MACRO_PATHS),m4) -HOST_REMOVE_FILES?=$(PKG_REMOVE_FILES) - -define autoreconf_host - $(strip $(call autoreconf, \ - $(HOST_BUILD_DIR), $(HOST_REMOVE_FILES), \ - $(HOST_AUTOMAKE_PATHS), $(HOST_LIBTOOL_PATHS), \ - $(HOST_MACRO_PATHS))) -endef - -define patch_libtool_host - $(strip $(call patch_libtool, \ - $(HOST_BUILD_DIR))) -endef - -ifneq ($(filter patch-libtool,$(HOST_FIXUP)),) - Hooks/HostConfigure/Pre += patch_libtool_host -endif - -ifneq ($(filter libtool,$(HOST_FIXUP)),) - ifeq ($(filter no-autoreconf,$(HOST_FIXUP)),) - Hooks/HostConfigure/Pre += autoreconf_host - endif -endif - -ifneq ($(filter autoreconf,$(HOST_FIXUP)),) - ifeq ($(filter autoreconf,$(Hooks/HostConfigure/Pre)),) - Hooks/HostConfigure/Pre += autoreconf_host - endif -endif - -endif #__autotools_inc diff --git a/include/bpf.mk b/include/bpf.mk deleted file mode 100644 index 2b7aa8512c..0000000000 --- a/include/bpf.mk +++ /dev/null @@ -1,86 +0,0 @@ -BPF_DEPENDS := @HAS_BPF_TOOLCHAIN -LLVM_VER:= - -CLANG_MIN_VER:=12 - -ifneq ($(CONFIG_USE_LLVM_HOST),) - BPF_TOOLCHAIN_HOST_PATH:=$(call qstrip,$(CONFIG_BPF_TOOLCHAIN_HOST_PATH)) - ifneq ($(BPF_TOOLCHAIN_HOST_PATH),) - BPF_PATH:=$(BPF_TOOLCHAIN_HOST_PATH)/bin:$(PATH) - else - BPF_PATH:=$(PATH) - endif - CLANG:=$(firstword $(shell PATH='$(BPF_PATH)' command -v clang clang-13 clang-12 clang-11)) - LLVM_VER:=$(subst clang,,$(notdir $(CLANG))) -endif -ifneq ($(CONFIG_USE_LLVM_PREBUILT),) - CLANG:=$(TOPDIR)/llvm-bpf/bin/clang -endif -ifneq ($(CONFIG_USE_LLVM_BUILD),) - CLANG:=$(STAGING_DIR_HOST)/llvm-bpf/bin/clang -endif - -LLVM_PATH:=$(dir $(CLANG)) -LLVM_LLC:=$(LLVM_PATH)/llc$(LLVM_VER) -LLVM_DIS:=$(LLVM_PATH)/llvm-dis$(LLVM_VER) -LLVM_OPT:=$(LLVM_PATH)/opt$(LLVM_VER) -LLVM_STRIP:=$(LLVM_PATH)/llvm-strip$(LLVM_VER) - -BPF_KARCH:=mips -BPF_ARCH:=mips$(if $(CONFIG_ARCH_64BIT),64)$(if $(CONFIG_BIG_ENDIAN),,el) -BPF_TARGET:=bpf$(if $(CONFIG_BIG_ENDIAN),eb,el) - -BPF_HEADERS_DIR:=$(STAGING_DIR)/bpf-headers - -BPF_KERNEL_INCLUDE := \ - -nostdinc -isystem $(TOOLCHAIN_ROOT_DIR)/lib/gcc/*/*/include \ - $(patsubst %,-isystem%,$(TOOLCHAIN_INC_DIRS)) \ - -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include \ - -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/asm/mach-generic \ - -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/generated \ - -I$(BPF_HEADERS_DIR)/include \ - -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/uapi \ - -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/generated/uapi \ - -I$(BPF_HEADERS_DIR)/include/uapi \ - -I$(BPF_HEADERS_DIR)/include/generated/uapi \ - -I$(BPF_HEADERS_DIR)/tools/lib \ - -I$(BPF_HEADERS_DIR)/tools/testing/selftests \ - -I$(BPF_HEADERS_DIR)/samples/bpf \ - -include linux/kconfig.h -include asm_goto_workaround.h - -BPF_CFLAGS := \ - $(BPF_KERNEL_INCLUDE) -I$(PKG_BUILD_DIR) \ - -D__KERNEL__ -D__BPF_TRACING__ -DCONFIG_GENERIC_CSUM \ - -D__TARGET_ARCH_${BPF_KARCH} \ - -m$(if $(CONFIG_BIG_ENDIAN),big,little)-endian \ - -fno-stack-protector -Wall \ - -Wno-unused-value -Wno-pointer-sign \ - -Wno-compare-distinct-pointer-types \ - -Wno-gnu-variable-sized-type-not-at-end \ - -Wno-address-of-packed-member -Wno-tautological-compare \ - -Wno-unknown-warning-option \ - -fno-asynchronous-unwind-tables \ - -Wno-uninitialized -Wno-unused-variable \ - -Wno-unused-label \ - -O2 -emit-llvm -Xclang -disable-llvm-passes - -ifneq ($(CONFIG_HAS_BPF_TOOLCHAIN),) -ifeq ($(DUMP)$(filter download refresh,$(MAKECMDGOALS)),) - CLANG_VER:=$(shell $(CLANG) --target=$(BPF_TARGET) -dM -E - < /dev/null | grep __clang_major__ | cut -d' ' -f3) - CLANG_VER_VALID:=$(shell [ "$(CLANG_VER)" -ge "$(CLANG_MIN_VER)" ] && echo 1 ) - ifeq ($(CLANG_VER_VALID),) - $(error ERROR: LLVM/clang version too old. Minimum required: $(CLANG_MIN_VER), found: $(CLANG_VER)) - endif -endif -endif - -define CompileBPF - $(CLANG) -g -target $(BPF_ARCH)-linux-gnu $(BPF_CFLAGS) $(2) \ - -c $(1) -o $(patsubst %.c,%.bc,$(1)) - $(LLVM_OPT) -O2 -mtriple=$(BPF_TARGET) < $(patsubst %.c,%.bc,$(1)) > $(patsubst %.c,%.opt,$(1)) - $(LLVM_DIS) < $(patsubst %.c,%.opt,$(1)) > $(patsubst %.c,%.S,$(1)) - $(LLVM_LLC) -march=$(BPF_TARGET) -mcpu=v3 -filetype=obj -o $(patsubst %.c,%.o,$(1)) < $(patsubst %.c,%.S,$(1)) - $(CP) $(patsubst %.c,%.o,$(1)) $(patsubst %.c,%.debug.o,$(1)) - $(LLVM_STRIP) --strip-debug $(patsubst %.c,%.o,$(1)) -endef - diff --git a/include/cmake.mk b/include/cmake.mk deleted file mode 100644 index 87309dd045..0000000000 --- a/include/cmake.mk +++ /dev/null @@ -1,185 +0,0 @@ -cmake_bool = $(patsubst %,-D%:BOOL=$(if $($(1)),ON,OFF),$(2)) - -PKG_USE_NINJA ?= 1 -HOST_USE_NINJA ?= 1 -ifeq ($(PKG_USE_NINJA),1) - PKG_BUILD_PARALLEL ?= 1 -endif -ifeq ($(HOST_USE_NINJA),1) - HOST_BUILD_PARALLEL ?= 1 -endif -PKG_INSTALL:=1 - -ifneq ($(findstring c,$(OPENWRT_VERBOSE)),) - MAKE_FLAGS+=VERBOSE=1 - HOST_MAKE_FLAGS+=VERBOSE=1 -endif - -CMAKE_BINARY_DIR = $(PKG_BUILD_DIR)$(if $(CMAKE_BINARY_SUBDIR),/$(CMAKE_BINARY_SUBDIR)) -CMAKE_SOURCE_DIR = $(PKG_BUILD_DIR)$(if $(CMAKE_SOURCE_SUBDIR),/$(CMAKE_SOURCE_SUBDIR)) -HOST_CMAKE_SOURCE_DIR = $(HOST_BUILD_DIR)$(if $(CMAKE_SOURCE_SUBDIR),/$(CMAKE_SOURCE_SUBDIR)) -HOST_CMAKE_BINARY_DIR = $(HOST_BUILD_DIR)$(if $(CMAKE_BINARY_SUBDIR),/$(CMAKE_BINARY_SUBDIR)) -MAKE_PATH = $(firstword $(CMAKE_BINARY_SUBDIR) .) - -ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) - cmake_tool=$(firstword $(TOOLCHAIN_BIN_DIRS))/$(1) -else - cmake_tool=$(shell command -v $(1)) -endif - -ifeq ($(CONFIG_CCACHE),) - CMAKE_C_COMPILER_LAUNCHER:= - CMAKE_CXX_COMPILER_LAUNCHER:= - CMAKE_C_COMPILER:=$(call cmake_tool,$(TARGET_CC)) - CMAKE_CXX_COMPILER:=$(call cmake_tool,$(TARGET_CXX)) - - CMAKE_HOST_C_COMPILER:=$(HOSTCC) - CMAKE_HOST_CXX_COMPILER:=$(HOSTCXX) -else - CCACHE:=$(STAGING_DIR_HOST)/bin/ccache - CMAKE_C_COMPILER_LAUNCHER:=$(CCACHE) - CMAKE_CXX_COMPILER_LAUNCHER:=$(CCACHE) - CMAKE_C_COMPILER:=$(TARGET_CC_NOCACHE) - CMAKE_CXX_COMPILER:=$(TARGET_CXX_NOCACHE) - - CMAKE_HOST_C_COMPILER:=$(HOSTCC_NOCACHE) - CMAKE_HOST_CXX_COMPILER:=$(HOSTCXX_NOCACHE) -endif -CMAKE_AR:=$(call cmake_tool,$(TARGET_AR)) -CMAKE_NM:=$(call cmake_tool,$(TARGET_NM)) -CMAKE_RANLIB:=$(call cmake_tool,$(TARGET_RANLIB)) - -CMAKE_FIND_ROOT_PATH:=$(STAGING_DIR)/usr;$(TOOLCHAIN_ROOT_DIR) -CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR)/host;$(STAGING_DIR_HOSTPKG);$(STAGING_DIR_HOST) -CMAKE_SHARED_LDFLAGS:=-Wl,-Bsymbolic-functions -CMAKE_HOST_INSTALL_PREFIX = $(HOST_BUILD_PREFIX) - -ifeq ($(HOST_USE_NINJA),1) - CMAKE_HOST_OPTIONS += -DCMAKE_GENERATOR="Ninja" - - define Host/Compile/Default - +$(NINJA) -C $(HOST_CMAKE_BINARY_DIR) $(1) - endef - - define Host/Install/Default - +$(NINJA) -C $(HOST_CMAKE_BINARY_DIR) install - endef - - define Host/Uninstall/Default - +$(NINJA) -C $(HOST_CMAKE_BINARY_DIR) uninstall - endef -else - CMAKE_HOST_OPTIONS += -DCMAKE_GENERATOR="Unix Makefiles" -endif - -ifeq ($(PKG_USE_NINJA),1) - CMAKE_OPTIONS += -DCMAKE_GENERATOR="Ninja" - - define Build/Compile/Default - +$(NINJA) -C $(CMAKE_BINARY_DIR) $(1) - endef - - define Build/Install/Default - +DESTDIR="$(PKG_INSTALL_DIR)" $(NINJA) -C $(CMAKE_BINARY_DIR) install - endef -else - CMAKE_OPTIONS += -DCMAKE_GENERATOR="Unix Makefiles" -endif - -define Build/Configure/Default - mkdir -p $(CMAKE_BINARY_DIR) - (cd $(CMAKE_BINARY_DIR); \ - CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \ - CXXFLAGS="$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS)" \ - LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \ - cmake \ - --no-warn-unused-cli \ - -DCMAKE_SYSTEM_NAME=Linux \ - -DCMAKE_SYSTEM_VERSION=1 \ - -DCMAKE_SYSTEM_PROCESSOR=$(ARCH) \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \ - -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \ - -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ - -DCMAKE_C_COMPILER="$(CMAKE_C_COMPILER)" \ - -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \ - -DCMAKE_CXX_COMPILER="$(CMAKE_CXX_COMPILER)" \ - -DCMAKE_ASM_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ - -DCMAKE_ASM_COMPILER="$(CMAKE_C_COMPILER)" \ - -DCMAKE_EXE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS)" \ - -DCMAKE_MODULE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS) $(CMAKE_SHARED_LDFLAGS)" \ - -DCMAKE_SHARED_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS) $(CMAKE_SHARED_LDFLAGS)" \ - -DCMAKE_AR="$(CMAKE_AR)" \ - -DCMAKE_NM="$(CMAKE_NM)" \ - -DCMAKE_RANLIB="$(CMAKE_RANLIB)" \ - -DCMAKE_FIND_ROOT_PATH="$(CMAKE_FIND_ROOT_PATH)" \ - -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \ - -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ - -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \ - -DCMAKE_STRIP=: \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DDL_LIBRARY=$(STAGING_DIR) \ - -DCMAKE_PREFIX_PATH=$(STAGING_DIR) \ - -DCMAKE_SKIP_RPATH=TRUE \ - -DCMAKE_EXPORT_PACKAGE_REGISTRY=FALSE \ - -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE \ - -DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE \ - -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE \ - -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE \ - -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=TRUE \ - $(CMAKE_OPTIONS) \ - $(CMAKE_SOURCE_DIR) \ - ) -endef - -define Build/InstallDev/cmake - $(INSTALL_DIR) $(1) - $(CP) $(PKG_INSTALL_DIR)/* $(1)/ -endef - -Build/InstallDev = $(if $(CMAKE_INSTALL),$(Build/InstallDev/cmake)) - -define Host/Configure/Default - mkdir -p "$(HOST_CMAKE_BINARY_DIR)" - (cd $(HOST_CMAKE_BINARY_DIR); \ - CFLAGS="$(HOST_CFLAGS)" \ - CXXFLAGS="$(HOST_CFLAGS)" \ - LDFLAGS="$(HOST_LDFLAGS)" \ - cmake \ - --no-warn-unused-cli \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ - -DCMAKE_C_COMPILER="$(CMAKE_HOST_C_COMPILER)" \ - -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \ - -DCMAKE_CXX_COMPILER="$(CMAKE_HOST_CXX_COMPILER)" \ - -DCMAKE_ASM_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ - -DCMAKE_ASM_COMPILER="$(CMAKE_HOST_C_COMPILER)" \ - -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \ - -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \ - -DCMAKE_EXE_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \ - -DCMAKE_MODULE_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \ - -DCMAKE_SHARED_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \ - -DCMAKE_FIND_ROOT_PATH="$(CMAKE_HOST_FIND_ROOT_PATH)" \ - -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \ - -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ - -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \ - -DCMAKE_STRIP=: \ - -DCMAKE_INSTALL_PREFIX=$(CMAKE_HOST_INSTALL_PREFIX) \ - -DCMAKE_PREFIX_PATH=$(HOST_BUILD_PREFIX) \ - -DCMAKE_SKIP_RPATH=TRUE \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DCMAKE_EXPORT_PACKAGE_REGISTRY=FALSE \ - -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE \ - -DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE \ - -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE \ - -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE \ - -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=TRUE \ - -DBUILD_SHARED_LIBS=OFF \ - $(CMAKE_HOST_OPTIONS) \ - $(HOST_CMAKE_SOURCE_DIR) \ - ) -endef - -MAKE_FLAGS += \ - CMAKE_COMMAND='$$(if $$(CMAKE_DISABLE_$$@),:,$(STAGING_DIR_HOST)/bin/cmake)' \ - CMAKE_DISABLE_cmake_check_build_system=1 diff --git a/include/debug.mk b/include/debug.mk deleted file mode 100644 index 98a1d6e889..0000000000 --- a/include/debug.mk +++ /dev/null @@ -1,48 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2007-2020 OpenWrt.org - -# debug flags: -# -# d: show subdirectory tree -# t: show added targets -# l: show legacy targets -# r: show autorebuild messages -# v: verbose (no .SILENCE for common targets) - -ifeq ($(DUMP),) - ifeq ($(DEBUG),all) - build_debug:=dltvr - else - build_debug:=$(DEBUG) - endif -endif - -ifneq ($(DEBUG),) - -define debug -$$(findstring $(2),$$(if $$(DEBUG_SCOPE_DIR),$$(if $$(filter $$(DEBUG_SCOPE_DIR)%,$(1)),$(build_debug)),$(build_debug))) -endef - -define warn -$$(if $(call debug,$(1),$(2)),$$(warning $(3))) -endef - -define debug_eval -$$(if $(call debug,$(1),$(2)),$(3)) -endef - -define warn_eval -$(call warn,$(1),$(2),$(3) $(4)) -$(4) -endef - -else - -debug:= -warn:= -debug_eval:= -warn_eval = $(4) - -endif - diff --git a/include/depends.mk b/include/depends.mk deleted file mode 100644 index a858d4b033..0000000000 --- a/include/depends.mk +++ /dev/null @@ -1,53 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2007-2020 OpenWrt.org - -# define a dependency on a subtree -# parameters: -# 1: directories/files -# 2: directory dependency -# 3: tempfile for file listings -# 4: find options - -DEP_FINDPARAMS := -x "*/.svn*" -x ".*" -x "*:*" -x "*\!*" -x "* *" -x "*\\\#*" -x "*/.*_check" -x "*/.*.swp" -x "*/.pkgdir*" - -find_md5=find $(wildcard $(1)) -type f $(patsubst -x,-and -not -path,$(DEP_FINDPARAMS) $(2)) -printf "%p%T@\n" | sort | $(MKHASH) md5 -find_md5_reproducible=find $(wildcard $(1)) -type f $(patsubst -x,-and -not -path,$(DEP_FINDPARAMS) $(2)) -print0 | xargs -0 $(MKHASH) md5 | sort | $(MKHASH) md5 - -define rdep - .PRECIOUS: $(2) - .SILENT: $(2)_check - - $(2): $(2)_check - check-depends: $(2)_check - -ifneq ($(wildcard $(2)),) - $(2)_check:: - $(if $(3), \ - $(call find_md5,$(1),$(4)) > $(3).1; \ - { [ \! -f "$(3)" ] || diff $(3) $(3).1 >/dev/null; } && \ - ) \ - { \ - [ -f "$(2)_check.1" ] && mv "$(2)_check.1" "$(2)_check"; \ - $(TOPDIR)/scripts/timestamp.pl $(DEP_FINDPARAMS) $(4) -n $(2) $(1) && { \ - $(call debug_eval,$(SUBDIR),r,echo "No need to rebuild $(2)";) \ - touch -r "$(2)" "$(2)_check"; \ - } \ - } || { \ - $(call debug_eval,$(SUBDIR),r,echo "Need to rebuild $(2)";) \ - touch "$(2)_check"; \ - } - $(if $(3), mv $(3).1 $(3)) -else - $(2)_check:: - $(if $(3), rm -f $(3) $(3).1) - $(call debug_eval,$(SUBDIR),r,echo "Target $(2) not built") -endif - -endef - -ifeq ($(filter .%,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),$(MAKECMDGOALS),x)) - define rdep - $(2): $(2)_check - endef -endif diff --git a/include/device_table.txt b/include/device_table.txt deleted file mode 100644 index f45b158892..0000000000 --- a/include/device_table.txt +++ /dev/null @@ -1,5 +0,0 @@ -# minimal device table file for OpenWrt - -# -/dev d 755 0 0 - - - - - -/dev/console c 600 0 0 5 1 0 0 - diff --git a/include/download.mk b/include/download.mk deleted file mode 100644 index 7f34302773..0000000000 --- a/include/download.mk +++ /dev/null @@ -1,357 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2012 OpenWrt.org -# Copyright (C) 2016 LEDE project - -PROJECT_GIT = https://git.openwrt.org - -OPENWRT_GIT = $(PROJECT_GIT) -LEDE_GIT = $(PROJECT_GIT) - -ifdef PKG_SOURCE_VERSION - ifndef PKG_VERSION - PKG_VERSION := $(if $(PKG_SOURCE_DATE),$(subst -,.,$(PKG_SOURCE_DATE)),0)~$(call version_abbrev,$(PKG_SOURCE_VERSION)) - endif - PKG_SOURCE_SUBDIR ?= $(PKG_NAME)-$(PKG_VERSION) - PKG_SOURCE ?= $(PKG_SOURCE_SUBDIR).tar.zst -endif - -DOWNLOAD_RDEP=$(STAMP_PREPARED) $(HOST_STAMP_PREPARED) - -# Export options for download.pl -export DOWNLOAD_CHECK_CERTIFICATE:=$(CONFIG_DOWNLOAD_CHECK_CERTIFICATE) -export DOWNLOAD_TOOL_CUSTOM:=$(CONFIG_DOWNLOAD_TOOL_CUSTOM) - -define dl_method_git -$(if $(filter https://github.com/% git://github.com/%,$(1)),github_archive,git) -endef - -# Try to guess the download method from the URL -define dl_method -$(strip \ - $(if $(filter git,$(2)),$(call dl_method_git,$(1),$(2)), - $(if $(2),$(2), \ - $(if $(filter @OPENWRT @APACHE/% @DEBIAN/% @GITHUB/% @GNOME/% @GNU/% @KERNEL/% @SF/% @SAVANNAH/% ftp://% http://% https://% file://%,$(1)),default, \ - $(if $(filter git://%,$(1)),$(call dl_method_git,$(1),$(2)), \ - $(if $(filter svn://%,$(1)),svn, \ - $(if $(filter cvs://%,$(1)),cvs, \ - $(if $(filter hg://%,$(1)),hg, \ - $(if $(filter sftp://%,$(1)),bzr, \ - unknown \ - ) \ - ) \ - ) \ - ) \ - ) \ - ) \ - ) \ - ) \ -) -endef - -# code for creating tarballs from cvs/svn/git/bzr/hg/darcs checkouts - useful for mirror support -dl_pack/bz2=bzip2 -c > $(1) -dl_pack/gz=gzip -nc > $(1) -dl_pack/xz=xz -zc -7e > $(1) -dl_pack/zst=zstd -T0 --ultra -20 -c > $(1) -dl_pack/unknown=$(error ERROR: Unknown pack format for file $(1)) -define dl_pack - $(if $(dl_pack/$(call ext,$(1))),$(dl_pack/$(call ext,$(1))),$(dl_pack/unknown)) -endef -define dl_tar_pack - $(TAR) --numeric-owner --owner=0 --group=0 --mode=a-s --sort=name \ - $$$${TAR_TIMESTAMP:+--mtime="$$$$TAR_TIMESTAMP"} -c $(2) | $(call dl_pack,$(1)) -endef - -gen_sha256sum = $(shell $(MKHASH) sha256 $(DL_DIR)/$(1)) - -# Used in Build/CoreTargets and HostBuild/Core as an integrity check for -# downloaded files. It will add a FORCE rule if the sha256 hash does not -# match, so that the download can be more thoroughly handled by download.pl. -define check_download_integrity - expected_hash:=$(strip $(if $(filter-out x,$(HASH)),$(HASH),$(MIRROR_HASH))) - $$(if $$(and $(FILE),$$(wildcard $(DL_DIR)/$(FILE)), \ - $$(filter undefined,$$(flavor DownloadChecked/$(FILE)))), \ - $$(eval DownloadChecked/$(FILE):=1) \ - $$(if $$(filter-out $$(call gen_sha256sum,$(FILE)),$$(expected_hash)), \ - $(DL_DIR)/$(FILE): FORCE) \ - ) -endef - -ifdef CHECK -check_escape=$(subst ','\'',$(1)) -#') - -# $(1): suffix of the F_, C_ variables, e.g. hash_deprecated, hash_mismatch, etc. -# $(2): filename -# $(3): expected hash value -# $(4): var name of the the form: {PKG_,Download/:}{,MIRROR_}{HASH,MIRROR_HASH} -check_warn_nofix = $(info $(shell printf "$(_R)WARNING: %s$(_N)" '$(call check_escape,$(call C_$(1),$(2),$(3),$(4)))')) -ifndef FIXUP - check_warn = $(check_warn_nofix) -else - check_warn = $(if $(filter-out undefined,$(origin F_$(1))),$(filter ,$(shell $(call F_$(1),$(2),$(3),$(4)) >&2)),$(check_warn_nofix)) -endif - -ifdef FIXUP -F_hash_deprecated = $(SCRIPT_DIR)/fixup-makefile.pl $(CURDIR)/Makefile fix-hash $(3) $(call gen_sha256sum,$(1)) $(2) -F_hash_mismatch = $(F_hash_deprecated) -F_hash_missing = $(SCRIPT_DIR)/fixup-makefile.pl $(CURDIR)/Makefile add-hash $(3) $(call gen_sha256sum,$(1)) -endif - -# $(1): filename -# $(2): expected hash value -# $(3): var name of the the form: {PKG_,Download/:}{,MIRROR_}{HASH,MIRROR_HASH} -C_download_missing = $(1) is missing, please run make download before re-running this check -C_hash_mismatch = $(3) does not match $(1) hash $(call gen_sha256sum,$(1)) -C_hash_deprecated = $(3) uses deprecated hash, set to $(call gen_sha256sum,$(1)) -C_hash_missing = $(3) is missing, set to $(call gen_sha256sum,$(1)) - -# $(1): filename -# $(2): expected hash value -# $(3): var name of the the form: {PKG_,Download/:}{,MIRROR_}{HASH,MIRROR_HASH} -check_hash = \ - $(if $(wildcard $(DL_DIR)/$(1)), \ - $(if $(filter-out x,$(2)), \ - $(if $(filter 64,$(shell printf '%s' '$(2)' | wc -c)), \ - $(if $(filter $(2),$(call gen_sha256sum,$(1))),, \ - $(call check_warn,hash_mismatch,$(1),$(2),$(3)) \ - ), \ - $(call check_warn,hash_deprecated,$(1),$(2),$(3)), \ - ), \ - $(call check_warn,hash_missing,$(1),$(2),$(3)) \ - ), \ - $(call check_warn,download_missing,$(1),$(2),$(3)) \ - ) - -ifdef FIXUP -F_md5_deprecated = $(SCRIPT_DIR)/fixup-makefile.pl $(CURDIR)/Makefile rename-var $(2) $(3) -endif - -C_md5_deprecated = Use of $(2) is deprecated, switch to $(3) - -check_md5 = \ - $(if $(filter-out x,$(1)), \ - $(call check_warn,md5_deprecated,$(1),$(2),$(3)) \ - ) - -hash_var = $(if $(filter-out x,$(1)),MD5SUM,HASH) -endif - -define DownloadMethod/unknown - echo "ERROR: No download method available"; false -endef - -define DownloadMethod/default - $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(HASH)" "$(URL_FILE)" $(foreach url,$(URL),"$(url)") \ - $(if $(filter check,$(1)), \ - $(call check_hash,$(FILE),$(HASH),$(2)$(call hash_var,$(MD5SUM))) \ - $(call check_md5,$(MD5SUM),$(2)MD5SUM,$(2)HASH) \ - ) -endef - -# $(1): "check" -# $(2): "PKG_" if as in Download/ is "default", otherwise "Download/:" -# $(3): shell command sequence to do the download -define wrap_mirror -$(if $(if $(MIRROR),$(filter-out x,$(MIRROR_HASH))),$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MIRROR_HASH)" "" || ( $(3) ),$(3)) \ -$(if $(filter check,$(1)), \ - $(call check_hash,$(FILE),$(MIRROR_HASH),$(2)MIRROR_$(call hash_var,$(MIRROR_MD5SUM))) \ - $(call check_md5,$(MIRROR_MD5SUM),$(2)MIRROR_MD5SUM,$(2)MIRROR_HASH) \ -) -endef - -define DownloadMethod/cvs - $(call wrap_mirror,$(1),$(2), \ - echo "Checking out files from the cvs repository..."; \ - mkdir -p $(TMP_DIR)/dl && \ - cd $(TMP_DIR)/dl && \ - rm -rf $(SUBDIR) && \ - [ \! -d $(SUBDIR) ] && \ - cvs -d $(URL) export $(SOURCE_VERSION) $(SUBDIR) && \ - echo "Packing checkout..." && \ - $(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ - mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ - rm -rf $(SUBDIR); \ - ) -endef - -define DownloadMethod/svn - $(call wrap_mirror,$(1),$(2), \ - echo "Checking out files from the svn repository..."; \ - mkdir -p $(TMP_DIR)/dl && \ - cd $(TMP_DIR)/dl && \ - rm -rf $(SUBDIR) && \ - [ \! -d $(SUBDIR) ] && \ - ( svn help export | grep -q trust-server-cert && \ - svn export --non-interactive --trust-server-cert -r$(SOURCE_VERSION) $(URL) $(SUBDIR) || \ - svn export --non-interactive -r$(SOURCE_VERSION) $(URL) $(SUBDIR) ) && \ - echo "Packing checkout..." && \ - export TAR_TIMESTAMP="`svn info -r$(SOURCE_VERSION) --show-item last-changed-date $(URL)`" && \ - $(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ - mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ - rm -rf $(SUBDIR); \ - ) -endef - -define DownloadMethod/git - $(call wrap_mirror,$(1),$(2), \ - $(call DownloadMethod/rawgit) \ - ) -endef - -define DownloadMethod/github_archive - $(call wrap_mirror,$(1),$(2), \ - $(SCRIPT_DIR)/dl_github_archive.py \ - --dl-dir="$(DL_DIR)" \ - --url="$(URL)" \ - --version="$(SOURCE_VERSION)" \ - --subdir="$(SUBDIR)" \ - --source="$(FILE)" \ - --hash="$(MIRROR_HASH)" \ - --submodules $(SUBMODULES) \ - || ( $(call DownloadMethod/rawgit) ); \ - ) -endef - -# Only intends to be called as a submethod from other DownloadMethod -# -# We first clone, checkout and then we generate a tar using the -# git archive command to apply any rules of .gitattributes -# To keep consistency with github generated tar archive, we default -# the short hash to 8 (default is 7). (for git log related usage) -define DownloadMethod/rawgit - echo "Checking out files from the git repository..."; \ - mkdir -p $(TMP_DIR)/dl && \ - cd $(TMP_DIR)/dl && \ - rm -rf $(SUBDIR) && \ - [ \! -d $(SUBDIR) ] && \ - git clone $(OPTS) $(URL) $(SUBDIR) && \ - (cd $(SUBDIR) && git checkout $(SOURCE_VERSION)) && \ - export TAR_TIMESTAMP=`cd $(SUBDIR) && git log -1 --format='@%ct'` && \ - echo "Generating formal git archive (apply .gitattributes rules)" && \ - (cd $(SUBDIR) && git config core.abbrev 8 && \ - git archive --format=tar HEAD --output=../$(SUBDIR).tar.git) && \ - $(if $(filter skip,$(SUBMODULES)),true,$(TAR) --ignore-failed-read -C $(SUBDIR) -f $(SUBDIR).tar.git -r .git .gitmodules 2>/dev/null) && \ - rm -rf $(SUBDIR) && mkdir $(SUBDIR) && \ - $(TAR) -C $(SUBDIR) -xf $(SUBDIR).tar.git && \ - (cd $(SUBDIR) && $(if $(filter skip,$(SUBMODULES)),true,git submodule update --init --recursive -- $(SUBMODULES) && \ - rm -rf .git .gitmodules)) && \ - echo "Packing checkout..." && \ - $(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ - mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ - rm -rf $(SUBDIR); -endef - -define DownloadMethod/bzr - $(call wrap_mirror,$(1),$(2), \ - echo "Checking out files from the bzr repository..."; \ - mkdir -p $(TMP_DIR)/dl && \ - cd $(TMP_DIR)/dl && \ - rm -rf $(SUBDIR) && \ - [ \! -d $(SUBDIR) ] && \ - bzr export --per-file-timestamps -r$(SOURCE_VERSION) $(SUBDIR) $(URL) && \ - echo "Packing checkout..." && \ - export TAR_TIMESTAMP="" && \ - $(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ - mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ - rm -rf $(SUBDIR); \ - ) -endef - -define DownloadMethod/hg - $(call wrap_mirror,$(1),$(2), \ - echo "Checking out files from the hg repository..."; \ - mkdir -p $(TMP_DIR)/dl && \ - cd $(TMP_DIR)/dl && \ - rm -rf $(SUBDIR) && \ - [ \! -d $(SUBDIR) ] && \ - hg clone -r $(SOURCE_VERSION) $(URL) $(SUBDIR) && \ - export TAR_TIMESTAMP=`cd $(SUBDIR) && hg log --template '@{date}' -l 1` && \ - find $(SUBDIR) -name .hg | xargs rm -rf && \ - echo "Packing checkout..." && \ - $(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ - mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ - rm -rf $(SUBDIR); \ - ) -endef - -define DownloadMethod/darcs - $(call wrap_mirror, $(1), $(2), \ - echo "Checking out files from the darcs repository..."; \ - mkdir -p $(TMP_DIR)/dl && \ - cd $(TMP_DIR)/dl && \ - rm -rf $(SUBDIR) && \ - [ \! -d $(SUBDIR) ] && \ - darcs get -t $(SOURCE_VERSION) $(URL) $(SUBDIR) && \ - export TAR_TIMESTAMP=`cd $(SUBDIR) && LC_ALL=C darcs log --last 1 | sed -ne 's!^Date: \+!!p'` && \ - find $(SUBDIR) -name _darcs | xargs rm -rf && \ - echo "Packing checkout..." && \ - $(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ - mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ - rm -rf $(SUBDIR); \ - ) -endef - -Validate/cvs=SOURCE_VERSION SUBDIR -Validate/svn=SOURCE_VERSION SUBDIR -Validate/git=SOURCE_VERSION SUBDIR -Validate/bzr=SOURCE_VERSION SUBDIR -Validate/hg=SOURCE_VERSION SUBDIR -Validate/darcs=SOURCE_VERSION SUBDIR - -define Download/Defaults - URL:= - FILE:= - URL_FILE:= - PROTO:= - HASH=$$(MD5SUM) - MD5SUM:=x - SUBDIR:= - MIRROR:=1 - MIRROR_HASH=$$(MIRROR_MD5SUM) - MIRROR_MD5SUM:=x - SOURCE_VERSION:= - OPTS:= - SUBMODULES:= -endef - -define Download/default - FILE:=$(PKG_SOURCE) - URL:=$(PKG_SOURCE_URL) - URL_FILE:=$(PKG_SOURCE_URL_FILE) - SUBDIR:=$(PKG_SOURCE_SUBDIR) - PROTO:=$(PKG_SOURCE_PROTO) - SUBMODULES:=$(PKG_SOURCE_SUBMODULES) - $(if $(PKG_SOURCE_MIRROR),MIRROR:=$(filter 1,$(PKG_MIRROR))) - $(if $(PKG_MIRROR_MD5SUM),MIRROR_MD5SUM:=$(PKG_MIRROR_MD5SUM)) - $(if $(PKG_MIRROR_HASH),MIRROR_HASH:=$(PKG_MIRROR_HASH)) - SOURCE_VERSION:=$(PKG_SOURCE_VERSION) - $(if $(PKG_MD5SUM),MD5SUM:=$(PKG_MD5SUM)) - $(if $(PKG_HASH),HASH:=$(PKG_HASH)) -endef - -define Download - $(eval $(Download/Defaults)) - $(eval $(Download/$(1))) - $(foreach FIELD,URL FILE $(Validate/$(call dl_method,$(URL),$(PROTO))), - ifeq ($($(FIELD)),) - $$(error Download/$(1) is missing the $(FIELD) field.) - endif - ) - - $(foreach dep,$(DOWNLOAD_RDEP), - $(dep): $(DL_DIR)/$(FILE) - ) - download: $(DL_DIR)/$(FILE) - - $(DL_DIR)/$(FILE): - mkdir -p $(DL_DIR) - $(call locked, \ - $(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))), \ - $(call DownloadMethod/$(call dl_method,$(URL),$(PROTO)),check,$(if $(filter default,$(1)),PKG_,Download/$(1):)), \ - $(DownloadMethod/unknown) \ - ),\ - $(FILE)) - -endef diff --git a/include/feeds.mk b/include/feeds.mk deleted file mode 100644 index 87b1562c3e..0000000000 --- a/include/feeds.mk +++ /dev/null @@ -1,71 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2014 OpenWrt.org -# Copyright (C) 2016 LEDE Project - --include $(TMP_DIR)/.packageauxvars - -FEEDS_INSTALLED:=$(notdir $(wildcard $(TOPDIR)/package/feeds/*)) -FEEDS_AVAILABLE:=$(sort $(FEEDS_INSTALLED) $(shell $(SCRIPT_DIR)/feeds list -n 2>/dev/null)) - -PACKAGE_SUBDIRS=$(PACKAGE_DIR) -ifneq ($(CONFIG_PER_FEED_REPO),) - PACKAGE_SUBDIRS += $(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/base - PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_AVAILABLE),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED)) -endif - -opkg_package_files = $(wildcard \ - $(foreach dir,$(PACKAGE_SUBDIRS), \ - $(foreach pkg,$(1), $(dir)/$(pkg)_*.ipk))) - -apk_package_files = $(wildcard \ - $(foreach dir,$(PACKAGE_SUBDIRS), \ - $(foreach pkg,$(1), $(dir)/$(pkg)_*.apk))) - -# 1: package name -define FeedPackageDir -$(strip $(if $(CONFIG_PER_FEED_REPO), \ - $(if $(Package/$(1)/subdir), \ - $(abspath $(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(Package/$(1)/subdir)), \ - $(PACKAGE_DIR)), \ - $(PACKAGE_DIR))) -endef - -# 1: destination file -define FeedSourcesAppendOPKG -( \ - echo 'src/gz %d_core %U/targets/%S/packages'; \ - $(strip $(if $(CONFIG_PER_FEED_REPO), \ - echo 'src/gz %d_base %U/packages/%A/base'; \ - $(if $(filter %SNAPSHOT-y,$(VERSION_NUMBER)-$(CONFIG_BUILDBOT)), \ - echo 'src/gz %d_kmods %U/targets/%S/kmods/$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)';) \ - $(foreach feed,$(FEEDS_AVAILABLE), \ - $(if $(CONFIG_FEED_$(feed)), \ - echo '$(if $(filter m,$(CONFIG_FEED_$(feed))),# )src/gz %d_$(feed) %U/packages/%A/$(feed)';)))) \ -) >> $(1) -endef - -# 1: destination file -define FeedSourcesAppendAPK -( \ - echo '%U/targets/%S/packages/packages.adb'; \ - $(strip $(if $(CONFIG_PER_FEED_REPO), \ - echo '%U/packages/%A/base/packages.adb'; \ - $(if $(filter %SNAPSHOT-y,$(VERSION_NUMBER)-$(CONFIG_BUILDBOT)), \ - echo '%U/targets/%S/kmods/$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)/packages.adb';) \ - $(foreach feed,$(FEEDS_AVAILABLE), \ - $(if $(CONFIG_FEED_$(feed)), \ - echo '$(if $(filter m,$(CONFIG_FEED_$(feed))),# )%U/packages/%A/$(feed)/packages.adb';)))) \ -) >> $(1) -endef - -# 1: package name -define GetABISuffix -$(if $(ABIV_$(1)),$(ABIV_$(1)),$(call FormatABISuffix,$(1),$(foreach v,$(wildcard $(STAGING_DIR)/pkginfo/$(1).version),$(shell cat $(v))))) -endef - -# 1: package name -# 2: abi version -define FormatABISuffix -$(if $(filter-out kmod-%,$(1)),$(if $(2),$(if $(filter %0 %1 %2 %3 %4 %5 %6 %7 %8 %9,$(1)),-)$(2))) -endef diff --git a/include/hardened-ld-pie.specs b/include/hardened-ld-pie.specs deleted file mode 100644 index 7317b19a17..0000000000 --- a/include/hardened-ld-pie.specs +++ /dev/null @@ -1,2 +0,0 @@ -*self_spec: -+ %{no-pie|static|r|shared:;:-pie} diff --git a/include/hardening.mk b/include/hardening.mk deleted file mode 100644 index 4a8874261b..0000000000 --- a/include/hardening.mk +++ /dev/null @@ -1,66 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2015-2020 OpenWrt.org - -PKG_CHECK_FORMAT_SECURITY ?= 1 -PKG_ASLR_PIE ?= 1 -PKG_ASLR_PIE_REGULAR ?= 0 -PKG_SSP ?= 1 -PKG_FORTIFY_SOURCE ?= 1 -PKG_RELRO ?= 1 - -ifdef CONFIG_PKG_CHECK_FORMAT_SECURITY - ifeq ($(strip $(PKG_CHECK_FORMAT_SECURITY)),1) - TARGET_CFLAGS += -Wformat -Werror=format-security - endif -endif -ifdef CONFIG_PKG_ASLR_PIE_ALL - ifeq ($(strip $(PKG_ASLR_PIE)),1) - TARGET_CFLAGS += $(FPIC) - TARGET_LDFLAGS += $(FPIC) -specs=$(INCLUDE_DIR)/hardened-ld-pie.specs - endif -endif -ifdef CONFIG_PKG_ASLR_PIE_REGULAR - ifeq ($(strip $(PKG_ASLR_PIE_REGULAR)),1) - TARGET_CFLAGS += $(FPIC) - TARGET_LDFLAGS += $(FPIC) -specs=$(INCLUDE_DIR)/hardened-ld-pie.specs - endif -endif -ifdef CONFIG_PKG_CC_STACKPROTECTOR_REGULAR - ifeq ($(strip $(PKG_SSP)),1) - TARGET_CFLAGS += -fstack-protector - endif -endif -ifdef CONFIG_PKG_CC_STACKPROTECTOR_STRONG - ifeq ($(strip $(PKG_SSP)),1) - TARGET_CFLAGS += -fstack-protector-strong - endif -endif -ifdef CONFIG_PKG_CC_STACKPROTECTOR_ALL - ifeq ($(strip $(PKG_SSP)),1) - TARGET_CFLAGS += -fstack-protector-all - endif -endif -ifdef CONFIG_PKG_FORTIFY_SOURCE_1 - ifeq ($(strip $(PKG_FORTIFY_SOURCE)),1) - TARGET_CFLAGS += -D_FORTIFY_SOURCE=1 - endif -endif -ifdef CONFIG_PKG_FORTIFY_SOURCE_2 - ifeq ($(strip $(PKG_FORTIFY_SOURCE)),1) - TARGET_CFLAGS += -D_FORTIFY_SOURCE=2 - endif -endif -ifdef CONFIG_PKG_RELRO_PARTIAL - ifeq ($(strip $(PKG_RELRO)),1) - TARGET_CFLAGS += -Wl,-z,relro - TARGET_LDFLAGS += -zrelro - endif -endif -ifdef CONFIG_PKG_RELRO_FULL - ifeq ($(strip $(PKG_RELRO)),1) - TARGET_CFLAGS += -Wl,-z,now -Wl,-z,relro - TARGET_LDFLAGS += -znow -zrelro - endif -endif - diff --git a/include/host-build.mk b/include/host-build.mk deleted file mode 100644 index 4dfa055db9..0000000000 --- a/include/host-build.mk +++ /dev/null @@ -1,234 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -include $(INCLUDE_DIR)/download.mk - -HOST_BUILD_DIR ?= $(BUILD_DIR_HOST)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION)) -HOST_INSTALL_DIR ?= $(HOST_BUILD_DIR)/host-install -HOST_BUILD_PARALLEL ?= - -HOST_MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) $(if $(filter 3.% 4.0 4.1,$(MAKE_VERSION)),-j)) - -ifeq ($(strip $(HOST_BUILD_PARALLEL)),0) -HOST_JOBS?=-j1 -else -HOST_JOBS?=$(if $(HOST_BUILD_PARALLEL),$(HOST_MAKE_J),-j1) -endif - -include $(INCLUDE_DIR)/unpack.mk -include $(INCLUDE_DIR)/depends.mk -include $(INCLUDE_DIR)/quilt.mk - -BUILD_TYPES += host -HOST_STAMP_PREPARED=$(HOST_BUILD_DIR)/.prepared$(if $(HOST_QUILT)$(DUMP),,$(shell $(call $(if $(CONFIG_AUTOREMOVE),find_md5_reproducible,find_md5),${CURDIR} $(PKG_FILE_DEPENDS),))_$(call confvar,CONFIG_AUTOREMOVE $(HOST_PREPARED_DEPENDS))) -HOST_STAMP_CONFIGURED:=$(HOST_BUILD_DIR)/.configured -HOST_STAMP_BUILT:=$(HOST_BUILD_DIR)/.built -HOST_BUILD_PREFIX?=$(if $(IS_PACKAGE_BUILD),$(STAGING_DIR_HOSTPKG),$(STAGING_DIR_HOST)) -HOST_STAMP_INSTALLED:=$(HOST_BUILD_PREFIX)/stamp/.$(PKG_NAME)_installed -HOST_STAMP_PROGRAMS:=$(foreach program,$(PKG_PROGRAMS),$(dir $(HOST_STAMP_INSTALLED))$(subst $(PKG_NAME),$(program),$(notdir $(HOST_STAMP_INSTALLED))) ) - -override MAKEFLAGS= - -include $(INCLUDE_DIR)/autotools.mk - -_host_target:=$(if $(HOST_QUILT),,.) - -Host/Patch:=$(Host/Patch/Default) -define Host/Prepare/Default - $(if $(strip $(HOST_UNPACK)),$(HOST_UNPACK)) - [ ! -d ./src/ ] || $(CP) ./src/* $(HOST_BUILD_DIR) - $(Host/Patch) -endef - -define Host/Prepare - $(call Host/Prepare/Default) -endef - -define Host/Gnulib/Prepare - $(STAGING_DIR_HOST)/bin/gnulib-tool \ - --local-dir=$(STAGING_DIR_HOST)/share/gnulib \ - --source-base=$(PKG_GNULIB_BASE) \ - $(PKG_GNULIB_ARGS) \ - $(PKG_GNULIB_MODS) \ - ; -endef - -HOST_CONFIGURE_VARS = \ - CC="$(HOSTCC)" \ - CFLAGS="$(HOST_CFLAGS)" \ - CXX="$(HOSTCXX)" \ - CPPFLAGS="$(HOST_CPPFLAGS)" \ - CXXFLAGS="$(HOST_CXXFLAGS)" \ - LDFLAGS="$(HOST_LDFLAGS)" \ - CONFIG_SHELL="$(SHELL)" - -HOST_CONFIGURE_ARGS = \ - --target=$(GNU_HOST_NAME) \ - --host=$(GNU_HOST_NAME) \ - --build=$(GNU_HOST_NAME) \ - --disable-dependency-tracking \ - --program-prefix="" \ - --program-suffix="" \ - --prefix=$(HOST_BUILD_PREFIX) \ - --exec-prefix=$(HOST_BUILD_PREFIX) \ - --sysconfdir=$(HOST_BUILD_PREFIX)/etc \ - --localstatedir=$(HOST_BUILD_PREFIX)/var \ - --sbindir=$(HOST_BUILD_PREFIX)/bin - -ifneq ($(YEAR_2038),y) - HOST_CONFIGURE_ARGS += --disable-year2038 -endif - -HOST_MAKE_VARS = \ - CFLAGS="$(HOST_CFLAGS)" \ - CPPFLAGS="$(HOST_CPPFLAGS)" \ - CXXFLAGS="$(HOST_CXXFLAGS)" \ - LDFLAGS="$(HOST_LDFLAGS)" - -HOST_MAKE_FLAGS = - -HOST_CONFIGURE_CMD = $(BASH) ./configure - -ifeq ($(HOST_OS),Darwin) - HOST_CONFIG_SITE:=$(INCLUDE_DIR)/site/darwin -endif - -define Host/Configure/Default - $(if $(HOST_CONFIGURE_PARALLEL),+)(cd $(HOST_BUILD_DIR)/$(3); \ - if [ -x configure ]; then \ - $(CP) $(SCRIPT_DIR)/config.{guess,sub} $(HOST_BUILD_DIR)/$(3)/ && \ - $(HOST_CONFIGURE_VARS) \ - $(2) \ - $(HOST_CONFIGURE_CMD) \ - $(HOST_CONFIGURE_ARGS) \ - $(1); \ - fi \ - ) -endef - -define Host/Configure - $(call Host/Configure/Default) -endef - -HOST_MAKE_PATH ?= . - -define Host/Compile/Default - +$(HOST_MAKE_VARS) \ - $(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR)/$(HOST_MAKE_PATH) \ - $(HOST_MAKE_FLAGS) \ - $(1) -endef - -define Host/Compile - $(call Host/Compile/Default,$(if $(PKG_SUBDIRS),SUBDIRS='$$$$(wildcard $(PKG_SUBDIRS))')) -endef - -define Host/Gnulib/Compile - $(call Host/Compile/Default,SUBDIRS='$$$$(wildcard $(PKG_GNULIB_BASE))') -endef - -define Host/Install/Default - $(call Host/Compile/Default,$(if $(PKG_SUBDIRS),SUBDIRS='$$$$(wildcard $(PKG_SUBDIRS))') install) -endef - -define Host/Install - $(call Host/Install/Default,$(HOST_BUILD_PREFIX)) -endef - - -ifneq ($(if $(HOST_QUILT),,$(CONFIG_AUTOREBUILD)),) - define HostHost/Autoclean - $(call rdep,${CURDIR} $(PKG_FILE_DEPENDS),$(HOST_STAMP_PREPARED)) - $(if $(if $(Host/Compile),$(filter prepare,$(MAKECMDGOALS)),1),,$(call rdep,$(HOST_BUILD_DIR),$(HOST_STAMP_BUILT))) - endef -endif - -define Host/Exports/Default - $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR_HOST)/share/aclocal $$(STAGING_DIR_HOST)/share/aclocal-* $(if $(IS_PACKAGE_BUILD),$$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR_HOSTPKG)/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*)),-I $$(p)) - $(1) : export STAGING_PREFIX=$$(HOST_BUILD_PREFIX) - $(1) : export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig:$$(HOST_BUILD_PREFIX)/lib/pkgconfig - $(1) : export PKG_CONFIG_LIBDIR=$$(HOST_BUILD_PREFIX)/lib/pkgconfig - $(1) : export GIT_CEILING_DIRECTORIES=$$(BUILD_DIR_HOST) - $(if $(HOST_CONFIG_SITE),$(1) : export CONFIG_SITE:=$(HOST_CONFIG_SITE)) - $(if $(IS_PACKAGE_BUILD),$(1) : export PATH=$$(TARGET_PATH_PKG)) -endef -Host/Exports=$(Host/Exports/Default) - -.NOTPARALLEL: - -ifndef DUMP - define HostBuild/Core - $(if $(HOST_QUILT),$(Host/Quilt)) - $(if $(DUMP),,$(call HostHost/Autoclean)) - - $(HOST_STAMP_PREPARED): - @-rm -rf $(HOST_BUILD_DIR) - @mkdir -p $(HOST_BUILD_DIR) - $(foreach hook,$(Hooks/HostPrepare/Pre),$(call $(hook))$(sep)) - $(call Host/Prepare) - $(foreach hook,$(Hooks/HostPrepare/Post),$(call $(hook))$(sep)) - touch $$@ - - $(call Host/Exports,$(HOST_STAMP_CONFIGURED)) - $(HOST_STAMP_CONFIGURED): $(HOST_STAMP_PREPARED) - $(foreach hook,$(Hooks/HostConfigure/Pre),$(call $(hook))$(sep)) - $(call Host/Configure) - $(foreach hook,$(Hooks/HostConfigure/Post),$(call $(hook))$(sep)) - touch $$@ - - $(call Host/Exports,$(HOST_STAMP_BUILT)) - $(HOST_STAMP_BUILT): $(HOST_STAMP_CONFIGURED) - $(foreach hook,$(Hooks/HostCompile/Pre),$(call $(hook))$(sep)) - $(call Host/Compile) - $(foreach hook,$(Hooks/HostCompile/Post),$(call $(hook))$(sep)) - touch $$@ - - $(call Host/Exports,$(HOST_STAMP_INSTALLED)) - $(HOST_STAMP_INSTALLED): $(HOST_STAMP_BUILT) $(if $(FORCE_HOST_INSTALL),FORCE) - $(call Host/Install,$(HOST_BUILD_PREFIX)) - $(foreach hook,$(Hooks/HostInstall/Post),$(call $(hook))$(sep)) - mkdir -p $$(shell dirname $$@) - touch $(HOST_STAMP_BUILT) - touch $$@ $(HOST_STAMP_PROGRAMS) - - $(call DefaultTargets,$(patsubst %,host-%,$(DEFAULT_SUBDIR_TARGETS))) - ifndef STAMP_BUILT - $(foreach t,$(DEFAULT_SUBDIR_TARGETS), - $(t): host-$(t) - .$(t): .host-$(t) - ) - clean-build: host-clean-build - endif - - $(call check_download_integrity) - - $(_host_target)host-prepare: $(HOST_STAMP_PREPARED) - $(_host_target)host-configure: $(HOST_STAMP_CONFIGURED) - $(_host_target)host-compile: $(HOST_STAMP_BUILT) $(HOST_STAMP_INSTALLED) $(HOST_STAMP_PROGRAMS) - host-install: host-compile - - host-clean-build: FORCE - $(call Host/Uninstall) - rm -rf $(HOST_BUILD_DIR) $(HOST_STAMP_BUILT) - - host-clean: host-clean-build - $(call Host/Clean) - rm -rf $(HOST_STAMP_INSTALLED) $(HOST_STAMP_PROGRAMS) - - ifneq ($(CONFIG_AUTOREMOVE),) - host-compile: - $(FIND) $(HOST_BUILD_DIR) -mindepth 1 -maxdepth 1 -not '(' -type f -and -name '.*' -and -size 0 ')' -print0 | \ - $(XARGS) -0 rm -rf - endif - endef -endif - -define HostBuild - $(HostBuild/Core) - $(if $(if $(PKG_HOST_ONLY),,$(if $(and $(filter host-%,$(MAKECMDGOALS)),$(PKG_SKIP_DOWNLOAD)),,$(STAMP_PREPARED))),, - $(if $(and $(CONFIG_AUTOREMOVE), $(wildcard $(HOST_STAMP_INSTALLED), $(wildcard $(HOST_STAMP_BUILT)))),, - $(if $(strip $(PKG_SOURCE_URL)),$(call Download,default)) - ) - ) -endef diff --git a/include/image-commands.mk b/include/image-commands.mk deleted file mode 100644 index d2974f4e01..0000000000 --- a/include/image-commands.mk +++ /dev/null @@ -1,747 +0,0 @@ -# Build commands that can be called from Device/* templates - -IMAGE_KERNEL = $(word 1,$^) -IMAGE_ROOTFS = $(word 2,$^) - -define ModelNameLimit16 -$(shell printf %.16s "$(word 2, $(subst _, ,$(1)))") -endef - -define rootfs_align -$(patsubst %-256k,0x40000,$(patsubst %-128k,0x20000,$(patsubst %-64k,0x10000,$(patsubst squashfs%,0x4,$(patsubst root.%,%,$(1)))))) -endef - - -define Build/append-dtb - cat $(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb >> $@ -endef - -define Build/append-dtb-elf - $(TARGET_CROSS)objcopy \ - --set-section-flags=.appended_dtb=alloc,contents \ - --update-section \ - .appended_dtb=$(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb $@ -endef - -define Build/append-kernel - dd if=$(IMAGE_KERNEL) >> $@ -endef - -define Build/package-kernel-ubifs - mkdir $@.kernelubifs - cp $@ $@.kernelubifs/kernel - $(STAGING_DIR_HOST)/bin/mkfs.ubifs \ - $(KERNEL_UBIFS_OPTS) \ - -r $@.kernelubifs $@ - rm -r $@.kernelubifs -endef - -define Build/append-image - cp "$(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1)" "$@.stripmeta" - fwtool -s /dev/null -t "$@.stripmeta" || : - fwtool -i /dev/null -t "$@.stripmeta" || : - dd if="$@.stripmeta" >> "$@" - rm "$@.stripmeta" -endef - -ifdef IB -define Build/append-image-stage - dd if=$(STAGING_DIR_IMAGE)/$(BOARD)-$(SUBTARGET)-$(DEVICE_NAME)-$(1) >> $@ -endef -else -define Build/append-image-stage - cp "$(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1)" "$@.stripmeta" - fwtool -s /dev/null -t "$@.stripmeta" || : - fwtool -i /dev/null -t "$@.stripmeta" || : - mkdir -p "$(STAGING_DIR_IMAGE)" - dd if="$@.stripmeta" of="$(STAGING_DIR_IMAGE)/$(BOARD)-$(SUBTARGET)-$(DEVICE_NAME)-$(1)" - dd if="$@.stripmeta" >> "$@" - rm "$@.stripmeta" -endef -endif - - -compat_version=$(if $(DEVICE_COMPAT_VERSION),$(DEVICE_COMPAT_VERSION),1.0) -json_quote=$(subst ','\'',$(subst ",\",$(1))) -#")') - -legacy_supported_message=$(SUPPORTED_DEVICES) - Image version mismatch: image $(compat_version), \ - device 1.0. Please wipe config during upgrade (force required) or reinstall. \ - $(if $(DEVICE_COMPAT_MESSAGE),Reason: $(DEVICE_COMPAT_MESSAGE),Please check documentation ...) - -metadata_devices=$(if $(1),$(subst "$(space)","$(comma)",$(strip $(foreach v,$(1),"$(call json_quote,$(v))")))) -metadata_json = \ - '{ $(if $(IMAGE_METADATA),$(IMAGE_METADATA)$(comma)) \ - "metadata_version": "1.1", \ - "compat_version": "$(call json_quote,$(compat_version))", \ - $(if $(DEVICE_COMPAT_MESSAGE),"compat_message": "$(call json_quote,$(DEVICE_COMPAT_MESSAGE))"$(comma)) \ - $(if $(filter-out 1.0,$(compat_version)),"new_supported_devices": \ - [$(call metadata_devices,$(SUPPORTED_DEVICES))]$(comma) \ - "supported_devices": ["$(call json_quote,$(legacy_supported_message))"]$(comma)) \ - $(if $(filter 1.0,$(compat_version)),"supported_devices":[$(call metadata_devices,$(SUPPORTED_DEVICES))]$(comma)) \ - "version": { \ - "dist": "$(call json_quote,$(VERSION_DIST))", \ - "version": "$(call json_quote,$(VERSION_NUMBER))", \ - "revision": "$(call json_quote,$(REVISION))", \ - "target": "$(call json_quote,$(TARGETID))", \ - "board": "$(call json_quote,$(if $(BOARD_NAME),$(BOARD_NAME),$(DEVICE_NAME)))" \ - } \ - }' - -define Build/append-metadata - $(if $(SUPPORTED_DEVICES),-echo $(call metadata_json) | fwtool -I - $@) - sha256sum "$@" | cut -d" " -f1 > "$@.sha256sum" - [ ! -s "$(BUILD_KEY)" -o ! -s "$(BUILD_KEY).ucert" -o ! -s "$@" ] || { \ - cp "$(BUILD_KEY).ucert" "$@.ucert" ;\ - usign -S -m "$@" -s "$(BUILD_KEY)" -x "$@.sig" ;\ - ucert -A -c "$@.ucert" -x "$@.sig" ;\ - fwtool -S "$@.ucert" "$@" ;\ - } -endef - -define Build/append-rootfs - dd if=$(IMAGE_ROOTFS) >> $@ -endef - -define Build/append-squashfs-fakeroot-be - rm -rf $@.fakefs $@.fakesquashfs - mkdir $@.fakefs - $(STAGING_DIR_HOST)/bin/mksquashfs3-lzma \ - $@.fakefs $@.fakesquashfs \ - -noappend -root-owned -be -nopad -b 65536 \ - $(if $(SOURCE_DATE_EPOCH),-fixed-time $(SOURCE_DATE_EPOCH)) - cat $@.fakesquashfs >> $@ -endef - -define Build/append-squashfs4-fakeroot - rm -rf $@.fakefs $@.fakesquashfs - mkdir $@.fakefs - $(STAGING_DIR_HOST)/bin/mksquashfs4 \ - $@.fakefs $@.fakesquashfs \ - -nopad -noappend -root-owned - cat $@.fakesquashfs >> $@ -endef - -define Build/append-string - echo -n $(1) >> $@ -endef - -define Build/append-md5sum-ascii-salted - cp $@ $@.salted - echo -ne $(1) >> $@.salted - $(STAGING_DIR_HOST)/bin/mkhash md5 $@.salted | head -c32 >> $@ - rm $@.salted -endef - -UBI_NAND_SIZE_LIMIT = $(IMAGE_SIZE) - ($(NAND_SIZE)*20/1024 + 4*$(BLOCKSIZE)) - -define Build/append-ubi - sh $(TOPDIR)/scripts/ubinize-image.sh \ - $(if $(UBOOTENV_IN_UBI),--uboot-env) \ - $(if $(KERNEL_IN_UBI),--kernel $(IMAGE_KERNEL)) \ - $(foreach part,$(UBINIZE_PARTS),--part $(part)) \ - --rootfs $(IMAGE_ROOTFS) \ - $@.tmp \ - -p $(BLOCKSIZE:%k=%KiB) -m $(PAGESIZE) \ - $(if $(SUBPAGESIZE),-s $(SUBPAGESIZE)) \ - $(if $(VID_HDR_OFFSET),-O $(VID_HDR_OFFSET)) \ - $(UBINIZE_OPTS) - cat $@.tmp >> $@ - rm $@.tmp - $(if $(and $(IMAGE_SIZE),$(NAND_SIZE)),\ - $(call Build/check-size,$(UBI_NAND_SIZE_LIMIT))) -endef - -define Build/ubinize-image - sh $(TOPDIR)/scripts/ubinize-image.sh \ - $(if $(UBOOTENV_IN_UBI),--uboot-env) \ - $(foreach part,$(UBINIZE_PARTS),--part $(part)) \ - --part $(word 1,$(1))="$(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(word 2,$(1))" \ - $@.tmp \ - -p $(BLOCKSIZE:%k=%KiB) -m $(PAGESIZE) \ - $(if $(SUBPAGESIZE),-s $(SUBPAGESIZE)) \ - $(if $(VID_HDR_OFFSET),-O $(VID_HDR_OFFSET)) \ - $(UBINIZE_OPTS) - cat $@.tmp >> $@ - rm $@.tmp -endef - -define Build/ubinize-kernel - cp $@ $@.tmp - sh $(TOPDIR)/scripts/ubinize-image.sh \ - --kernel $@.tmp \ - $@ \ - -p $(BLOCKSIZE:%k=%KiB) -m $(PAGESIZE) \ - $(if $(SUBPAGESIZE),-s $(SUBPAGESIZE)) \ - $(if $(VID_HDR_OFFSET),-O $(VID_HDR_OFFSET)) \ - $(UBINIZE_OPTS) - rm $@.tmp -endef - -define Build/append-uboot - dd if=$(UBOOT_PATH) >> $@ -endef - -# append a fake/empty uImage header, to fool bootloaders rootfs integrity check -# for example -define Build/append-uImage-fakehdr - $(eval type=$(word 1,$(1))) - $(eval magic=$(word 2,$(1))) - touch $@.fakehdr - $(STAGING_DIR_HOST)/bin/mkimage \ - -A $(LINUX_KARCH) -O linux -T $(type) -C none \ - -n '$(VERSION_DIST) fake $(type)' \ - $(if $(magic),-M $(magic)) \ - -d $@.fakehdr \ - -s \ - $@.fakehdr - cat $@.fakehdr >> $@ -endef - -define Build/buffalo-dhp-image - $(STAGING_DIR_HOST)/bin/mkdhpimg $@ $@.new - mv $@.new $@ -endef - -define Build/buffalo-enc - $(eval product=$(word 1,$(1))) - $(eval version=$(word 2,$(1))) - $(eval args=$(wordlist 3,$(words $(1)),$(1))) - $(STAGING_DIR_HOST)/bin/buffalo-enc \ - -p $(product) -v $(version) $(args) \ - -i $@ -o $@.new - mv $@.new $@ -endef - -define Build/buffalo-enc-tag - $(call Build/buffalo-enc,'' '' -S 152 $(1)) -endef - -define Build/buffalo-tag-dhp - $(eval product=$(word 1,$(1))) - $(eval region=$(word 2,$(1))) - $(eval language=$(word 3,$(1))) - $(STAGING_DIR_HOST)/bin/buffalo-tag \ - -d 0x01000000 -w 1 \ - -a $(BUFFALO_TAG_PLATFORM) \ - -v $(BUFFALO_TAG_VERSION) -m $(BUFFALO_TAG_MINOR) \ - -b $(product) -p $(product) \ - -r $(region) -r $(region) -l $(language) \ - -I $@ -o $@.new - mv $@.new $@ -endef - -define Build/buffalo-trx - $(eval magic=$(word 1,$(1))) - $(eval kern_bin=$(if $(1),$(IMAGE_KERNEL),$@)) - $(eval rtfs_bin=$(word 2,$(1))) - $(eval apnd_bin=$(word 3,$(1))) - $(eval kern_size=$(if $(KERNEL_SIZE),$(KERNEL_SIZE),0x400000)) - - $(if $(rtfs_bin),touch $(rtfs_bin)) - $(STAGING_DIR_HOST)/bin/otrx create $@.new \ - $(if $(magic),-M $(magic),) \ - -f $(kern_bin) \ - $(if $(rtfs_bin),\ - -a 0x20000 \ - -b $$(( $(call exp_units,$(kern_size)) )) \ - -f $(rtfs_bin),) \ - $(if $(apnd_bin),\ - -A $(apnd_bin) \ - -a 0x20000) - mv $@.new $@ -endef - -define Build/check-size - @imagesize="$$(stat -c%s $@)"; \ - limitsize="$$(($(call exp_units,$(if $(1),$(1),$(IMAGE_SIZE)))))"; \ - [ $$limitsize -ge $$imagesize ] || { \ - $(call ERROR_MESSAGE, WARNING: Image file $@ is too big: $$imagesize > $$limitsize); \ - rm -f $@; \ - } -endef - -define Build/copy-file - cat "$(1)" > "$@" -endef - -# Create a header for a D-Link AI series recovery image and add it at the beginning of the image -# Currently supported: AQUILA M30, EAGLE M32 and R32 -# Arguments: -# 1: Start string of the header -# 2: Firmware version -# 3: Block start address -# 4: Block length -# 5: Device FMID -define Build/dlink-ai-recovery-header - $(eval header_start=$(word 1,$(1))) - $(eval firmware_version=$(word 2,$(1))) - $(eval block_start=$(word 3,$(1))) - $(eval block_length=$(word 4,$(1))) - $(eval device_fmid=$(word 5,$(1))) -# create $@.header without the checksum - echo -en "$(header_start)\x00\x00" > "$@.header" -# Calculate checksum over data area ($@) and append it to the header. -# The checksum is the 2byte-sum over the whole data area. -# Every overflow during the checksum calculation must increment the current checksum value by 1. - od -v -w2 -tu2 -An --endian little "$@" | awk '{ s+=$$1; } END { s%=65535; printf "%c%c",s%256,s/256; }' >> "$@.header" - echo -en "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" >> "$@.header" - echo -en "$(firmware_version)" >> "$@.header" -# Only one block supported: Erase start/length is identical to data start/length - echo -en "$(block_start)$(block_length)$(block_start)$(block_length)" >> "$@.header" -# Only zeros - echo -en "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" >> "$@.header" -# Last 16 bytes, but without checksum - echo -en "\x42\x48\x02\x00\x00\x00\x08\x00\x00\x00\x00\x00" >> "$@.header" - echo -en "$(device_fmid)" >> "$@.header" -# Calculate and append checksum: The checksum must be set so that the 2byte-sum of the whole header is 0. -# Every overflow during the checksum calculation must increment the current checksum value by 1. - od -v -w2 -tu2 -An --endian little "$@.header" | awk '{s+=65535-$$1;}END{s%=65535;printf "%c%c",s%256,s/256;}' >> "$@.header" - cat "$@.header" "$@" > "$@.new" - mv "$@.new" "$@" - rm "$@.header" -endef - -define Build/dlink-sge-image - $(STAGING_DIR_HOST)/bin/dlink-sge-image $(1) $@ $@.enc - mv $@.enc $@ -endef - -define Build/edimax-header - $(STAGING_DIR_HOST)/bin/mkedimaximg -i $@ -o $@.new $(1) - @mv $@.new $@ -endef - -define Build/elecom-product-header - $(eval product=$(word 1,$(1))) - $(eval fw=$(if $(word 2,$(1)),$(word 2,$(1)),$@)) - - ( \ - echo -n -e "ELECOM\x00\x00$(product)" | dd bs=40 count=1 conv=sync; \ - echo -n "0.00" | dd bs=16 count=1 conv=sync; \ - dd if=$(fw); \ - ) > $(fw).new - mv $(fw).new $(fw) -endef - -define Build/elecom-wrc-gs-factory - $(eval product=$(word 1,$(1))) - $(eval version=$(word 2,$(1))) - $(eval hash_opt=$(word 3,$(1))) - $(MKHASH) md5 $(hash_opt) $@ >> $@ - ( \ - echo -n "ELECOM $(product) v$(version)" | \ - dd bs=32 count=1 conv=sync; \ - dd if=$@; \ - ) > $@.new - mv $@.new $@ -endef - -define Build/elx-header - $(eval hw_id=$(word 1,$(1))) - $(eval xor_pattern=$(word 2,$(1))) - ( \ - echo -ne "\x00\x00\x00\x00\x00\x00\x00\x03" | \ - dd bs=42 count=1 conv=sync; \ - hw_id="$(hw_id)"; \ - echo -ne "\x$${hw_id:0:2}\x$${hw_id:2:2}\x$${hw_id:4:2}\x$${hw_id:6:2}" | \ - dd bs=20 count=1 conv=sync; \ - echo -ne "$$(printf '%08x' $$(stat -c%s $@) | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \ - dd bs=8 count=1 conv=sync; \ - echo -ne "$$($(MKHASH) md5 $@ | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \ - dd bs=58 count=1 conv=sync; \ - ) > $(KDIR)/tmp/$(DEVICE_NAME).header - $(call Build/xor-image,-p $(xor_pattern) -x) - cat $(KDIR)/tmp/$(DEVICE_NAME).header $@ > $@.new - mv $@.new $@ - rm -rf $(KDIR)/tmp/$(DEVICE_NAME).header -endef - -define Build/eva-image - $(STAGING_DIR_HOST)/bin/lzma2eva $(KERNEL_LOADADDR) $(KERNEL_LOADADDR) $@ $@.new - mv $@.new $@ -endef - -define Build/initrd_compression - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),.bzip2) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_GZIP),.gzip) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),.lz4) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZMA),.lzma) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZO),.lzo) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_XZ),.xz) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_ZSTD),.zstd) -endef - -define Build/fit - $(call locked,$(TOPDIR)/scripts/mkits.sh \ - -D $(DEVICE_NAME) -o $@.its -k $@ \ - -C $(word 1,$(1)) \ - $(if $(word 2,$(1)),\ - $(if $(findstring 11,$(if $(DEVICE_DTS_OVERLAY),1)$(if $(findstring $(KERNEL_BUILD_DIR)/image-,$(word 2,$(1))),,1)), \ - -d $(KERNEL_BUILD_DIR)/image-$$(basename $(word 2,$(1))), \ - -d $(word 2,$(1)))) \ - $(if $(findstring with-rootfs,$(word 3,$(1))),-r $(IMAGE_ROOTFS)) \ - $(if $(findstring with-initrd,$(word 3,$(1))), \ - $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE), \ - -i $(KERNEL_BUILD_DIR)/initrd$(if $(TARGET_PER_DEVICE_ROOTFS),.$(ROOTFS_ID/$(DEVICE_NAME))).cpio$(strip $(call Build/initrd_compression)))) \ - -a $(KERNEL_LOADADDR) -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ - $(if $(DEVICE_FDT_NUM),-n $(DEVICE_FDT_NUM)) \ - $(if $(DEVICE_DTS_DELIMITER),-l $(DEVICE_DTS_DELIMITER)) \ - $(if $(DEVICE_DTS_LOADADDR),-s $(DEVICE_DTS_LOADADDR)) \ - $(if $(DEVICE_DTS_OVERLAY),$(foreach dtso,$(DEVICE_DTS_OVERLAY), -O $(dtso):$(KERNEL_BUILD_DIR)/image-$(dtso).dtbo)) \ - -c $(if $(DEVICE_DTS_CONFIG),$(DEVICE_DTS_CONFIG),"config-1") \ - -A $(LINUX_KARCH) -v $(LINUX_VERSION), gen-cpio$(if $(TARGET_PER_DEVICE_ROOTFS),.$(ROOTFS_ID/$(DEVICE_NAME)))) - PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage $(if $(findstring external,$(word 3,$(1))),\ - -E -B 0x1000 $(if $(findstring static,$(word 3,$(1))),-p 0x1000)) -f $@.its $@.new - @mv $@.new $@ -endef - -define Build/libdeflate-gzip - $(STAGING_DIR_HOST)/bin/libdeflate-gzip -f -12 -c $@ $(1) > $@.new - @mv $@.new $@ -endef - -define Build/gzip - $(STAGING_DIR_HOST)/bin/gzip -f -9n -c $@ $(1) > $@.new - @mv $@.new $@ -endef - -define Build/gzip-filename - @mkdir -p $@.tmp - @cp $@ $@.tmp/$(word 1,$(1)) - $(if $(SOURCE_DATE_EPOCH),touch -hcd "@$(SOURCE_DATE_EPOCH)" $@.tmp/$(word 1,$(1)) $(word 2,$(1))) - $(STAGING_DIR_HOST)/bin/gzip -f -9 -N -c $@.tmp/$(word 1,$(1)) $(word 2,$(1)) > $@.new - @mv $@.new $@ - @rm -rf $@.tmp -endef - -define Build/install-dtb - $(call locked, \ - $(foreach dts,$(DEVICE_DTS), \ - $(CP) \ - $(DTS_DIR)/$(dts).dtb \ - $(BIN_DIR)/$(IMG_PREFIX)-$(dts).dtb; \ - ), \ - install-dtb-$(IMG_PREFIX) \ - ) -endef - -define Build/iptime-crc32 - $(STAGING_DIR_HOST)/bin/iptime-crc32 $(1) $@ $@.new - mv $@.new $@ -endef - -define Build/iptime-naspkg - $(STAGING_DIR_HOST)/bin/iptime-naspkg $(1) $@ $@.new - mv $@.new $@ -endef - -define Build/jffs2 - rm -rf $(KDIR_TMP)/$(DEVICE_NAME)/jffs2 && \ - mkdir -p $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/$$(dirname $(1)) && \ - cp $@ $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/$(1) && \ - $(STAGING_DIR_HOST)/bin/mkfs.jffs2 --pad \ - $(if $(CONFIG_BIG_ENDIAN),--big-endian,--little-endian) \ - --squash-uids -v -e $(patsubst %k,%KiB,$(BLOCKSIZE)) \ - -o $@.new \ - -d $(KDIR_TMP)/$(DEVICE_NAME)/jffs2 \ - 2>&1 1>/dev/null | awk '/^.+$$$$/' && \ - $(STAGING_DIR_HOST)/bin/padjffs2 $@.new -J $(patsubst %k,,$(BLOCKSIZE)) - -rm -rf $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/ - @mv $@.new $@ -endef - -define Build/yaffs-filesystem - let \ - kernel_size="$$(stat -c%s $@)" \ - kernel_chunks="(kernel_size / 1024) + 1" \ - filesystem_chunks="kernel_chunks + 3" \ - filesystem_blocks="(filesystem_chunks / 63) + 1" \ - filesystem_size="filesystem_blocks * 64 * 1024" \ - filesystem_size_with_reserve="(filesystem_blocks + 2) * 64 * 1024"; \ - head -c $$filesystem_size_with_reserve /dev/zero | tr "\000" "\377" > $@.img \ - && yafut -d $@.img -w -i $@ -o kernel -C 1040 -B 64k -E -P -S $(1) \ - && truncate -s $$filesystem_size $@.img \ - && mv $@.img $@ -endef - -define Build/kernel-bin - rm -f $@ - cp $< $@ -endef - -define Build/linksys-image - let \ - size="$$(stat -c%s $@)" \ - pad="$(call exp_units,$(PAGESIZE))" \ - offset="256" \ - pad="(pad - ((size + offset) % pad)) % pad"; \ - dd if=/dev/zero bs=$$pad count=1 | tr '\000' '\377' >> $@ - printf ".LINKSYS.01000409%-15s%08X%-8s%-16s" \ - "$(call param_get_default,type,$(1),$(DEVICE_NAME))" \ - "$$(cksum $@ | cut -d ' ' -f1)" \ - "0" "K0000000F0246434" >> $@ - dd if=/dev/zero bs=192 count=1 >> $@ -endef - -define Build/lzma - $(call Build/lzma-no-dict,-lc1 -lp2 -pb2 $(1)) -endef - -define Build/lzma-no-dict - $(STAGING_DIR_HOST)/bin/lzma e $@ $(1) $@.new - @mv $@.new $@ -endef - -define Build/moxa-encode-fw - $(TOPDIR)/scripts/moxa-encode-fw.py \ - --input $@ \ - --output $@ \ - --magic $(MOXA_MAGIC) \ - --hwid $(MOXA_HWID) \ - --buildid 00000000 -endef - -define Build/netgear-chk - $(STAGING_DIR_HOST)/bin/mkchkimg \ - -o $@.new \ - -k $@ \ - -b $(NETGEAR_BOARD_ID) \ - $(if $(NETGEAR_REGION),-r $(NETGEAR_REGION),) - mv $@.new $@ -endef - -define Build/netgear-dni - $(STAGING_DIR_HOST)/bin/mkdniimg \ - -B $(NETGEAR_BOARD_ID) -v $(shell cat $(VERSION_DIST)| sed -e 's/[[:space:]]/-/g').$(firstword $(subst -, ,$(REVISION))) \ - $(if $(NETGEAR_HW_ID),-H $(NETGEAR_HW_ID)) \ - -r "$(1)" \ - -i $@ -o $@.new - mv $@.new $@ -endef - -define Build/netgear-encrypted-factory - $(TOPDIR)/scripts/netgear-encrypted-factory.py \ - --input-file $@ \ - --output-file $@ \ - --model $(NETGEAR_ENC_MODEL) \ - --region $(NETGEAR_ENC_REGION) \ - $(if $(NETGEAR_ENC_HW_ID_LIST),--hw-id-list "$(NETGEAR_ENC_HW_ID_LIST)") \ - $(if $(NETGEAR_ENC_MODEL_LIST),--model-list "$(NETGEAR_ENC_MODEL_LIST)") \ - --version V1.0.0.0.$(shell cat $(VERSION_DIST)| sed -e 's/[[:space:]]/-/g').$(firstword $(subst -, ,$(REVISION))) \ - --encryption-block-size 0x20000 \ - --openssl-bin "$(STAGING_DIR_HOST)/bin/openssl" \ - --key 6865392d342b4d212964363d6d7e7765312c7132613364316e26322a5a5e2538 \ - --iv 4a253169516c38243d6c6d2d3b384145 -endef - -define Build/openmesh-image - $(TOPDIR)/scripts/om-fwupgradecfg-gen.sh \ - "$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" \ - "$@-fwupgrade.cfg" \ - "$(call param_get_default,kernel,$(1),$(IMAGE_KERNEL))" \ - "$(call param_get_default,rootfs,$(1),$@)" - $(TOPDIR)/scripts/combined-ext-image.sh \ - "$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" "$@" \ - "$@-fwupgrade.cfg" "fwupgrade.cfg" \ - "$(call param_get_default,kernel,$(1),$(IMAGE_KERNEL))" "kernel" \ - "$(call param_get_default,rootfs,$(1),$@)" "rootfs" -endef - -define Build/pad-extra - dd if=/dev/zero bs=$(1) count=1 >> $@ -endef - -define Build/pad-offset - let \ - size="$$(stat -c%s $@)" \ - pad="$(call exp_units,$(word 1, $(1)))" \ - offset="$(call exp_units,$(word 2, $(1)))" \ - pad="(pad - ((size + offset) % pad)) % pad" \ - newsize='size + pad'; \ - dd if=$@ of=$@.new bs=$$newsize count=1 conv=sync - mv $@.new $@ -endef - -define Build/pad-rootfs - $(STAGING_DIR_HOST)/bin/padjffs2 $@ $(1) \ - $(if $(BLOCKSIZE),$(BLOCKSIZE:%k=%),4 8 16 64 128 256) -endef - -define Build/pad-to - $(call Image/pad-to,$@,$(1)) -endef - -define Build/patch-cmdline - $(STAGING_DIR_HOST)/bin/patch-cmdline $@ '$(CMDLINE)' -endef - -# Convert a raw image into a $1 type image. -# E.g. | qemu-image vdi -define Build/qemu-image - if command -v qemu-img; then \ - qemu-img convert -f raw -O $1 $@ $@.new; \ - mv $@.new $@; \ - else \ - echo "WARNING: Install qemu-img to create VDI/VMDK images" >&2; exit 1; \ - fi -endef - -define Build/qsdk-ipq-factory-nand - $(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh \ - $@.its ubi $@ - PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@.new - @mv $@.new $@ -endef - -define Build/qsdk-ipq-factory-nor - $(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh \ - $@.its hlos $(IMAGE_KERNEL) rootfs $(IMAGE_ROOTFS) - PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@.new - @mv $@.new $@ -endef - -define Build/seama - $(STAGING_DIR_HOST)/bin/seama -i $@ \ - -m "dev=/dev/mtdblock/$(SEAMA_MTDBLOCK)" -m "type=firmware" - mv $@.seama $@ -endef - -define Build/seama-seal - $(STAGING_DIR_HOST)/bin/seama -i $@ -s $@.seama \ - -m "signature=$(SEAMA_SIGNATURE)" - mv $@.seama $@ -endef - -define Build/senao-header - $(STAGING_DIR_HOST)/bin/mksenaofw $(1) -e $@ -o $@.new - mv $@.new $@ -endef - -define Build/sysupgrade-tar - sh $(TOPDIR)/scripts/sysupgrade-tar.sh \ - --board $(if $(BOARD_NAME),$(BOARD_NAME),$(DEVICE_NAME)) \ - --kernel $(call param_get_default,kernel,$(1),$(IMAGE_KERNEL)) \ - --rootfs $(call param_get_default,rootfs,$(1),$(IMAGE_ROOTFS)) \ - $@ -endef - -define Build/tplink-safeloader - -$(STAGING_DIR_HOST)/bin/tplink-safeloader \ - -B $(TPLINK_BOARD_ID) \ - -V $(REVISION) \ - -k $(IMAGE_KERNEL) \ - -r $@ \ - -o $@.new \ - -j \ - $(wordlist 2,$(words $(1)),$(1)) \ - $(if $(findstring sysupgrade,$(word 1,$(1))),-S) && mv $@.new $@ || rm -f $@ -endef - -define Build/tplink-v1-header - $(STAGING_DIR_HOST)/bin/mktplinkfw \ - -c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \ - -E $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ - -m $(TPLINK_HEADER_VERSION) -N "$(VERSION_DIST)" -V $(REVISION) \ - -k $@ -o $@.new $(1) - @mv $@.new $@ -endef - -# combine kernel and rootfs into one image -# mktplinkfw -# is "sysupgrade" or "factory" -# -# -a align the rootfs start on an bytes boundary -# -j add jffs2 end-of-filesystem markers -# -s strip padding from end of the image -# -X reserve bytes in the firmware image (hexval prefixed with 0x) -define Build/tplink-v1-image - -$(STAGING_DIR_HOST)/bin/mktplinkfw \ - -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) \ - -N "$(VERSION_DIST)" -V $(REVISION) -m $(TPLINK_HEADER_VERSION) \ - -k $(IMAGE_KERNEL) -r $(IMAGE_ROOTFS) -o $@.new -j -X 0x40000 \ - -a $(call rootfs_align,$(FILESYSTEM)) \ - $(wordlist 2,$(words $(1)),$(1)) \ - $(if $(findstring sysupgrade,$(word 1,$(1))),-s) && mv $@.new $@ || rm -f $@ -endef - -define Build/tplink-v2-header - $(STAGING_DIR_HOST)/bin/mktplinkfw2 \ - -c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \ - -E $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ - -w $(TPLINK_HWREVADD) -F "$(TPLINK_FLASHLAYOUT)" \ - -T $(TPLINK_HVERSION) -V "ver. 2.0" \ - -k $@ -o $@.new $(1) - @mv $@.new $@ -endef - -define Build/tplink-v2-image - $(STAGING_DIR_HOST)/bin/mktplinkfw2 \ - -H $(TPLINK_HWID) -W $(TPLINK_HWREV) \ - -w $(TPLINK_HWREVADD) -F "$(TPLINK_FLASHLAYOUT)" \ - -T $(TPLINK_HVERSION) -V "ver. 2.0" -a 0x4 -j \ - -k $(IMAGE_KERNEL) -r $(IMAGE_ROOTFS) -o $@.new $(1) - cat $@.new >> $@ - rm -rf $@.new -endef - -define Build/uImage - $(if $(UIMAGE_TIME),SOURCE_DATE_EPOCH="$(UIMAGE_TIME)") \ - mkimage \ - -A $(LINUX_KARCH) \ - -O linux \ - -T kernel \ - -C $(word 1,$(1)) \ - -a $(KERNEL_LOADADDR) \ - -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ - -n '$(if $(UIMAGE_NAME),$(UIMAGE_NAME),$(call toupper,$(LINUX_KARCH)) $(VERSION_DIST) Linux-$(LINUX_VERSION))' \ - $(if $(UIMAGE_MAGIC),-M $(UIMAGE_MAGIC)) \ - $(wordlist 2,$(words $(1)),$(1)) \ - -d $@ $@.new - mv $@.new $@ -endef - -define Build/multiImage - $(if $(UIMAGE_TIME),SOURCE_DATE_EPOCH="$(UIMAGE_TIME)") \ - mkimage \ - -A $(LINUX_KARCH) \ - -O linux \ - -T multi \ - -C $(word 1,$(1)) \ - -a $(KERNEL_LOADADDR) \ - -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ - -n '$(if $(UIMAGE_NAME),$(UIMAGE_NAME),$(call toupper,$(LINUX_KARCH)) $(VERSION_DIST) Linux-$(LINUX_VERSION))' \ - $(if $(UIMAGE_MAGIC),-M $(UIMAGE_MAGIC)) \ - -d $@:$(word 2,$(1)):$(word 3,$(1)) \ - $(wordlist 4,$(words $(1)),$(1)) \ - $@.new - mv $@.new $@ -endef - -define Build/xor-image - $(STAGING_DIR_HOST)/bin/xorimage -i $@ -o $@.xor $(1) - mv $@.xor $@ -endef - -define Build/zip - rm -rf $@.tmp - mkdir $@.tmp - mv $@ $@.tmp/$(word 1,$(1)) - TZ=UTC $(STAGING_DIR_HOST)/bin/zip -j -X \ - $(wordlist 2,$(words $(1)),$(1)) \ - $@ $@.tmp/$(if $(word 1,$(1)),$(word 1,$(1)),$$(basename $@)) - rm -rf $@.tmp -endef - -define Build/zyxel-ras-image - let \ - newsize="$(call exp_units,$(RAS_ROOTFS_SIZE))"; \ - $(STAGING_DIR_HOST)/bin/mkrasimage \ - -b $(RAS_BOARD) \ - -v $(RAS_VERSION) \ - -r $@ \ - -s $$newsize \ - -o $@.new \ - $(if $(findstring separate-kernel,$(word 1,$(1))),-k $(IMAGE_KERNEL)) \ - && mv $@.new $@ -endef diff --git a/include/image.mk b/include/image.mk deleted file mode 100644 index fdd2ee9ef2..0000000000 --- a/include/image.mk +++ /dev/null @@ -1,910 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -override TARGET_BUILD= -include $(INCLUDE_DIR)/prereq.mk -include $(INCLUDE_DIR)/kernel.mk -include $(INCLUDE_DIR)/kernel-defaults.mk -include $(INCLUDE_DIR)/version.mk -include $(INCLUDE_DIR)/image-commands.mk - -ifndef IB - ifdef CONFIG_TARGET_PER_DEVICE_ROOTFS - TARGET_PER_DEVICE_ROOTFS := 1 - endif -endif - -include $(INCLUDE_DIR)/feeds.mk -include $(INCLUDE_DIR)/rootfs.mk - -override MAKE:=$(_SINGLE)$(SUBMAKE) -override NO_TRACE_MAKE:=$(_SINGLE)$(NO_TRACE_MAKE) - -exp_units = $(subst k, * 1024,$(subst m, * 1024k,$(subst g, * 1024m,$(1)))) - -target_params = $(subst +,$(space),$*) -param_get = $(patsubst $(1)=%,%,$(filter $(1)=%,$(2))) -param_get_default = $(firstword $(call param_get,$(1),$(2)) $(3)) -param_mangle = $(subst $(space),_,$(strip $(1))) -param_unmangle = $(subst _,$(space),$(1)) - -mkfs_packages_id = $(shell echo $(sort $(1)) | $(MKHASH) md5 | cut -b1-8) -mkfs_target_dir = $(if $(call param_get,pkg,$(1)),$(KDIR)/target-dir-$(call param_get,pkg,$(1)),$(TARGET_DIR)) - -KDIR=$(KERNEL_BUILD_DIR) -KDIR_TMP=$(KDIR)/tmp -DTS_DIR:=$(LINUX_DIR)/arch/$(LINUX_KARCH)/boot/dts - -IMG_PREFIX_EXTRA:=$(if $(EXTRA_IMAGE_NAME),$(call sanitize,$(EXTRA_IMAGE_NAME))-) -IMG_PREFIX_VERNUM:=$(if $(CONFIG_VERSION_FILENAMES),$(call sanitize,$(VERSION_NUMBER))-) -IMG_PREFIX_VERCODE:=$(if $(CONFIG_VERSION_CODE_FILENAMES),$(call sanitize,$(VERSION_CODE))-) - -IMG_PREFIX:=$(VERSION_DIST_SANITIZED)-$(IMG_PREFIX_VERNUM)$(IMG_PREFIX_VERCODE)$(IMG_PREFIX_EXTRA)$(BOARD)-$(SUBTARGET) -IMG_ROOTFS:=$(IMG_PREFIX)-rootfs -IMG_COMBINED:=$(IMG_PREFIX)-combined -ifeq ($(DUMP),) -IMG_PART_SIGNATURE:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | $(MKHASH) md5 | cut -b1-8) -IMG_PART_DISKGUID:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | $(MKHASH) md5 | sed -E 's/(.{8})(.{4})(.{4})(.{4})(.{10})../\1-\2-\3-\4-\500/') -endif - -MKFS_DEVTABLE_OPT := -D $(INCLUDE_DIR)/device_table.txt - -ifneq ($(CONFIG_BIG_ENDIAN),) - JFFS2OPTS := --big-endian --squash-uids -v -else - JFFS2OPTS := --little-endian --squash-uids -v -endif - -ifeq ($(CONFIG_JFFS2_RTIME),y) - JFFS2OPTS += -X rtime -endif -ifeq ($(CONFIG_JFFS2_ZLIB),y) - JFFS2OPTS += -X zlib -endif -ifeq ($(CONFIG_JFFS2_LZMA),y) - JFFS2OPTS += -X lzma --compression-mode=size -endif -ifneq ($(CONFIG_JFFS2_RTIME),y) - JFFS2OPTS += -x rtime -endif -ifneq ($(CONFIG_JFFS2_ZLIB),y) - JFFS2OPTS += -x zlib -endif -ifneq ($(CONFIG_JFFS2_LZMA),y) - JFFS2OPTS += -x lzma -endif - -JFFS2OPTS += $(MKFS_DEVTABLE_OPT) - -SQUASHFS_BLOCKSIZE := $(CONFIG_TARGET_SQUASHFS_BLOCK_SIZE)k -SQUASHFSOPT := -b $(SQUASHFS_BLOCKSIZE) -SQUASHFSOPT += -p '/dev d 755 0 0' -p '/dev/console c 600 0 0 5 1' -SQUASHFSOPT += $(if $(CONFIG_SELINUX),-xattrs,-no-xattrs) -SQUASHFSCOMP := gzip -LZMA_XZ_OPTIONS := -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2 -ifeq ($(CONFIG_SQUASHFS_XZ),y) - ifneq ($(filter arm x86 powerpc sparc,$(LINUX_KARCH)),) - BCJ_FILTER:=-Xbcj $(LINUX_KARCH) - endif - SQUASHFSCOMP := xz $(LZMA_XZ_OPTIONS) $(BCJ_FILTER) -endif - -JFFS2_BLOCKSIZE ?= 64k 128k - -fs-types-$(CONFIG_TARGET_ROOTFS_SQUASHFS) += squashfs -fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addprefix jffs2-,$(JFFS2_BLOCKSIZE)) -fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2_NAND) += $(addprefix jffs2-nand-,$(NAND_BLOCKSIZE)) -fs-types-$(CONFIG_TARGET_ROOTFS_EXT4FS) += ext4 -fs-types-$(CONFIG_TARGET_ROOTFS_UBIFS) += ubifs -fs-subtypes-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addsuffix -raw,$(addprefix jffs2-,$(JFFS2_BLOCKSIZE))) - -TARGET_FILESYSTEMS := $(fs-types-y) - -FS_64K := $(filter-out jffs2-%,$(TARGET_FILESYSTEMS)) jffs2-64k -FS_128K := $(filter-out jffs2-%,$(TARGET_FILESYSTEMS)) jffs2-128k -FS_256K := $(filter-out jffs2-%,$(TARGET_FILESYSTEMS)) jffs2-256k - -define add_jffs2_mark - echo -ne '\xde\xad\xc0\xde' >> $(1) -endef - -PROFILE_SANITIZED := $(call tolower,$(subst DEVICE_,,$(subst $(space),-,$(PROFILE)))) - -define split_args -$(foreach data, \ - $(subst |,$(space),\ - $(subst $(space),^,$(1))), \ - $(call $(2),$(strip $(subst ^,$(space),$(data))))) -endef - -define build_cmd -$(if $(Build/$(word 1,$(1))),,$(error Missing Build/$(word 1,$(1)))) -$(call Build/$(word 1,$(1)),$(wordlist 2,$(words $(1)),$(1))) - -endef - -define concat_cmd -$(call split_args,$(1),build_cmd) -endef - -# pad to 4k, 8k, 16k, 64k, 128k, 256k and add jffs2 end-of-filesystem mark -define prepare_generic_squashfs - $(STAGING_DIR_HOST)/bin/padjffs2 $(1) 4 8 16 64 128 256 -endef - -define Image/BuildKernel/Initramfs - $(call Image/Build/Initramfs) -endef - -define Image/BuildKernel/MkuImage - mkimage -A $(ARCH) -O linux -T kernel -C $(1) -a $(2) -e $(3) \ - -n '$(call toupper,$(ARCH)) $(VERSION_DIST) Linux-$(LINUX_VERSION)' -d $(4) $(5) -endef - -ifdef CONFIG_TARGET_IMAGES_GZIP - define Image/Gzip - rm -f $(1).gz - gzip -9n $(1) - endef -endif - - -# Disable noisy checks by default as in upstream -DTC_WARN_FLAGS := \ - -Wno-interrupt_provider \ - -Wno-unique_unit_address \ - -Wno-unit_address_vs_reg \ - -Wno-avoid_unnecessary_addr_size \ - -Wno-alias_paths \ - -Wno-graph_child_address \ - -Wno-simple_bus_reg - -DTC_FLAGS += $(DTC_WARN_FLAGS) -DTCO_FLAGS += $(DTC_WARN_FLAGS) - -define Image/pad-to - dd if=$(1) of=$(1).new bs=$(2) conv=sync - mv $(1).new $(1) -endef - -ifeq ($(DUMP),) -ROOTFS_PARTSIZE=$(shell echo $$(($(CONFIG_TARGET_ROOTFS_PARTSIZE)*1024*1024))) -endif - -define Image/pad-root-squashfs - $(call Image/pad-to,$(KDIR)/root.squashfs,$(if $(1),$(1),$(ROOTFS_PARTSIZE))) -endef - -# $(1) source dts file -# $(2) target dtb file -# $(3) extra CPP flags -# $(4) extra DTC flags -define Image/BuildDTB/sub - $(TARGET_CROSS)cpp -nostdinc -x assembler-with-cpp \ - $(DTS_CPPFLAGS) \ - -I$(DTS_DIR) \ - -I$(DTS_DIR)/include \ - -I$(LINUX_DIR)/include/ \ - -I$(LINUX_DIR)/scripts/dtc/include-prefixes \ - -undef -D__DTS__ $(3) \ - -o $(2).tmp $(1) - $(LINUX_DIR)/scripts/dtc/dtc -O dtb \ - -i$(dir $(1)) $(4) \ - $(if $(CONFIG_HAS_DT_OVERLAY_SUPPORT),-@) \ - -o $(2) $(2).tmp - $(RM) $(2).tmp -endef - -define Image/BuildDTB - $(call Image/BuildDTB/sub,$(1),$(2),$(3),$(DTC_FLAGS) $(DEVICE_DTC_FLAGS) $(4)) -endef - -define Image/BuildDTBO - $(call Image/BuildDTB/sub,$(1),$(2),$(3),$(DTCO_FLAGS) $(DEVICE_DTCO_FLAGS) $(4)) -endef - -define Image/mkfs/jffs2/sub-raw - $(STAGING_DIR_HOST)/bin/mkfs.jffs2 \ - $(2) \ - -e $(patsubst %k,%KiB,$(1)) \ - -o $@ -d $(call mkfs_target_dir,$(3)) \ - -v 2>&1 1>/dev/null | awk '/^.+$$$$/' -endef - -define Image/mkfs/jffs2/sub - $(call Image/mkfs/jffs2/sub-raw,$(1),--pad $(2),$(3)) - $(call add_jffs2_mark,$@) -endef - -define Image/mkfs/jffs2/template - Image/mkfs/jffs2-$(1) = $$(call Image/mkfs/jffs2/sub,$(1),$(JFFS2OPTS),$$(1)) - Image/mkfs/jffs2-$(1)-raw = $$(call Image/mkfs/jffs2/sub-raw,$(1),$(JFFS2OPTS),$$(1)) - -endef - -define Image/mkfs/jffs2-nand/template - Image/mkfs/jffs2-nand-$(1) = \ - $$(call Image/mkfs/jffs2/sub, \ - $(word 2,$(subst -, ,$(1))), \ - $(JFFS2OPTS) --no-cleanmarkers --pagesize=$(word 1,$(subst -, ,$(1))),$$(1)) - -endef - -$(eval $(foreach S,$(JFFS2_BLOCKSIZE),$(call Image/mkfs/jffs2/template,$(S)))) -$(eval $(foreach S,$(NAND_BLOCKSIZE),$(call Image/mkfs/jffs2-nand/template,$(S)))) - -define Image/mkfs/squashfs-common - $(STAGING_DIR_HOST)/bin/mksquashfs4 $(call mkfs_target_dir,$(1)) $@ \ - -nopad -noappend -root-owned \ - -comp $(SQUASHFSCOMP) $(SQUASHFSOPT) -endef - -ifeq ($(CONFIG_TARGET_ROOTFS_SECURITY_LABELS),y) -define Image/mkfs/squashfs - echo ". $(call mkfs_target_dir,$(1))/etc/selinux/config" > $@.fakeroot-script - echo "$(STAGING_DIR_HOST)/bin/setfiles -r" \ - "$(call mkfs_target_dir,$(1))" \ - "$(call mkfs_target_dir,$(1))/etc/selinux/\$${SELINUXTYPE}/contexts/files/file_contexts " \ - "$(call mkfs_target_dir,$(1))" >> $@.fakeroot-script - echo "$(Image/mkfs/squashfs-common)" >> $@.fakeroot-script - chmod +x $@.fakeroot-script - $(FAKEROOT) "$@.fakeroot-script" -endef -else -define Image/mkfs/squashfs - $(call Image/mkfs/squashfs-common,$(1)) -endef -endif - -define Image/mkfs/ubifs - $(STAGING_DIR_HOST)/bin/mkfs.ubifs \ - $(UBIFS_OPTS) $(call param_unmangle,$(call param_get,fs,$(1))) \ - $(if $(CONFIG_TARGET_UBIFS_FREE_SPACE_FIXUP),--space-fixup) \ - $(if $(CONFIG_TARGET_UBIFS_COMPRESSION_NONE),--compr=none) \ - $(if $(CONFIG_TARGET_UBIFS_COMPRESSION_LZO),--compr=lzo) \ - $(if $(CONFIG_TARGET_UBIFS_COMPRESSION_ZLIB),--compr=zlib) \ - $(if $(shell echo $(CONFIG_TARGET_UBIFS_JOURNAL_SIZE)),--jrn-size=$(CONFIG_TARGET_UBIFS_JOURNAL_SIZE)) \ - --squash-uids \ - -o $@ -d $(call mkfs_target_dir,$(1)) -endef - -define Image/mkfs/ext4 - $(STAGING_DIR_HOST)/bin/make_ext4fs -L rootfs \ - -l $(ROOTFS_PARTSIZE) -b $(CONFIG_TARGET_EXT4_BLOCKSIZE) \ - $(if $(CONFIG_TARGET_EXT4_RESERVED_PCT),-m $(CONFIG_TARGET_EXT4_RESERVED_PCT)) \ - $(if $(CONFIG_TARGET_EXT4_JOURNAL),,-J) \ - $(if $(SOURCE_DATE_EPOCH),-T $(SOURCE_DATE_EPOCH)) \ - $@ $(call mkfs_target_dir,$(1))/ -endef - -define Image/Manifest - $(if $(CONFIG_USE_APK), \ - $(call apk,$(TARGET_DIR_ORIG)) list --quiet --manifest --no-network | sort | sed 's/ / - /' > \ - $(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest, \ - $(call opkg,$(TARGET_DIR_ORIG)) list-installed > \ - $(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest \ - ) -ifneq ($(CONFIG_JSON_CYCLONEDX_SBOM),) - $(SCRIPT_DIR)/package-metadata.pl imgcyclonedxsbom \ - $(if $(IB),$(TOPDIR)/.packageinfo, $(TMP_DIR)/.packageinfo) \ - $(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest > \ - $(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).bom.cdx.json -endif -endef - -define Image/gzip-ext4-padded-squashfs - - define Image/Build/squashfs - $(call Image/pad-root-squashfs) - endef - - ifneq ($(CONFIG_TARGET_IMAGES_GZIP),) - define Image/Build/gzip/ext4 - $(call Image/Build/gzip,ext4) - endef - define Image/Build/gzip/squashfs - $(call Image/Build/gzip,squashfs) - endef - endif - -endef - -ifdef CONFIG_TARGET_ROOTFS_TARGZ - define Image/Build/targz - $(TAR) -cp --numeric-owner --owner=0 --group=0 --mode=a-s --sort=name \ - $(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \ - -C $(TARGET_DIR)/ . | gzip -9n > $(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED))-rootfs.tar.gz - endef -endif - -ifdef CONFIG_TARGET_ROOTFS_CPIOGZ - define Image/Build/cpiogz - ( cd $(TARGET_DIR); find . | $(STAGING_DIR_HOST)/bin/cpio -o -H newc -R 0:0 | gzip -9n >$(BIN_DIR)/$(IMG_ROOTFS).cpio.gz ) - endef -endif - -mkfs_packages = $(filter-out @%,$(PACKAGES_$(call param_get,pkg,pkg=$(target_params)))) -mkfs_packages_add = $(foreach pkg,$(filter-out -%,$(mkfs_packages)),$(pkg)$(call GetABISuffix,$(pkg))) -mkfs_packages_remove = $(foreach pkg,$(patsubst -%,%,$(filter -%,$(mkfs_packages))),$(pkg)$(call GetABISuffix,$(pkg))) -mkfs_cur_target_dir = $(call mkfs_target_dir,pkg=$(target_params)) - -opkg_target = \ - $(call opkg,$(mkfs_cur_target_dir)) \ - -f $(mkfs_cur_target_dir).conf - -apk_target = $(call apk,$(mkfs_cur_target_dir)) --no-scripts - - -target-dir-%: FORCE -ifneq ($(CONFIG_USE_APK),) - rm -rf $(mkfs_cur_target_dir) - $(CP) $(TARGET_DIR_ORIG) $(mkfs_cur_target_dir) - mv $(mkfs_cur_target_dir)/etc/apk/repositories $(mkfs_cur_target_dir).repositories - $(if $(mkfs_packages_remove), \ - $(apk_target) del $(mkfs_packages_remove)) - $(if $(mkfs_packages_add), \ - $(apk_target) add $(mkfs_packages_add)) - mv $(mkfs_cur_target_dir).repositories $(mkfs_cur_target_dir)/etc/apk/repositories -else - rm -rf $(mkfs_cur_target_dir) $(mkfs_cur_target_dir).opkg - $(CP) $(TARGET_DIR_ORIG) $(mkfs_cur_target_dir) - -mv $(mkfs_cur_target_dir)/etc/opkg $(mkfs_cur_target_dir).opkg - echo 'src default file://$(PACKAGE_DIR_ALL)' > $(mkfs_cur_target_dir).conf - $(if $(mkfs_packages_remove), \ - -$(call opkg,$(mkfs_cur_target_dir)) remove \ - $(mkfs_packages_remove)) - $(if $(call opkg_package_files,$(mkfs_packages_add)), \ - $(opkg_target) update && \ - $(opkg_target) install \ - $(call opkg_package_files,$(mkfs_packages_add))) - -$(CP) -T $(mkfs_cur_target_dir).opkg/ $(mkfs_cur_target_dir)/etc/opkg/ - rm -rf $(mkfs_cur_target_dir).opkg $(mkfs_cur_target_dir).conf -endif - $(call prepare_rootfs,$(mkfs_cur_target_dir),$(TOPDIR)/files) - -$(KDIR)/root.%: kernel_prepare - $(call Image/mkfs/$(word 1,$(target_params)),$(target_params)) - -define Device/InitProfile - PROFILES := $(PROFILE) - DEVICE_TITLE = $$(DEVICE_VENDOR) $$(DEVICE_MODEL)$$(if $$(DEVICE_VARIANT), $$(DEVICE_VARIANT)) - DEVICE_ALT0_TITLE = $$(DEVICE_ALT0_VENDOR) $$(DEVICE_ALT0_MODEL)$$(if $$(DEVICE_ALT0_VARIANT), $$(DEVICE_ALT0_VARIANT)) - DEVICE_ALT1_TITLE = $$(DEVICE_ALT1_VENDOR) $$(DEVICE_ALT1_MODEL)$$(if $$(DEVICE_ALT1_VARIANT), $$(DEVICE_ALT1_VARIANT)) - DEVICE_ALT2_TITLE = $$(DEVICE_ALT2_VENDOR) $$(DEVICE_ALT2_MODEL)$$(if $$(DEVICE_ALT2_VARIANT), $$(DEVICE_ALT2_VARIANT)) - DEVICE_ALT3_TITLE = $$(DEVICE_ALT3_VENDOR) $$(DEVICE_ALT3_MODEL)$$(if $$(DEVICE_ALT3_VARIANT), $$(DEVICE_ALT3_VARIANT)) - DEVICE_ALT4_TITLE = $$(DEVICE_ALT4_VENDOR) $$(DEVICE_ALT4_MODEL)$$(if $$(DEVICE_ALT4_VARIANT), $$(DEVICE_ALT4_VARIANT)) - DEVICE_ALT5_TITLE = $$(DEVICE_ALT5_VENDOR) $$(DEVICE_ALT5_MODEL)$$(if $$(DEVICE_ALT5_VARIANT), $$(DEVICE_ALT5_VARIANT)) - DEVICE_VENDOR := - DEVICE_MODEL := - DEVICE_VARIANT := - DEVICE_ALT0_VENDOR := - DEVICE_ALT0_MODEL := - DEVICE_ALT0_VARIANT := - DEVICE_ALT1_VENDOR := - DEVICE_ALT1_MODEL := - DEVICE_ALT1_VARIANT := - DEVICE_ALT2_VENDOR := - DEVICE_ALT2_MODEL := - DEVICE_ALT2_VARIANT := - DEVICE_ALT3_VENDOR := - DEVICE_ALT3_MODEL := - DEVICE_ALT3_VARIANT := - DEVICE_ALT4_VENDOR := - DEVICE_ALT4_MODEL := - DEVICE_ALT4_VARIANT := - DEVICE_ALT5_VENDOR := - DEVICE_ALT5_MODEL := - DEVICE_ALT5_VARIANT := - DEVICE_PACKAGES := - DEVICE_DESCRIPTION = Build firmware images for $$(DEVICE_TITLE) -endef - -define Device/Init - DEVICE_NAME := $(1) - KERNEL:= - KERNEL_INITRAMFS = $$(KERNEL) - CMDLINE:= - - IMAGES := - ARTIFACTS := - DEVICE_IMG_PREFIX := $(IMG_PREFIX)-$(1) - DEVICE_IMG_NAME = $$(DEVICE_IMG_PREFIX)-$$(1)-$$(2) - FACTORY_IMG_NAME := - IMAGE_SIZE := - NAND_SIZE := - KERNEL_PREFIX = $$(DEVICE_IMG_PREFIX) - KERNEL_SUFFIX := -kernel.bin - KERNEL_INITRAMFS_SUFFIX = $$(KERNEL_SUFFIX) - KERNEL_IMAGE = $$(KERNEL_PREFIX)$$(KERNEL_SUFFIX) - KERNEL_INITRAMFS_PREFIX = $$(DEVICE_IMG_PREFIX)-initramfs - KERNEL_INITRAMFS_IMAGE = $$(KERNEL_INITRAMFS_PREFIX)$$(KERNEL_INITRAMFS_SUFFIX) - KERNEL_INITRAMFS_NAME = $$(KERNEL_NAME)-initramfs - KERNEL_INSTALL := - KERNEL_NAME := vmlinux - KERNEL_DEPENDS := - KERNEL_SIZE := - - UBOOTENV_IN_UBI := - KERNEL_IN_UBI := - BLOCKSIZE := - PAGESIZE := - SUBPAGESIZE := - VID_HDR_OFFSET := - UBINIZE_OPTS := - UBINIZE_PARTS := - MKUBIFS_OPTS := - - FS_OPTIONS/ubifs = $$(MKUBIFS_OPTS) - - DEVICE_DTS := - DEVICE_DTS_CONFIG := - DEVICE_DTS_DELIMITER := - DEVICE_DTS_DIR := - DEVICE_DTS_LOADADDR := - DEVICE_DTS_OVERLAY := - DEVICE_FDT_NUM := - DEVICE_DTC_FLAGS := - DEVICE_DTCO_FLAGS := - SOC := - - BOARD_NAME := - UIMAGE_MAGIC := - UIMAGE_NAME := - UIMAGE_TIME := - DEVICE_COMPAT_VERSION := 1.0 - DEVICE_COMPAT_MESSAGE := - SUPPORTED_DEVICES := $(subst _,$(comma),$(1)) - IMAGE_METADATA := - - FILESYSTEMS := $(TARGET_FILESYSTEMS) - - UBOOT_PATH := $(STAGING_DIR_IMAGE)/uboot-$(1) - - BROKEN := - DEFAULT := -endef - -DEFAULT_DEVICE_VARS := \ - DEVICE_NAME KERNEL KERNEL_INITRAMFS KERNEL_INITRAMFS_IMAGE KERNEL_SIZE \ - CMDLINE UBOOTENV_IN_UBI KERNEL_IN_UBI BLOCKSIZE PAGESIZE SUBPAGESIZE \ - VID_HDR_OFFSET UBINIZE_OPTS UBINIZE_PARTS MKUBIFS_OPTS DEVICE_DTC_FLAGS \ - DEVICE_DTCO_FLAGS DEVICE_DTS DEVICE_DTS_CONFIG DEVICE_DTS_DELIMITER \ - DEVICE_DTS_DIR DEVICE_DTS_OVERLAY DEVICE_DTS_LOADADDR \ - DEVICE_FDT_NUM DEVICE_IMG_PREFIX SOC BOARD_NAME UIMAGE_MAGIC UIMAGE_NAME \ - UIMAGE_TIME SUPPORTED_DEVICES IMAGE_METADATA KERNEL_ENTRY KERNEL_LOADADDR \ - UBOOT_PATH IMAGE_SIZE NAND_SIZE \ - FACTORY_IMG_NAME FACTORY_SIZE \ - DEVICE_PACKAGES DEVICE_COMPAT_VERSION DEVICE_COMPAT_MESSAGE \ - DEVICE_VENDOR DEVICE_MODEL DEVICE_VARIANT \ - DEVICE_ALT0_VENDOR DEVICE_ALT0_MODEL DEVICE_ALT0_VARIANT \ - DEVICE_ALT1_VENDOR DEVICE_ALT1_MODEL DEVICE_ALT1_VARIANT \ - DEVICE_ALT2_VENDOR DEVICE_ALT2_MODEL DEVICE_ALT2_VARIANT \ - DEVICE_ALT3_VENDOR DEVICE_ALT3_MODEL DEVICE_ALT3_VARIANT \ - DEVICE_ALT4_VENDOR DEVICE_ALT4_MODEL DEVICE_ALT4_VARIANT \ - DEVICE_ALT5_VENDOR DEVICE_ALT5_MODEL DEVICE_ALT5_VARIANT - -define Device/ExportVar - $(1) : $(2):=$$($(2)) - -endef -define Device/Export - $(foreach var,$(DEVICE_VARS) $(DEFAULT_DEVICE_VARS),$(call Device/ExportVar,$(1),$(var))) - $(1) : FILESYSTEM:=$(2) -endef - -ifdef IB - DEVICE_CHECK_PROFILE = $(filter $(1),DEVICE_$(PROFILE) $(PROFILE)) -else - DEVICE_CHECK_PROFILE = $(CONFIG_TARGET_$(if $(CONFIG_TARGET_MULTI_PROFILE),DEVICE_)$(call target_conf,$(BOARD)_$(SUBTARGET))_$(1)) -endif - -DEVICE_EXTRA_PACKAGES = $(call qstrip,$(CONFIG_TARGET_DEVICE_PACKAGES_$(call target_conf,$(BOARD)_$(SUBTARGET))_DEVICE_$(1))) - -define merge_packages - $(1) := - $(foreach pkg,$(2), - $(1) := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$($(1))) $(pkg)) - ) -endef - -define Device/Check/Common - _PROFILE_SET = $$(strip $$(foreach profile,$$(PROFILES) DEVICE_$(1),$$(call DEVICE_CHECK_PROFILE,$$(profile)))) - DEVICE_PACKAGES += $$(call extra_packages,$$(DEVICE_PACKAGES)) - ifdef TARGET_PER_DEVICE_ROOTFS - $$(eval $$(call merge_packages,_PACKAGES,$$(DEVICE_PACKAGES) $$(call DEVICE_EXTRA_PACKAGES,$(1)))) - ROOTFS_ID/$(1) := $$(if $$(_PROFILE_SET),$$(call mkfs_packages_id,$$(_PACKAGES))) - PACKAGES_$$(ROOTFS_ID/$(1)) := $$(_PACKAGES) - endif -endef - -define Device/Check - $(Device/Check/Common) - KDIR_KERNEL_IMAGE := $(KDIR)/$(1)$$(KERNEL_SUFFIX) - _TARGET := $$(if $$(_PROFILE_SET),install-images,install-disabled) - ifndef IB - _COMPILE_TARGET := $$(if $(CONFIG_IB)$$(_PROFILE_SET),compile,compile-disabled) - endif -endef - -ifndef IB -define Device/Build/initramfs - $(call Device/Export,$(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE),$(1)) - $$(_TARGET): $$(if $$(KERNEL_INITRAMFS),$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE) \ - $$(if $$(CONFIG_JSON_OVERVIEW_IMAGE_INFO), $(BUILD_DIR)/json_info_files/$$(KERNEL_INITRAMFS_IMAGE).json,)) - - $(KDIR)/$$(KERNEL_INITRAMFS_NAME):: image_prepare - ifdef TARGET_PER_DEVICE_ROOTFS - $(KDIR)/$$(KERNEL_INITRAMFS_NAME).$$(ROOTFS_ID/$(1)):: image_prepare target-dir-$$(ROOTFS_ID/$(1)) - $(call Kernel/CompileImage/Initramfs,$(KDIR)/target-dir-$$(ROOTFS_ID/$(1)),.$$(ROOTFS_ID/$(1))) - endif - $(1)-initramfs-images: $$(if $$(KERNEL_INITRAMFS),$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE)) - $(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE): $(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE) - cp $$^ $$@ - - $(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE): $(KDIR)/$$(KERNEL_INITRAMFS_NAME)$$(strip \ - $(if $(TARGET_PER_DEVICE_ROOTFS),.$$(ROOTFS_ID/$(1))) \ - ) $(CURDIR)/Makefile $$(KERNEL_DEPENDS) image_prepare - @rm -f $$@ - $$(call concat_cmd,$$(KERNEL_INITRAMFS)) - - $(call Device/Export,$(BUILD_DIR)/json_info_files/$$(KERNEL_INITRAMFS_IMAGE).json,$(1)) - - $(BUILD_DIR)/json_info_files/$$(KERNEL_INITRAMFS_IMAGE).json: $(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE) - @mkdir -p $$(shell dirname $$@) - DEVICE_ID="$(1)" \ - SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \ - FILE_NAME="$$(notdir $$^)" \ - FILE_DIR="$(KDIR)/tmp" \ - FILE_TYPE="kernel" \ - FILE_FILESYSTEM="initramfs" \ - DEVICE_IMG_PREFIX="$$(DEVICE_IMG_PREFIX)" \ - DEVICE_VENDOR="$$(DEVICE_VENDOR)" \ - DEVICE_MODEL="$$(DEVICE_MODEL)" \ - DEVICE_VARIANT="$$(DEVICE_VARIANT)" \ - DEVICE_ALT0_VENDOR="$$(DEVICE_ALT0_VENDOR)" \ - DEVICE_ALT0_MODEL="$$(DEVICE_ALT0_MODEL)" \ - DEVICE_ALT0_VARIANT="$$(DEVICE_ALT0_VARIANT)" \ - DEVICE_ALT1_VENDOR="$$(DEVICE_ALT1_VENDOR)" \ - DEVICE_ALT1_MODEL="$$(DEVICE_ALT1_MODEL)" \ - DEVICE_ALT1_VARIANT="$$(DEVICE_ALT1_VARIANT)" \ - DEVICE_ALT2_VENDOR="$$(DEVICE_ALT2_VENDOR)" \ - DEVICE_ALT2_MODEL="$$(DEVICE_ALT2_MODEL)" \ - DEVICE_ALT2_VARIANT="$$(DEVICE_ALT2_VARIANT)" \ - DEVICE_ALT3_VENDOR="$$(DEVICE_ALT3_VENDOR)" \ - DEVICE_ALT3_MODEL="$$(DEVICE_ALT3_MODEL)" \ - DEVICE_ALT3_VARIANT="$$(DEVICE_ALT3_VARIANT)" \ - DEVICE_ALT4_VENDOR="$$(DEVICE_ALT4_VENDOR)" \ - DEVICE_ALT4_MODEL="$$(DEVICE_ALT4_MODEL)" \ - DEVICE_ALT4_VARIANT="$$(DEVICE_ALT4_VARIANT)" \ - DEVICE_ALT5_VENDOR="$$(DEVICE_ALT5_VENDOR)" \ - DEVICE_ALT5_MODEL="$$(DEVICE_ALT5_MODEL)" \ - DEVICE_ALT5_VARIANT="$$(DEVICE_ALT5_VARIANT)" \ - DEVICE_TITLE="$$(DEVICE_TITLE)" \ - DEVICE_PACKAGES="$$(DEVICE_PACKAGES)" \ - TARGET="$(BOARD)" \ - SUBTARGET="$(SUBTARGET)" \ - VERSION_NUMBER="$(VERSION_NUMBER)" \ - VERSION_CODE="$(VERSION_CODE)" \ - SUPPORTED_DEVICES="$$(SUPPORTED_DEVICES)" \ - $(TOPDIR)/scripts/json_add_image_info.py $$@ -endef -endif - -define Device/Build/compile - $$(_COMPILE_TARGET): $(KDIR)/$(1) - $(eval $(call Device/Export,$(KDIR)/$(1))) - $(KDIR)/$(1): FORCE - rm -f $(KDIR)/$(1) - $$(call concat_cmd,$(COMPILE/$(1))) - -endef - -ifndef IB -define Device/Build/dtb - ifndef BUILD_DTS_$(1) - BUILD_DTS_$(1) := 1 - $(KDIR)/image-$(1).dtb: FORCE - $(call Image/BuildDTB,$(strip $(2))/$(strip $(3)).dts,$$@) - - compile-dtb: $(KDIR)/image-$(1).dtb - endif - -endef - -define Device/Build/dtbo - ifndef BUILD_DTSO_$(1) - BUILD_DTSO_$(1) := 1 - $(KDIR)/image-$(1).dtbo: FORCE - $(call Image/BuildDTBO,$(strip $(2))/$(strip $(3)).dtso,$$@) - - compile-dtb: $(KDIR)/image-$(1).dtbo - endif - -endef -endif - -define Device/Build/kernel - $$(eval $$(foreach dts,$$(DEVICE_DTS), \ - $$(call Device/Build/dtb,$$(notdir $$(dts)), \ - $$(if $$(DEVICE_DTS_DIR),$$(DEVICE_DTS_DIR),$$(DTS_DIR)), \ - $$(dts) \ - ) \ - )) - $$(eval $$(foreach dtso,$$(DEVICE_DTS_OVERLAY), \ - $$(call Device/Build/dtbo,$$(notdir $$(dtso)), \ - $$(if $$(DEVICE_DTS_DIR),$$(DEVICE_DTS_DIR),$$(DTS_DIR)), \ - $$(dtso) \ - ) \ - )) - - $(KDIR)/$$(KERNEL_NAME):: image_prepare - $$(_TARGET): $$(if $$(KERNEL_INSTALL),$(BIN_DIR)/$$(KERNEL_IMAGE)) - $(call Device/Export,$$(KDIR_KERNEL_IMAGE),$(1)) - $(BIN_DIR)/$$(KERNEL_IMAGE): $$(KDIR_KERNEL_IMAGE) - cp $$^ $$@ - ifndef IB - ifdef CONFIG_IB - install: $$(KDIR_KERNEL_IMAGE) - endif - $$(KDIR_KERNEL_IMAGE): $(KDIR)/$$(KERNEL_NAME) $(CURDIR)/Makefile $$(KERNEL_DEPENDS) image_prepare - @rm -f $$@ - $$(call concat_cmd,$$(KERNEL)) - $$(if $$(KERNEL_SIZE),$$(call Build/check-size,$$(KERNEL_SIZE))) - endif -endef - -define Device/Build/image - GZ_SUFFIX := $(if $(filter %dtb %gz,$(2)),,$(if $(and $(findstring ext4,$(1)),$(CONFIG_TARGET_IMAGES_GZIP)),.gz)) - $$(_TARGET): $(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \ - $(BUILD_DIR)/json_info_files/$(call DEVICE_IMG_NAME,$(1),$(2)).json, \ - $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX)) - $(eval $(call Device/Export,$(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2)),$(1))) - $(3)-images: $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX) - - ROOTFS/$(1)/$(3) := \ - $(KDIR)/root.$(1)$$(strip \ - $$(if $$(FS_OPTIONS/$(1)),+fs=$$(call param_mangle,$$(FS_OPTIONS/$(1)))) \ - )$$(strip \ - $(if $(TARGET_PER_DEVICE_ROOTFS),+pkg=$$(ROOTFS_ID/$(3))) \ - ) - ifndef IB - $$(ROOTFS/$(1)/$(3)): $(if $(TARGET_PER_DEVICE_ROOTFS),target-dir-$$(ROOTFS_ID/$(3))) - endif - $(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2)): $$(KDIR_KERNEL_IMAGE) $$(ROOTFS/$(1)/$(3)) $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(if $(IB),,$(3)-initramfs-images)) - @rm -f $$@ - [ -f $$(word 1,$$^) -a -f $$(word 2,$$^) ] - $$(call concat_cmd,$(if $(IMAGE/$(2)/$(1)),$(IMAGE/$(2)/$(1)),$(IMAGE/$(2)))) - - .IGNORE: $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2)) - - $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2)).gz: $(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2)) - gzip -c -9n $$^ > $$@ - - $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2)): $(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2)) - cp $$^ $$@ - - $(BUILD_DIR)/json_info_files/$(call DEVICE_IMG_NAME,$(1),$(2)).json: $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX) - @mkdir -p $$(shell dirname $$@) - DEVICE_ID="$(DEVICE_NAME)" \ - SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \ - FILE_NAME="$(DEVICE_IMG_NAME)" \ - FILE_DIR="$(KDIR)/tmp" \ - FILE_TYPE=$(word 1,$(subst ., ,$(2))) \ - FILE_FILESYSTEM="$(1)" \ - DEVICE_IMG_PREFIX="$(DEVICE_IMG_PREFIX)" \ - DEVICE_VENDOR="$(DEVICE_VENDOR)" \ - DEVICE_MODEL="$(DEVICE_MODEL)" \ - DEVICE_VARIANT="$(DEVICE_VARIANT)" \ - DEVICE_ALT0_VENDOR="$(DEVICE_ALT0_VENDOR)" \ - DEVICE_ALT0_MODEL="$(DEVICE_ALT0_MODEL)" \ - DEVICE_ALT0_VARIANT="$(DEVICE_ALT0_VARIANT)" \ - DEVICE_ALT1_VENDOR="$(DEVICE_ALT1_VENDOR)" \ - DEVICE_ALT1_MODEL="$(DEVICE_ALT1_MODEL)" \ - DEVICE_ALT1_VARIANT="$(DEVICE_ALT1_VARIANT)" \ - DEVICE_ALT2_VENDOR="$(DEVICE_ALT2_VENDOR)" \ - DEVICE_ALT2_MODEL="$(DEVICE_ALT2_MODEL)" \ - DEVICE_ALT2_VARIANT="$(DEVICE_ALT2_VARIANT)" \ - DEVICE_ALT3_VENDOR="$(DEVICE_ALT3_VENDOR)" \ - DEVICE_ALT3_MODEL="$(DEVICE_ALT3_MODEL)" \ - DEVICE_ALT3_VARIANT="$(DEVICE_ALT3_VARIANT)" \ - DEVICE_ALT4_VENDOR="$(DEVICE_ALT4_VENDOR)" \ - DEVICE_ALT4_MODEL="$(DEVICE_ALT4_MODEL)" \ - DEVICE_ALT4_VARIANT="$(DEVICE_ALT4_VARIANT)" \ - DEVICE_ALT5_VENDOR="$(DEVICE_ALT5_VENDOR)" \ - DEVICE_ALT5_MODEL="$(DEVICE_ALT5_MODEL)" \ - DEVICE_ALT5_VARIANT="$(DEVICE_ALT5_VARIANT)" \ - DEVICE_TITLE="$(DEVICE_TITLE)" \ - DEVICE_PACKAGES="$(DEVICE_PACKAGES)" \ - TARGET="$(BOARD)" \ - SUBTARGET="$(SUBTARGET)" \ - VERSION_NUMBER="$(VERSION_NUMBER)" \ - VERSION_CODE="$(VERSION_CODE)" \ - SUPPORTED_DEVICES="$(SUPPORTED_DEVICES)" \ - $(TOPDIR)/scripts/json_add_image_info.py $$@ - -endef - -define Device/Build/artifact - $$(_TARGET): $(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \ - $(BUILD_DIR)/json_info_files/$(DEVICE_IMG_PREFIX)-$(1).json, \ - $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1)) - $(eval $(call Device/Export,$(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1))) - $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1): $$(KDIR_KERNEL_IMAGE) $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(if $(IB),,$(2)-initramfs-images)) $(2)-images - @rm -f $$@ - $$(call concat_cmd,$(ARTIFACT/$(1))) - - .IGNORE: $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1) - - $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1): $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1) - cp $$^ $$@ - - $(BUILD_DIR)/json_info_files/$(DEVICE_IMG_PREFIX)-$(1).json: $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1) - @mkdir -p $$(shell dirname $$@) - DEVICE_ID="$(DEVICE_NAME)" \ - SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \ - FILE_NAME="$(DEVICE_IMG_PREFIX)-$(1)" \ - FILE_DIR="$(KDIR)/tmp" \ - FILE_TYPE="$(1)" \ - DEVICE_IMG_PREFIX="$(DEVICE_IMG_PREFIX)" \ - DEVICE_VENDOR="$(DEVICE_VENDOR)" \ - DEVICE_MODEL="$(DEVICE_MODEL)" \ - DEVICE_VARIANT="$(DEVICE_VARIANT)" \ - DEVICE_ALT0_VENDOR="$(DEVICE_ALT0_VENDOR)" \ - DEVICE_ALT0_MODEL="$(DEVICE_ALT0_MODEL)" \ - DEVICE_ALT0_VARIANT="$(DEVICE_ALT0_VARIANT)" \ - DEVICE_ALT1_VENDOR="$(DEVICE_ALT1_VENDOR)" \ - DEVICE_ALT1_MODEL="$(DEVICE_ALT1_MODEL)" \ - DEVICE_ALT1_VARIANT="$(DEVICE_ALT1_VARIANT)" \ - DEVICE_ALT2_VENDOR="$(DEVICE_ALT2_VENDOR)" \ - DEVICE_ALT2_MODEL="$(DEVICE_ALT2_MODEL)" \ - DEVICE_ALT2_VARIANT="$(DEVICE_ALT2_VARIANT)" \ - DEVICE_ALT3_VENDOR="$(DEVICE_ALT3_VENDOR)" \ - DEVICE_ALT3_MODEL="$(DEVICE_ALT3_MODEL)" \ - DEVICE_ALT3_VARIANT="$(DEVICE_ALT3_VARIANT)" \ - DEVICE_ALT4_VENDOR="$(DEVICE_ALT4_VENDOR)" \ - DEVICE_ALT4_MODEL="$(DEVICE_ALT4_MODEL)" \ - DEVICE_ALT4_VARIANT="$(DEVICE_ALT4_VARIANT)" \ - DEVICE_ALT5_VENDOR="$(DEVICE_ALT5_VENDOR)" \ - DEVICE_ALT5_MODEL="$(DEVICE_ALT5_MODEL)" \ - DEVICE_ALT5_VARIANT="$(DEVICE_ALT5_VARIANT)" \ - DEVICE_TITLE="$(DEVICE_TITLE)" \ - DEVICE_PACKAGES="$(DEVICE_PACKAGES)" \ - TARGET="$(BOARD)" \ - SUBTARGET="$(SUBTARGET)" \ - VERSION_NUMBER="$(VERSION_NUMBER)" \ - VERSION_CODE="$(VERSION_CODE)" \ - SUPPORTED_DEVICES="$(SUPPORTED_DEVICES)" \ - $(TOPDIR)/scripts/json_add_image_info.py $$@ - -endef - -define Device/Build - $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$$(eval $$(call Device/Build/initramfs,$(1)))) - $(call Device/Build/kernel,$(1)) - - $$(eval $$(foreach compile,$$(COMPILE), \ - $$(call Device/Build/compile,$$(compile),$(1)))) - - $$(eval $$(foreach image,$$(IMAGES), \ - $$(foreach fs,$$(filter $(TARGET_FILESYSTEMS),$$(FILESYSTEMS)), \ - $$(call Device/Build/image,$$(fs),$$(image),$(1))))) - - $$(eval $$(foreach artifact,$$(ARTIFACTS), \ - $$(call Device/Build/artifact,$$(artifact),$(1)))) - -endef - -define Device/DumpInfo -Target-Profile: DEVICE_$(1) -Target-Profile-Name: $(DEVICE_DISPLAY) -Target-Profile-Packages: $(DEVICE_PACKAGES) -Target-Profile-hasImageMetadata: $(if $(foreach image,$(IMAGES),$(findstring append-metadata,$(IMAGE/$(image)))),1,0) -Target-Profile-SupportedDevices: $(SUPPORTED_DEVICES) -$(if $(BROKEN),Target-Profile-Broken: $(BROKEN)) -$(if $(DEFAULT),Target-Profile-Default: $(DEFAULT)) -Target-Profile-Description: -$(DEVICE_DESCRIPTION) -$(if $(strip $(DEVICE_ALT0_TITLE)),Alternative device titles: -- $(DEVICE_ALT0_TITLE)) -$(if $(strip $(DEVICE_ALT1_TITLE)),- $(DEVICE_ALT1_TITLE)) -$(if $(strip $(DEVICE_ALT2_TITLE)),- $(DEVICE_ALT2_TITLE)) -$(if $(strip $(DEVICE_ALT3_TITLE)),- $(DEVICE_ALT3_TITLE)) -$(if $(strip $(DEVICE_ALT4_TITLE)),- $(DEVICE_ALT4_TITLE)) -$(if $(strip $(DEVICE_ALT5_TITLE)),- $(DEVICE_ALT5_TITLE)) -@@ - -endef - -define Device/Dump -ifneq ($$(strip $$(DEVICE_ALT0_TITLE)),) -DEVICE_DISPLAY = $$(DEVICE_ALT0_TITLE) ($$(DEVICE_TITLE)) -$$(info $$(call Device/DumpInfo,$(1))) -endif -ifneq ($$(strip $$(DEVICE_ALT1_TITLE)),) -DEVICE_DISPLAY = $$(DEVICE_ALT1_TITLE) ($$(DEVICE_TITLE)) -$$(info $$(call Device/DumpInfo,$(1))) -endif -ifneq ($$(strip $$(DEVICE_ALT2_TITLE)),) -DEVICE_DISPLAY = $$(DEVICE_ALT2_TITLE) ($$(DEVICE_TITLE)) -$$(info $$(call Device/DumpInfo,$(1))) -endif -ifneq ($$(strip $$(DEVICE_ALT3_TITLE)),) -DEVICE_DISPLAY = $$(DEVICE_ALT3_TITLE) ($$(DEVICE_TITLE)) -$$(info $$(call Device/DumpInfo,$(1))) -endif -ifneq ($$(strip $$(DEVICE_ALT4_TITLE)),) -DEVICE_DISPLAY = $$(DEVICE_ALT4_TITLE) ($$(DEVICE_TITLE)) -$$(info $$(call Device/DumpInfo,$(1))) -endif -ifneq ($$(strip $$(DEVICE_ALT5_TITLE)),) -DEVICE_DISPLAY = $$(DEVICE_ALT5_TITLE) ($$(DEVICE_TITLE)) -$$(info $$(call Device/DumpInfo,$(1))) -endif -DEVICE_DISPLAY = $$(DEVICE_TITLE) -$$(eval $$(if $$(DEVICE_TITLE),$$(info $$(call Device/DumpInfo,$(1))))) -endef - -define Device - $(call Device/InitProfile,$(1)) - $(call Device/Init,$(1)) - $(call Device/Default,$(1)) - $(call Device/$(1),$(1)) - $(call Device/Check,$(1)) - $(call Device/$(if $(DUMP),Dump,Build),$(1)) - -endef - -define BuildImage - - ifneq ($(DUMP),) - all: dumpinfo - dumpinfo: FORCE - @true - endif - - download: - prepare: - compile: - compile-dtb: - clean: - image_prepare: - - ifeq ($(IB),) - .PHONY: download prepare compile compile-dtb clean image_prepare kernel_prepare install install-images - compile: - $(call Build/Compile) - - clean: - $(call Build/Clean) - - compile-dtb: - image_prepare: compile compile-dtb - mkdir -p $(BIN_DIR) $(KDIR)/tmp - rm -rf $(BUILD_DIR)/json_info_files - $(call Image/Prepare) - - else - image_prepare: - rm -rf $(KDIR)/tmp - mkdir -p $(BIN_DIR) $(KDIR)/tmp - endif - - kernel_prepare: image_prepare - $(call Image/Build/targz) - $(call Image/Build/cpiogz) - $(call Image/BuildKernel) - $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(if $(IB),,$(call Image/BuildKernel/Initramfs))) - $(call Image/InstallKernel) - - $(foreach device,$(TARGET_DEVICES),$(call Device,$(device))) - - install-images: kernel_prepare $(foreach fs,$(filter-out $(if $(UBIFS_OPTS),,ubifs),$(TARGET_FILESYSTEMS) $(fs-subtypes-y)),$(KDIR)/root.$(fs)) - $(foreach fs,$(TARGET_FILESYSTEMS), - $(call Image/Build,$(fs)) - ) - - install: install-images - $(call Image/Manifest) - -endef diff --git a/include/kernel-6.6 b/include/kernel-6.6 deleted file mode 100644 index ee524ccdd6..0000000000 --- a/include/kernel-6.6 +++ /dev/null @@ -1,2 +0,0 @@ -LINUX_VERSION-6.6 = .54 -LINUX_KERNEL_HASH-6.6.54 = 5fae869d6a24055c16ffc2d92669e3fb2b258e34d36c850bb8cf9def417ecfa0 diff --git a/include/kernel-build.mk b/include/kernel-build.mk deleted file mode 100644 index 404c318d41..0000000000 --- a/include/kernel-build.mk +++ /dev/null @@ -1,187 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -include $(INCLUDE_DIR)/prereq.mk -include $(INCLUDE_DIR)/depends.mk - -ifneq ($(DUMP),1) - all: compile -endif - -KERNEL_FILE_DEPENDS=$(GENERIC_BACKPORT_DIR) $(GENERIC_PATCH_DIR) $(GENERIC_HACK_DIR) $(PATCH_DIR) $(GENERIC_FILES_DIR) $(FILES_DIR) -STAMP_PREPARED=$(LINUX_DIR)/.prepared$(if $(QUILT)$(DUMP),,_$(shell $(call $(if $(CONFIG_AUTOREMOVE),find_md5_reproducible,find_md5),$(KERNEL_FILE_DEPENDS),))) -STAMP_CONFIGURED:=$(LINUX_DIR)/.configured -include $(INCLUDE_DIR)/download.mk -include $(INCLUDE_DIR)/quilt.mk -include $(INCLUDE_DIR)/kernel-defaults.mk - -define Kernel/Prepare - $(call Kernel/Prepare/Default) -endef - -define Kernel/Configure - $(call Kernel/Configure/Default) -endef - -define Kernel/CompileModules - $(call Kernel/CompileModules/Default) -endef - -define Kernel/CompileImage - $(call Kernel/CompileImage/Default) - $(call Kernel/CompileImage/Initramfs) -endef - -define Kernel/Clean - $(call Kernel/Clean/Default) -endef - -define Download/kernel - URL:=$(LINUX_SITE) - FILE:=$(LINUX_SOURCE) - HASH:=$(LINUX_KERNEL_HASH) -endef - -KERNEL_GIT_OPTS:= -ifneq ($(strip $(CONFIG_KERNEL_GIT_LOCAL_REPOSITORY)),"") - KERNEL_GIT_OPTS+=--reference $(CONFIG_KERNEL_GIT_LOCAL_REPOSITORY) -endif - -define Download/git-kernel - URL:=$(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)) - PROTO:=git - SOURCE_VERSION:=$(CONFIG_KERNEL_GIT_REF) - FILE:=$(LINUX_SOURCE) - SUBDIR:=linux-$(LINUX_VERSION) - OPTS:=$(KERNEL_GIT_OPTS) -endef - -ifdef CONFIG_COLLECT_KERNEL_DEBUG - define Kernel/CollectDebug - rm -rf $(KERNEL_BUILD_DIR)/debug - mkdir -p $(KERNEL_BUILD_DIR)/debug/modules - $(CP) $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/debug/ - -$(CP) \ - $(STAGING_DIR_ROOT)/lib/modules/$(LINUX_VERSION)/*.ko \ - $(KERNEL_BUILD_DIR)/debug/modules/ - $(FIND) $(KERNEL_BUILD_DIR)/debug -type f | $(XARGS) $(KERNEL_CROSS)strip --only-keep-debug - $(TAR) c -C $(KERNEL_BUILD_DIR) debug \ - $(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \ - | zstd -T0 -f -o $(BIN_DIR)/kernel-debug.tar.zst - endef -endif - -ifeq ($(DUMP)$(filter prereq clean refresh update,$(MAKECMDGOALS)),) - ifneq ($(if $(QUILT),,$(CONFIG_AUTOREBUILD)),) - define Kernel/Autoclean - $(PKG_BUILD_DIR)/.dep_files: $(STAMP_PREPARED) - $(call rdep,$(KERNEL_FILE_DEPENDS),$(STAMP_PREPARED),$(PKG_BUILD_DIR)/.dep_files,-x "*/.dep_*") - endef - endif -endif - -define BuildKernel - $(if $(QUILT),$(Build/Quilt)) - $(if $(LINUX_SITE),$(call Download,kernel)) - $(if $(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),$(call Download,git-kernel)) - - .NOTPARALLEL: - - $(Kernel/Autoclean) - $(STAMP_PREPARED): $(if $(LINUX_SITE),$(DL_DIR)/$(LINUX_SOURCE)) - -rm -rf $(KERNEL_BUILD_DIR) - -mkdir -p $(KERNEL_BUILD_DIR) - $(Kernel/Prepare) - touch $$@ - - $(KERNEL_BUILD_DIR)/symtab.h: FORCE - rm -f $(KERNEL_BUILD_DIR)/symtab.h - touch $(KERNEL_BUILD_DIR)/symtab.h - +$(KERNEL_MAKE) vmlinux - find $(LINUX_DIR) $(STAGING_DIR_ROOT)/lib/modules -name \*.ko | \ - xargs $(TARGET_CROSS)nm | \ - awk '$$$$1 == "U" { print $$$$2 } ' | \ - sort -u > $(KERNEL_BUILD_DIR)/mod_symtab.txt - $(TARGET_CROSS)nm -n $(LINUX_DIR)/vmlinux.o | awk '/^[0-9a-f]+ [rR] __ksymtab_/ {print substr($$$$3,11)}' > $(KERNEL_BUILD_DIR)/kernel_symtab.txt - grep -Ff $(KERNEL_BUILD_DIR)/mod_symtab.txt $(KERNEL_BUILD_DIR)/kernel_symtab.txt > $(KERNEL_BUILD_DIR)/sym_include.txt - grep -Fvf $(KERNEL_BUILD_DIR)/mod_symtab.txt $(KERNEL_BUILD_DIR)/kernel_symtab.txt > $(KERNEL_BUILD_DIR)/sym_exclude.txt - ( \ - echo '#define SYMTAB_KEEP \'; \ - cat $(KERNEL_BUILD_DIR)/sym_include.txt | \ - awk '{print "KEEP(*(___ksymtab+" $$$$1 ")) \\" }'; \ - echo; \ - echo '#define SYMTAB_KEEP_GPL \'; \ - cat $(KERNEL_BUILD_DIR)/sym_include.txt | \ - awk '{print "KEEP(*(___ksymtab_gpl+" $$$$1 ")) \\" }'; \ - echo; \ - echo '#define SYMTAB_DISCARD \'; \ - cat $(KERNEL_BUILD_DIR)/sym_exclude.txt | \ - awk '{print "*(___ksymtab+" $$$$1 ") \\" }'; \ - echo; \ - echo '#define SYMTAB_DISCARD_GPL \'; \ - cat $(KERNEL_BUILD_DIR)/sym_exclude.txt | \ - awk '{print "*(___ksymtab_gpl+" $$$$1 ") \\" }'; \ - echo; \ - ) > $$@ - - $(STAMP_CONFIGURED): $(STAMP_PREPARED) $(LINUX_KCONFIG_LIST) $(TOPDIR)/.config FORCE - $(Kernel/Configure) - touch $$@ - - $(LINUX_DIR)/.modules: export STAGING_PREFIX=$$(STAGING_DIR_HOST) - $(LINUX_DIR)/.modules: export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig - $(LINUX_DIR)/.modules: export PKG_CONFIG_LIBDIR=$$(STAGING_DIR_HOST)/lib/pkgconfig - $(LINUX_DIR)/.modules: export FAIL_ON_UNCONFIGURED=1 - $(LINUX_DIR)/.modules: $(STAMP_CONFIGURED) $(LINUX_DIR)/.config FORCE - $(Kernel/CompileModules) - touch $$@ - - $(LINUX_DIR)/.image: export STAGING_PREFIX=$$(STAGING_DIR_HOST) - $(LINUX_DIR)/.image: export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig - $(LINUX_DIR)/.image: export PKG_CONFIG_LIBDIR=$$(STAGING_DIR_HOST)/lib/pkgconfig - $(LINUX_DIR)/.image: $(STAMP_CONFIGURED) $(if $(CONFIG_STRIP_KERNEL_EXPORTS),$(KERNEL_BUILD_DIR)/symtab.h) FORCE - $(Kernel/CompileImage) - $(Kernel/CollectDebug) - touch $$@ - - mostlyclean: FORCE - $(Kernel/Clean) - - define BuildKernel - endef - - download: $(if $(LINUX_SITE),$(DL_DIR)/$(LINUX_SOURCE)) - prepare: $(STAMP_PREPARED) - compile: $(LINUX_DIR)/.modules - +$(MAKE) -C image compile TARGET_BUILD= - - dtb: $(STAMP_CONFIGURED) - $(_SINGLE)$(KERNEL_MAKE) scripts_dtc - $(MAKE) -C image compile-dtb TARGET_BUILD= - - oldconfig menuconfig nconfig xconfig: $(STAMP_PREPARED) $(STAMP_CHECKED) FORCE - rm -f $(LINUX_DIR)/.config.prev - rm -f $(STAMP_CONFIGURED) - $(LINUX_RECONF_CMD) > $(LINUX_DIR)/.config - $(_SINGLE)$(KERNEL_MAKE) \ - $(if $(findstring Darwin,$(HOST_OS)), \ - HOSTLDLIBS_mconf="-L$(STAGING_DIR_HOST)/lib -lncurses" \ - filechk_conf_cfg=" :" \ - ) \ - YACC=$(STAGING_DIR_HOST)/bin/bison \ - $$@ - $(call LINUX_RECONF_DIFF,$(LINUX_DIR)/.config) > $(LINUX_RECONFIG_TARGET) - - install: $(LINUX_DIR)/.image - +$(MAKE) -C image compile install TARGET_BUILD= - - clean: FORCE - rm -rf $(KERNEL_BUILD_DIR) - - image-prereq: - @+$(NO_TRACE_MAKE) -s -C image prereq TARGET_BUILD= - - prereq: image-prereq - -endef diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk deleted file mode 100644 index f94ed33230..0000000000 --- a/include/kernel-defaults.mk +++ /dev/null @@ -1,230 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -ifdef CONFIG_STRIP_KERNEL_EXPORTS - KERNEL_MAKEOPTS_IMAGE += \ - EXTRA_LDSFLAGS="-I$(KERNEL_BUILD_DIR) -include symtab.h" -endif - -INITRAMFS_EXTRA_FILES ?= $(GENERIC_PLATFORM_DIR)/image/initramfs-base-files.txt - -export HOST_EXTRACFLAGS=-I$(STAGING_DIR_HOST)/include - -# defined in quilt.mk -Kernel/Patch:=$(Kernel/Patch/Default) - -ifneq (,$(findstring .xz,$(LINUX_SOURCE))) - LINUX_CAT:=xzcat -else - LINUX_CAT:=$(STAGING_DIR_HOST)/bin/libdeflate-gzip -dc -endif - -ifeq ($(strip $(CONFIG_EXTERNAL_KERNEL_TREE)),"") - ifeq ($(strip $(CONFIG_KERNEL_GIT_CLONE_URI)),"") - define Kernel/Prepare/Default - $(LINUX_CAT) $(DL_DIR)/$(LINUX_SOURCE) | $(TAR) -C $(KERNEL_BUILD_DIR) $(TAR_OPTIONS) - $(Kernel/Patch) - $(if $(QUILT),touch $(LINUX_DIR)/.quilt_used) - endef - else - define Kernel/Prepare/Default - $(LINUX_CAT) $(DL_DIR)/$(LINUX_SOURCE) | $(TAR) -C $(KERNEL_BUILD_DIR) $(TAR_OPTIONS) - endef - endif -else - define Kernel/Prepare/Default - mkdir -p $(KERNEL_BUILD_DIR) - if [ -d $(LINUX_DIR) ]; then \ - rmdir $(LINUX_DIR); \ - fi - ln -s $(CONFIG_EXTERNAL_KERNEL_TREE) $(LINUX_DIR) - if [ -d $(LINUX_DIR)/user_headers ]; then \ - rm -rf $(LINUX_DIR)/user_headers; \ - fi - endef -endif - -ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) - ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE),y) - define Kernel/SetInitramfs/PreConfigure - { \ - grep -v -e CONFIG_BLK_DEV_INITRD $(2)/.config.old > $(2)/.config; \ - echo 'CONFIG_BLK_DEV_INITRD=y' >> $(2)/.config; \ - echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(2)/.config; \ - } - endef - else - ifeq ($(strip $(CONFIG_EXTERNAL_CPIO)),"") - define Kernel/SetInitramfs/PreConfigure - { \ - grep -v -e INITRAMFS -e CONFIG_RD_ -e CONFIG_BLK_DEV_INITRD $(2)/.config.old > $(2)/.config; \ - echo 'CONFIG_BLK_DEV_INITRD=y' >> $(2)/.config; \ - echo 'CONFIG_INITRAMFS_SOURCE="$(strip $(1) $(INITRAMFS_EXTRA_FILES))"' >> $(2)/.config; \ - } - endef - else - define Kernel/SetInitramfs/PreConfigure - { \ - grep -v INITRAMFS $(2)/.config.old > $(2)/.config; \ - echo 'CONFIG_INITRAMFS_SOURCE="$(call qstrip,$(CONFIG_EXTERNAL_CPIO))"' >> $(2)/.config; \ - } - endef - endif - endif - - define Kernel/SetInitramfs - { \ - rm -f $(2)/.config.prev; \ - mv $(2)/.config $(2)/.config.old; \ - $(call Kernel/SetInitramfs/PreConfigure,$(1),$(2)); \ - echo "# CONFIG_INITRAMFS_PRESERVE_MTIME is not set" >> $(2)/.config; \ - $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE),,echo "CONFIG_INITRAMFS_ROOT_UID=$(shell id -u)" >> $(2)/.config;) \ - $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE),,echo "CONFIG_INITRAMFS_ROOT_GID=$(shell id -g)" >> $(2)/.config;) \ - $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE), \ - echo "# CONFIG_INITRAMFS_FORCE is not set" >> $(2)/.config;, \ - $(if $(CONFIG_TARGET_INITRAMFS_FORCE), \ - echo "CONFIG_INITRAMFS_FORCE=y" >> $(2)/.config;, \ - echo "# CONFIG_INITRAMFS_FORCE is not set" >> $(2)/.config;)) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_NONE), \ - echo "CONFIG_INITRAMFS_COMPRESSION_NONE=y" >> $(2)/.config;, \ - echo "# CONFIG_INITRAMFS_COMPRESSION_NONE is not set" >> $(2)/.config; ) \ - $(foreach ALGO,GZIP BZIP2 LZMA LZO XZ LZ4 ZSTD, \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_$(ALGO)), \ - echo "CONFIG_INITRAMFS_COMPRESSION_$(ALGO)=y" >> $(2)/.config; $\, \ - echo "# CONFIG_INITRAMFS_COMPRESSION_$(ALGO) is not set" >> $(2)/.config; $\) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_$(ALGO)), \ - echo "CONFIG_RD_$(ALGO)=y" >> $(2)/.config; $\, \ - echo "# CONFIG_RD_$(ALGO) is not set" >> $(2)/.config; $\) \ - ) \ - } - endef -else -endif - -define Kernel/SetNoInitramfs - mv $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.old - grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config.set - echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config.set - echo '# CONFIG_INITRAMFS_FORCE is not set' >> $(LINUX_DIR)/.config.set - echo "# CONFIG_INITRAMFS_PRESERVE_MTIME is not set" >> $(LINUX_DIR)/.config.set -endef - -define Kernel/Configure/Default - rm -f $(LINUX_DIR)/localversion - $(LINUX_CONF_CMD) > $(LINUX_DIR)/.config.target -# copy CONFIG_KERNEL_* settings over to .config.target - awk '/^(#[[:space:]]+)?CONFIG_KERNEL/{sub("CONFIG_KERNEL_","CONFIG_");print}' $(TOPDIR)/.config >> $(LINUX_DIR)/.config.target - echo "# CONFIG_KALLSYMS_EXTRA_PASS is not set" >> $(LINUX_DIR)/.config.target - echo "# CONFIG_KALLSYMS_ALL is not set" >> $(LINUX_DIR)/.config.target - echo "CONFIG_KALLSYMS_UNCOMPRESSED=y" >> $(LINUX_DIR)/.config.target - $(SCRIPT_DIR)/package-metadata.pl kconfig $(TMP_DIR)/.packageinfo $(TOPDIR)/.config $(KERNEL_PATCHVER) > $(LINUX_DIR)/.config.override - $(SCRIPT_DIR)/kconfig.pl 'm+' '+' $(LINUX_DIR)/.config.target /dev/null $(LINUX_DIR)/.config.override > $(LINUX_DIR)/.config.set - $(call Kernel/SetNoInitramfs) - rm -rf $(KERNEL_BUILD_DIR)/modules - cmp -s $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.prev || { \ - cp $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config; \ - cp $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.prev; \ - } - $(_SINGLE) [ -d $(LINUX_DIR)/user_headers ] || $(KERNEL_MAKE) $(if $(findstring uml,$(BOARD)),ARCH=$(ARCH)) INSTALL_HDR_PATH=$(LINUX_DIR)/user_headers headers_install - grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | $(MKHASH) md5 > $(LINUX_DIR)/.vermagic -endef - -define Kernel/Configure/Initramfs - $(call Kernel/SetInitramfs,$(1),$(2)) -endef - -define Kernel/CompileModules/Default - rm -f $(LINUX_DIR)/vmlinux $(LINUX_DIR)/System.map - +$(KERNEL_MAKE) $(if $(KERNELNAME),$(KERNELNAME),all) modules - # If .config did not change, use the previous timestamp to avoid package rebuilds - cmp -s $(LINUX_DIR)/.config $(LINUX_DIR)/.config.modules.save && \ - mv $(LINUX_DIR)/.config.modules.save $(LINUX_DIR)/.config; \ - $(CP) $(LINUX_DIR)/.config $(LINUX_DIR)/.config.modules.save -endef - -OBJCOPY_STRIP = -R .reginfo -R .notes -R .note -R .comment -R .mdebug -R .note.gnu.build-id - -# AMD64 shares the location with x86 -ifeq ($(LINUX_KARCH),x86_64) -IMAGES_DIR:=../../x86/boot -endif - -# $1: image suffix -# $2: Per Device Rootfs ID -define Kernel/CopyImage - cmp -s $(LINUX_DIR)$(2)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux$(1).debug$(2) || { \ - $(KERNEL_CROSS)objcopy -O binary $(OBJCOPY_STRIP) -S $(LINUX_DIR)$(2)/vmlinux $(LINUX_KERNEL)$(1)$(2); \ - $(KERNEL_CROSS)objcopy $(OBJCOPY_STRIP) -S $(LINUX_DIR)$(2)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux$(1).elf$(2); \ - $(CP) $(LINUX_DIR)$(2)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux$(1).debug$(2); \ - $(foreach k, \ - $(if $(KERNEL_IMAGES),$(KERNEL_IMAGES),$(filter-out vmlinux dtbs,$(KERNELNAME))), \ - $(CP) $(LINUX_DIR)$(2)/arch/$(LINUX_KARCH)/boot/$(IMAGES_DIR)/$(k) $(KERNEL_BUILD_DIR)/$(k)$(1)$(2); \ - ) \ - } -endef - -define Kernel/CompileImage/Default - rm -f $(TARGET_DIR)/init - +$(KERNEL_MAKE) $(KERNEL_MAKEOPTS_IMAGE) $(if $(KERNELNAME),$(KERNELNAME),all) - $(call Kernel/CopyImage) -endef - -define Kernel/PrepareConfigPerRootfs - { \ - [ ! -d "$(1)" ] || rm -rf $(1); \ - mkdir $(1) && $(CP) -T $(LINUX_DIR) $(1); \ - touch $(1)/.config; \ - rm -rf $(1)/usr/initramfs_data.cpio*; \ - } -endef - -ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),) -# $1: Custom TARGET_DIR. If omitted TARGET_DIR is used. -# $2: If defined Generate Per Rootfs Kernel Directory and use it -# For Separate Initramf with $2 declared, skip kernel compile, it has -# already been done previously on generic image build -define Kernel/CompileImage/Initramfs - $(call locked,{ \ - $(if $(2),$(call Kernel/PrepareConfigPerRootfs,$(LINUX_DIR)$(2));) \ - $(call Kernel/Configure/Initramfs,$(if $(1),$(1),$(TARGET_DIR)),$(LINUX_DIR)$(2)); \ - $(CP) $(GENERIC_PLATFORM_DIR)/other-files/init $(if $(1),$(1),$(TARGET_DIR))/init; \ - $(if $(SOURCE_DATE_EPOCH),touch -hcd "@$(SOURCE_DATE_EPOCH)" $(if $(1),$(1),$(TARGET_DIR)) $(if $(1),$(1),$(TARGET_DIR))/init;) \ - $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE), \ - $(call locked,{ \ - $(if $(call qstrip,$(CONFIG_EXTERNAL_CPIO)), \ - $(CP) $(CONFIG_EXTERNAL_CPIO) $(KERNEL_BUILD_DIR)/initrd$(2).cpio;,\ - ( cd $(if $(1),$(1),$(TARGET_DIR)); find . | LC_ALL=C sort | $(STAGING_DIR_HOST)/bin/cpio --reproducible -o -H newc -R 0:0 > $(KERNEL_BUILD_DIR)/initrd$(2).cpio );) \ - $(if $(SOURCE_DATE_EPOCH), \ - touch -hcd "@$(SOURCE_DATE_EPOCH)" $(KERNEL_BUILD_DIR)/initrd$(2).cpio;) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2), \ - $(STAGING_DIR_HOST)/bin/bzip2 -9 -c < $(KERNEL_BUILD_DIR)/initrd$(2).cpio > $(KERNEL_BUILD_DIR)/initrd$(2).cpio.bzip2;) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_GZIP), \ - $(STAGING_DIR_HOST)/bin/libdeflate-gzip -n -f -S .gzip -12 $(KERNEL_BUILD_DIR)/initrd$(2).cpio;) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4), \ - $(STAGING_DIR_HOST)/bin/lz4c -l -c1 -fz --favor-decSpeed $(KERNEL_BUILD_DIR)/initrd$(2).cpio;) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZMA), \ - $(STAGING_DIR_HOST)/bin/lzma e -lc1 -lp2 -pb2 $(KERNEL_BUILD_DIR)/initrd$(2).cpio $(KERNEL_BUILD_DIR)/initrd$(2).cpio.lzma;) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZO), \ - $(STAGING_DIR_HOST)/bin/lzop -9 -f $(KERNEL_BUILD_DIR)/initrd$(2).cpio;) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_XZ), \ - $(STAGING_DIR_HOST)/bin/xz -T$(if $(filter 1,$(NPROC)),2,0) -9 -fz --check=crc32 $(KERNEL_BUILD_DIR)/initrd$(2).cpio;) \ - $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_ZSTD), \ - $(STAGING_DIR_HOST)/bin/zstd -T0 -f -o $(KERNEL_BUILD_DIR)/initrd$(2).cpio.zstd $(KERNEL_BUILD_DIR)/initrd$(2).cpio;) \ - }, gen-cpio$(2)); \ - $(if $(2),,$(KERNEL_MAKE) $(KERNEL_MAKEOPTS_IMAGE) $(if $(KERNELNAME),$(KERNELNAME),all);),\ - $(KERNEL_MAKE) $(if $(2),-C $(LINUX_DIR)$(2)) $(KERNEL_MAKEOPTS_IMAGE) $(if $(KERNELNAME),$(KERNELNAME),all);) \ - $(call Kernel/CopyImage,-initramfs,$(2)); \ - $(if $(2),rm -rf $(LINUX_DIR)$(2);) \ - }, gen-initramfs$(2)); -endef -else -define Kernel/CompileImage/Initramfs -endef -endif - -define Kernel/Clean/Default - rm -f $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/.configured - rm -f $(LINUX_KERNEL) - $(_SINGLE)$(MAKE) -C $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) clean -endef diff --git a/include/kernel-version.mk b/include/kernel-version.mk deleted file mode 100644 index 958ed9be0c..0000000000 --- a/include/kernel-version.mk +++ /dev/null @@ -1,51 +0,0 @@ - -# Use the default kernel version if the Makefile doesn't override it -LINUX_RELEASE?=1 - -ifdef CONFIG_TESTING_KERNEL - KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER) -endif - -KERNEL_DETAILS_FILE=$(INCLUDE_DIR)/kernel-$(KERNEL_PATCHVER) -ifeq ($(wildcard $(KERNEL_DETAILS_FILE)),) - $(error Missing kernel version/hash file for $(KERNEL_PATCHVER). Please create $(KERNEL_DETAILS_FILE)) -endif - -include $(KERNEL_DETAILS_FILE) - -ifdef KERNEL_TESTING_PATCHVER - KERNEL_TESTING_DETAILS_FILE=$(INCLUDE_DIR)/kernel-$(KERNEL_TESTING_PATCHVER) - ifeq ($(wildcard $(KERNEL_TESTING_DETAILS_FILE)),) - $(error Missing kernel version/hash file for $(KERNEL_TESTING_PATCHVER). Please create $(KERNEL_TESTING_DETAILS_FILE)) - endif - - include $(KERNEL_TESTING_DETAILS_FILE) -endif - -remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) -sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1))))))) - -ifneq ($(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),) - LINUX_VERSION:=$(call sanitize_uri,$(call remove_uri_prefix,$(CONFIG_KERNEL_GIT_CLONE_URI))) - ifeq ($(call qstrip,$(CONFIG_KERNEL_GIT_REF)),) - CONFIG_KERNEL_GIT_REF:=HEAD - endif - LINUX_VERSION:=$(LINUX_VERSION)-$(call sanitize_uri,$(CONFIG_KERNEL_GIT_REF)) -else -ifdef KERNEL_PATCHVER - LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER))) -endif -ifdef KERNEL_TESTING_PATCHVER - LINUX_TESTING_VERSION:=$(KERNEL_TESTING_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_TESTING_PATCHVER))) -endif -endif - -split_version=$(subst ., ,$(1)) -merge_version=$(subst $(space),.,$(1)) -KERNEL_BASE=$(firstword $(subst -, ,$(LINUX_VERSION))) -KERNEL=$(call merge_version,$(wordlist 1,2,$(call split_version,$(KERNEL_BASE)))) -KERNEL_PATCHVER ?= $(KERNEL) - -# disable the md5sum check for unknown kernel versions -LINUX_KERNEL_HASH:=$(LINUX_KERNEL_HASH-$(strip $(LINUX_VERSION))) -LINUX_KERNEL_HASH?=x diff --git a/include/kernel.mk b/include/kernel.mk deleted file mode 100644 index 6ef766388a..0000000000 --- a/include/kernel.mk +++ /dev/null @@ -1,309 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -ifneq ($(filter check,$(MAKECMDGOALS)),) -CHECK:=1 -DUMP:=1 -endif - -ifneq ($(SOURCE_DATE_EPOCH),) - ifndef DUMP - KBUILD_BUILD_TIMESTAMP:=$(shell perl -e 'print scalar gmtime($(SOURCE_DATE_EPOCH))') - endif -endif - -ifeq ($(__target_inc),) - ifndef CHECK - include $(INCLUDE_DIR)/target.mk - endif -endif - -ifeq ($(DUMP),1) - KERNEL?= - BOARD?= - LINUX_VERSION?= - LINUX_VERMAGIC?= -else - ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) - export GCC_HONOUR_COPTS=s - endif - - LINUX_KMOD_SUFFIX=ko - - ifneq (,$(findstring uml,$(BOARD))) - KERNEL_CC?=$(HOSTCC) - KERNEL_CROSS?= - else - KERNEL_CC?=$(TARGET_CC) - KERNEL_CROSS?=$(TARGET_CROSS) - endif - - ifeq ($(TARGET_BUILD),1) - PATCH_DIR ?= $(CURDIR)/patches$(if $(wildcard ./patches-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) - FILES_DIR ?= $(foreach dir,$(wildcard $(CURDIR)/files $(CURDIR)/files-$(KERNEL_PATCHVER)),"$(dir)") - endif - KERNEL_BUILD_DIR ?= $(BUILD_DIR)/linux-$(BOARD)_$(SUBTARGET) - LINUX_DIR ?= $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) - LINUX_UAPI_DIR=uapi/ - LINUX_VERMAGIC:=$(strip $(shell cat $(LINUX_DIR)/.vermagic 2>/dev/null)) - LINUX_VERMAGIC:=$(if $(LINUX_VERMAGIC),$(LINUX_VERMAGIC),unknown) - - LINUX_UNAME_VERSION:=$(KERNEL_BASE) - ifneq ($(findstring -rc,$(LINUX_VERSION)),) - LINUX_UNAME_VERSION:=$(LINUX_UNAME_VERSION)-$(strip $(lastword $(subst -, ,$(LINUX_VERSION)))) - endif - - LINUX_KERNEL:=$(KERNEL_BUILD_DIR)/vmlinux - - ifneq (,$(findstring -rc,$(LINUX_VERSION))) - LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.gz - else - LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.xz - endif - - ifneq (,$(findstring -rc,$(LINUX_VERSION))) - LINUX_SITE:=https://git.kernel.org/torvalds/t - else ifeq ($(call qstrip,$(CONFIG_EXTERNAL_KERNEL_TREE))$(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),) - LINUX_SITE:=@KERNEL/linux/kernel/v$(word 1,$(subst ., ,$(KERNEL_BASE))).x - else - LINUX_UNAME_VERSION:=$(strip $(shell cat $(LINUX_DIR)/include/config/kernel.release 2>/dev/null)) - endif - - MODULES_SUBDIR:=lib/modules/$(LINUX_UNAME_VERSION) - TARGET_MODULES_DIR:=$(LINUX_TARGET_DIR)/$(MODULES_SUBDIR) - - ifneq ($(TARGET_BUILD),1) - PKG_BUILD_DIR ?= $(KERNEL_BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION)) - endif -endif - -ifneq (,$(findstring uml,$(BOARD))) - LINUX_KARCH=um -else ifneq (,$(findstring $(ARCH) , aarch64 aarch64_be )) - LINUX_KARCH := arm64 -else ifneq (,$(findstring $(ARCH) , arceb )) - LINUX_KARCH := arc -else ifneq (,$(findstring $(ARCH) , armeb )) - LINUX_KARCH := arm -else ifneq (,$(findstring $(ARCH) , loongarch64 )) - LINUX_KARCH := loongarch -else ifneq (,$(findstring $(ARCH) , mipsel mips64 mips64el )) - LINUX_KARCH := mips -else ifneq (,$(findstring $(ARCH) , powerpc64 )) - LINUX_KARCH := powerpc -else ifneq (,$(findstring $(ARCH) , riscv64 )) - LINUX_KARCH := riscv -else ifneq (,$(findstring $(ARCH) , sh2 sh3 sh4 )) - LINUX_KARCH := sh -else ifneq (,$(findstring $(ARCH) , i386 x86_64 )) - LINUX_KARCH := x86 -else - LINUX_KARCH := $(ARCH) -endif - -KERNEL_MAKE = $(MAKE) $(KERNEL_MAKEOPTS) - -KERNEL_MAKE_FLAGS = \ - KCFLAGS="$(call iremap,$(BUILD_DIR),$(notdir $(BUILD_DIR))) $(filter-out -fno-plt,$(call qstrip,$(CONFIG_EXTRA_OPTIMIZATION))) $(call qstrip,$(CONFIG_KERNEL_CFLAGS))" \ - HOSTCFLAGS="$(HOST_CFLAGS) -Wall -Wmissing-prototypes -Wstrict-prototypes" \ - CROSS_COMPILE="$(KERNEL_CROSS)" \ - ARCH="$(LINUX_KARCH)" \ - KBUILD_HAVE_NLS=no \ - KBUILD_BUILD_USER="$(call qstrip,$(CONFIG_KERNEL_BUILD_USER))" \ - KBUILD_BUILD_HOST="$(call qstrip,$(CONFIG_KERNEL_BUILD_DOMAIN))" \ - KBUILD_BUILD_TIMESTAMP="$(KBUILD_BUILD_TIMESTAMP)" \ - KBUILD_BUILD_VERSION="0" \ - KBUILD_HOSTLDFLAGS="-L$(STAGING_DIR_HOST)/lib" \ - CONFIG_SHELL="$(BASH)" \ - $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') \ - $(if $(PKG_BUILD_ID),LDFLAGS_MODULE=--build-id=0x$(PKG_BUILD_ID)) \ - cmd_syscalls= \ - $(if $(__package_mk),KBUILD_EXTRA_SYMBOLS="$(wildcard $(PKG_SYMVERS_DIR)/*.symvers)") - -ifneq (,$(KERNEL_CC)) - KERNEL_MAKE_FLAGS += CC="$(KERNEL_CC)" -endif - -KERNEL_NOSTDINC_FLAGS = \ - -nostdinc $(if $(DUMP),, -isystem $(shell $(TARGET_CC) -print-file-name=include)) - -ifeq ($(call qstrip,$(CONFIG_EXTERNAL_KERNEL_TREE))$(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),) - KERNEL_MAKE_FLAGS += \ - KERNELRELEASE=$(LINUX_VERSION) -endif - -ifneq ($(HOST_OS),Linux) - KERNEL_MAKE_FLAGS += CONFIG_STACK_VALIDATION= - export SKIP_STACK_VALIDATION:=1 -endif - -KERNEL_MAKEOPTS = -C $(LINUX_DIR) $(KERNEL_MAKE_FLAGS) - -ifdef CONFIG_USE_SPARSE - KERNEL_MAKEOPTS += C=1 CHECK=$(STAGING_DIR_HOST)/bin/sparse -endif - -PKG_EXTMOD_SUBDIRS ?= . - -PKG_SYMVERS_DIR = $(KERNEL_BUILD_DIR)/symvers - -define collect_module_symvers - for subdir in $(PKG_EXTMOD_SUBDIRS); do \ - realdir=$$$$(readlink -f $(PKG_BUILD_DIR)); \ - grep -F $(PKG_BUILD_DIR) $(PKG_BUILD_DIR)/$$$$subdir/Module.symvers >> $(PKG_BUILD_DIR)/Module.symvers.tmp; \ - [ "$(PKG_BUILD_DIR)" = "$$$$realdir" ] || \ - grep -F $$$$realdir $(PKG_BUILD_DIR)/$$$$subdir/Module.symvers >> $(PKG_BUILD_DIR)/Module.symvers.tmp; \ - done; \ - sort -u $(PKG_BUILD_DIR)/Module.symvers.tmp > $(PKG_BUILD_DIR)/Module.symvers; \ - mkdir -p $(PKG_SYMVERS_DIR); \ - mv $(PKG_BUILD_DIR)/Module.symvers $(PKG_SYMVERS_DIR)/$(PKG_NAME).symvers -endef - -define KernelPackage/hooks - ifneq ($(PKG_NAME),kernel) - Hooks/Compile/Post += collect_module_symvers - endif - define KernelPackage/hooks - endef -endef - -define KernelPackage/Defaults - FILES:= - AUTOLOAD:= - MODPARAMS:= - PKGFLAGS+=nonshared -endef - -# 1: name -# 2: install prefix -# 3: module priority prefix -# 4: required for boot -# 5: module list -define ModuleAutoLoad - $(if $(5), \ - mkdir -p $(2)/etc/modules.d; \ - ($(foreach mod,$(5), \ - echo "$(mod)$(if $(MODPARAMS.$(mod)), $(MODPARAMS.$(mod)),$(if $(MODPARAMS), $(MODPARAMS)))"; )) > $(2)/etc/modules.d/$(3)$(1); \ - $(if $(4), \ - mkdir -p $(2)/etc/modules-boot.d; \ - ln -sf ../modules.d/$(3)$(1) $(2)/etc/modules-boot.d/;)) -endef - -ifeq ($(DUMP)$(TARGET_BUILD),) - -include $(LINUX_DIR)/.config -endif - -define KernelPackage/depends - $(STAMP_BUILT): $(LINUX_DIR)/.config - define KernelPackage/depends - endef -endef - -define KernelPackage - NAME:=$(1) - $(eval $(call Package/Default)) - $(eval $(call KernelPackage/Defaults)) - $(eval $(call KernelPackage/$(1))) - $(eval $(call KernelPackage/$(1)/$(BOARD))) - $(eval $(call KernelPackage/$(1)/$(BOARD)/$(SUBTARGET))) - - define Package/kmod-$(1) - TITLE:=$(TITLE) - SECTION:=kernel - CATEGORY:=Kernel modules - DESCRIPTION:=$(DESCRIPTION) - EXTRA_DEPENDS:=kernel (=$(LINUX_VERSION)~$(LINUX_VERMAGIC)-r$(LINUX_RELEASE)) - VERSION:=$(LINUX_VERSION)$(if $(PKG_VERSION),.$(PKG_VERSION))-r$(if $(PKG_RELEASE),$(PKG_RELEASE),$(LINUX_RELEASE)) - PKGFLAGS:=$(PKGFLAGS) - $(call KernelPackage/$(1)) - $(call KernelPackage/$(1)/$(BOARD)) - $(call KernelPackage/$(1)/$(BOARD)/$(SUBTARGET)) - endef - - ifdef KernelPackage/$(1)/conffiles - define Package/kmod-$(1)/conffiles -$(call KernelPackage/$(1)/conffiles) - endef - endif - - ifdef KernelPackage/$(1)/description - define Package/kmod-$(1)/description -$(call KernelPackage/$(1)/description) - endef - endif - - ifdef KernelPackage/$(1)/config - define Package/kmod-$(1)/config -$(call KernelPackage/$(1)/config) - endef - endif - - $(call KernelPackage/depends) - $(call KernelPackage/hooks) - - ifneq ($(if $(filter-out %=y %=n %=m,$(KCONFIG)),$(filter m y,$(foreach c,$(call version_filter,$(filter-out %=y %=n %=m,$(KCONFIG))),$($(c)))),.),) - define Package/kmod-$(1)/install - @for mod in $$(call version_filter,$$(FILES)); do \ - if grep -q "$$$$$$$${mod##$(LINUX_DIR)/}" "$(LINUX_DIR)/modules.builtin"; then \ - echo "NOTICE: module '$$$$$$$$mod' is built-in."; \ - elif [ -e $$$$$$$$mod ]; then \ - mkdir -p $$(1)/$(MODULES_SUBDIR) ; \ - $(CP) -L $$$$$$$$mod $$(1)/$(MODULES_SUBDIR)/ ; \ - else \ - echo "ERROR: module '$$$$$$$$mod' is missing." >&2; \ - exit 1; \ - fi; \ - done; - $(call ModuleAutoLoad,$(1),$$(1),$(filter-out 0-,$(word 1,$(AUTOLOAD))-),$(filter-out 0,$(word 2,$(AUTOLOAD))),$(sort $(wordlist 3,99,$(AUTOLOAD)))) - $(call KernelPackage/$(1)/install,$$(1)) - endef - $(if $(CONFIG_PACKAGE_kmod-$(1)), - else - compile: $(1)-disabled - $(1)-disabled: - @echo "WARNING: kmod-$(1) is not available in the kernel config - generating empty package" >&2 - - define Package/kmod-$(1)/install - true - endef - ) - endif - $$(eval $$(call BuildPackage,kmod-$(1))) - - $$(IPKG_kmod-$(1)): $$(wildcard $$(call version_filter,$$(FILES))) - -endef - -version_filter=$(if $(findstring @,$(1)),$(shell $(SCRIPT_DIR)/package-metadata.pl version_filter $(KERNEL_PATCHVER) $(1)),$(1)) - -# 1: priority (optional) -# 2: module list -# 3: boot flag -define AutoLoad - $(if $(1),$(1),0) $(if $(3),1,0) $(call version_filter,$(2)) -endef - -# 1: module list -# 2: boot flag -define AutoProbe - $(call AutoLoad,,$(1),$(2)) -endef - -version_field=$(if $(word $(1),$(2)),$(word $(1),$(2)),0) -kernel_version_merge=$$(( ($(call version_field,1,$(1)) << 24) + ($(call version_field,2,$(1)) << 16) + ($(call version_field,3,$(1)) << 8) + $(call version_field,4,$(1)) )) - -ifdef DUMP - kernel_version_cmp= -else - kernel_version_cmp=$(shell [ $(call kernel_version_merge,$(call split_version,$(2))) $(1) $(call kernel_version_merge,$(call split_version,$(3))) ] && echo 1 ) -endif - -CompareKernelPatchVer=$(if $(call kernel_version_cmp,-$(2),$(1),$(3)),1,0) - -kernel_patchver_gt=$(call kernel_version_cmp,-gt,$(KERNEL_PATCHVER),$(1)) -kernel_patchver_ge=$(call kernel_version_cmp,-ge,$(KERNEL_PATCHVER),$(1)) -kernel_patchver_eq=$(call kernel_version_cmp,-eq,$(KERNEL_PATCHVER),$(1)) -kernel_patchver_le=$(call kernel_version_cmp,-le,$(KERNEL_PATCHVER),$(1)) -kernel_patchver_lt=$(call kernel_version_cmp,-lt,$(KERNEL_PATCHVER),$(1)) - diff --git a/include/logo.png b/include/logo.png deleted file mode 100644 index bb208dd90590a273fa9b2b138f2d2b64cb3d7de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81750 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 z 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 T9Wu5N;J=4DM)zy9?4$n!WR%<> diff --git a/include/logo.svg b/include/logo.svg deleted file mode 100644 index ff4b8adfc7..0000000000 --- a/include/logo.svg +++ /dev/null @@ -1,398 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/include/meson.mk b/include/meson.mk deleted file mode 100644 index 2a20c2bd6b..0000000000 --- a/include/meson.mk +++ /dev/null @@ -1,151 +0,0 @@ -# To build your package using meson: -# -# include $(INCLUDE_DIR)/meson.mk -# MESON_ARGS+=-Dfoo -Dbar=baz -# -# To pass additional environment variables to meson: -# -# MESON_VARS+=FOO=bar -# -# Default configure/compile/install targets are provided, but can be -# overwritten if required: -# -# define Build/Configure -# $(call Build/Configure/Meson) -# ... -# endef -# -# same for Build/Compile and Build/Install -# -# Host packages are built in the same fashion, just use these vars instead: -# -# MESON_HOST_ARGS+=-Dfoo -Dbar=baz -# MESON_HOST_VARS+=FOO=bar - -MESON_DIR:=$(STAGING_DIR_HOST)/lib/meson - -MESON_HOST_BUILD_DIR:=$(HOST_BUILD_DIR)/openwrt-build -MESON_HOST_VARS:= -MESON_HOST_ARGS:= - -MESON_BUILD_DIR:=$(PKG_BUILD_DIR)/openwrt-build -MESON_VARS:= -MESON_ARGS:= - -ifneq ($(findstring i386,$(CONFIG_ARCH)),) -MESON_ARCH:="x86" -else ifneq ($(findstring powerpc64,$(CONFIG_ARCH)),) -MESON_ARCH:="ppc64" -else ifneq ($(findstring powerpc,$(CONFIG_ARCH)),) -MESON_ARCH:="ppc" -else ifneq ($(findstring mips64el,$(CONFIG_ARCH)),) -MESON_ARCH:="mips64" -else ifneq ($(findstring mipsel,$(CONFIG_ARCH)),) -MESON_ARCH:="mips" -else ifneq ($(findstring armeb,$(CONFIG_ARCH)),) -MESON_ARCH:="arm" -else -MESON_ARCH:=$(CONFIG_ARCH) -endif - -# this is undefined for just x64_64 -ifeq ($(origin CPU_TYPE),undefined) -MESON_CPU:="generic" -else -MESON_CPU:="$(CPU_TYPE)$(if $(CPU_SUBTYPE),+$(CPU_SUBTYPE))" -endif - -define Meson - $(2) $(STAGING_DIR_HOST)/bin/$(PYTHON) $(STAGING_DIR_HOST)/bin/meson.py $(1) -endef - -define Meson/CreateNativeFile - $(STAGING_DIR_HOST)/bin/sed \ - -e "s|@CC@|$(foreach BIN,$(HOSTCC),'$(BIN)',)|" \ - -e "s|@CXX@|$(foreach BIN,$(HOSTCXX),'$(BIN)',)|" \ - -e "s|@PKGCONFIG@|$(PKG_CONFIG)|" \ - -e "s|@CMAKE@|$(STAGING_DIR_HOST)/bin/cmake|" \ - -e "s|@PYTHON@|$(STAGING_DIR_HOST)/bin/python3|" \ - -e "s|@CFLAGS@|$(foreach FLAG,$(HOST_CFLAGS) $(HOST_CPPFLAGS),'$(FLAG)',)|" \ - -e "s|@CXXFLAGS@|$(foreach FLAG,$(HOST_CXXFLAGS) $(HOST_CPPFLAGS),'$(FLAG)',)|" \ - -e "s|@LDFLAGS@|$(foreach FLAG,$(HOST_LDFLAGS),'$(FLAG)',)|" \ - -e "s|@PREFIX@|$(HOST_BUILD_PREFIX)|" \ - < $(MESON_DIR)/openwrt-native.txt.in \ - > $(1) -endef - -define Meson/CreateCrossFile - $(STAGING_DIR_HOST)/bin/sed \ - -e "s|@CC@|$(foreach BIN,$(TARGET_CC),'$(BIN)',)|" \ - -e "s|@CXX@|$(foreach BIN,$(TARGET_CXX),'$(BIN)',)|" \ - -e "s|@LD@|$(foreach FLAG,$(TARGET_LINKER),'$(FLAG)',)|" \ - -e "s|@AR@|$(TARGET_AR)|" \ - -e "s|@STRIP@|$(TARGET_CROSS)strip|" \ - -e "s|@NM@|$(TARGET_NM)|" \ - -e "s|@PKGCONFIG@|$(PKG_CONFIG)|" \ - -e "s|@CMAKE@|$(STAGING_DIR_HOST)/bin/cmake|" \ - -e "s|@PYTHON@|$(STAGING_DIR_HOST)/bin/python3|" \ - -e "s|@CFLAGS@|$(foreach FLAG,$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS),'$(FLAG)',)|" \ - -e "s|@CXXFLAGS@|$(foreach FLAG,$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS),'$(FLAG)',)|" \ - -e "s|@LDFLAGS@|$(foreach FLAG,$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS),'$(FLAG)',)|" \ - -e "s|@ARCH@|$(MESON_ARCH)|" \ - -e "s|@CPU@|$(MESON_CPU)|" \ - -e "s|@ENDIAN@|$(if $(CONFIG_BIG_ENDIAN),big,little)|" \ - < $(MESON_DIR)/openwrt-cross.txt.in \ - > $(1) -endef - -define Host/Configure/Meson - $(call Meson/CreateNativeFile,$(HOST_BUILD_DIR)/openwrt-native.txt) - $(call Meson, \ - setup \ - --native-file $(HOST_BUILD_DIR)/openwrt-native.txt \ - -Ddefault_library=static \ - $(MESON_HOST_ARGS) \ - $(MESON_HOST_BUILD_DIR) \ - $(MESON_HOST_BUILD_DIR)/.., \ - $(MESON_HOST_VARS)) -endef - -define Host/Compile/Meson - +$(NINJA) -C $(MESON_HOST_BUILD_DIR) $(1) -endef - -define Host/Install/Meson - +$(NINJA) -C $(MESON_HOST_BUILD_DIR) install -endef - -define Host/Uninstall/Meson - +$(NINJA) -C $(MESON_HOST_BUILD_DIR) uninstall || true -endef - -define Build/Configure/Meson - $(call Meson/CreateNativeFile,$(PKG_BUILD_DIR)/openwrt-native.txt) - $(call Meson/CreateCrossFile,$(PKG_BUILD_DIR)/openwrt-cross.txt) - $(call Meson, \ - setup \ - --buildtype plain \ - --native-file $(PKG_BUILD_DIR)/openwrt-native.txt \ - --cross-file $(PKG_BUILD_DIR)/openwrt-cross.txt \ - -Ddefault_library=both \ - $(MESON_ARGS) \ - $(MESON_BUILD_DIR) \ - $(MESON_BUILD_DIR)/.., \ - $(MESON_VARS)) -endef - -define Build/Compile/Meson - +$(NINJA) -C $(MESON_BUILD_DIR) $(1) -endef - -define Build/Install/Meson - +DESTDIR="$(PKG_INSTALL_DIR)" $(NINJA) -C $(MESON_BUILD_DIR) install -endef - -Host/Configure=$(call Host/Configure/Meson) -Host/Compile=$(call Host/Compile/Meson) -Host/Install=$(call Host/Install/Meson) -Host/Uninstall=$(call Host/Uninstall/Meson) -Build/Configure=$(call Build/Configure/Meson) -Build/Compile=$(call Build/Compile/Meson) -Build/Install=$(call Build/Install/Meson) diff --git a/include/netfilter.mk b/include/netfilter.mk deleted file mode 100644 index a6d6dd75b8..0000000000 --- a/include/netfilter.mk +++ /dev/null @@ -1,389 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -ifneq ($(__inc_netfilter),1) -__inc_netfilter:=1 - -ifeq ($(NF_KMOD),1) -P_V4:=ipv4/netfilter/ -P_V6:=ipv6/netfilter/ -P_XT:=netfilter/ -P_EBT:=bridge/netfilter/ -endif - -# 1: variable -# 2: kconfig symbols -# 3: file list -# 4: version dependency -define nf_add - $(if $(4),ifeq ($$(strip $$(call CompareKernelPatchVer,$$(KERNEL_PATCHVER),$(firstword $(4)),$(lastword $(4)))),1)) - $(1)-$$($(2)) += $(3) - $(if $(4),endif) - KCONFIG_$(1) = $(filter-out $(2),$(KCONFIG_$(1))) $(2) -endef - - -# core - -# kernel only -$(eval $(if $(NF_KMOD),$(call nf_add,NF_REJECT,CONFIG_NF_REJECT_IPV4, $(P_V4)nf_reject_ipv4),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NF_IPT,CONFIG_IP_NF_IPTABLES, $(P_V4)ip_tables),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NF_IPT,CONFIG_NETFILTER_XTABLES, $(P_XT)x_tables),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,IPT_CORE,CONFIG_NETFILTER_XTABLES, $(P_XT)xt_tcpudp),)) -$(eval $(if $(NF_KMOD),$(call nf_add,IPT_CORE,CONFIG_IP_NF_FILTER, $(P_V4)iptable_filter),)) -$(eval $(if $(NF_KMOD),$(call nf_add,IPT_CORE,CONFIG_IP_NF_MANGLE, $(P_V4)iptable_mangle),)) - -# userland only -$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CORE,CONFIG_IP_NF_IPTABLES, xt_standard ipt_icmp xt_tcp xt_udp xt_comment xt_set xt_SET))) - -$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_LIMIT, $(P_XT)xt_limit)) -$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_MAC, $(P_XT)xt_mac)) -$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_MULTIPORT, $(P_XT)xt_multiport)) -$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_COMMENT, $(P_XT)xt_comment)) - -#cluster -$(eval $(call nf_add,IPT_CLUSTER,CONFIG_NETFILTER_XT_MATCH_CLUSTER, $(P_XT)xt_cluster)) - -$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_TARGET_LOG, $(P_XT)xt_LOG)) -$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_TARGET_TCPMSS, $(P_XT)xt_TCPMSS)) -$(eval $(call nf_add,IPT_CORE,CONFIG_IP_NF_TARGET_REJECT, $(P_V4)ipt_REJECT)) -$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_TIME, $(P_XT)xt_time)) -$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MARK, $(P_XT)xt_mark)) - -# kernel has xt_MARK.ko merged into xt_mark.ko, userspace is still separate -# userland: xt_MARK.so -$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MARK, $(P_XT)xt_MARK))) - - -# conntrack - -# kernel only -$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_CONNTRACK, $(P_XT)nf_conntrack),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_DEFRAG_IPV4, $(P_V4)nf_defrag_ipv4),)) - -$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_MATCH_STATE, $(P_XT)xt_state)) -$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_TARGET_CT, $(P_XT)xt_CT)) -$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_MATCH_CONNTRACK, $(P_XT)xt_conntrack)) - - -# conntrack-extra - -$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_MATCH_CONNBYTES, $(P_XT)xt_connbytes)) -$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_MATCH_CONNLIMIT, $(P_XT)xt_connlimit)) -$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_CONNMARK, $(P_XT)xt_connmark)) -$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_MATCH_HELPER, $(P_XT)xt_helper)) -$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_MATCH_RECENT, $(P_XT)xt_recent)) - -$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_CONNMARK, $(P_XT)xt_CONNMARK))) - -#conntrack-label - -$(eval $(call nf_add,IPT_CONNTRACK_LABEL,CONFIG_NETFILTER_XT_MATCH_CONNLABEL, $(P_XT)xt_connlabel)) - -# extra - -$(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_ADDRTYPE, $(if $(NF_KMOD),$(P_XT)xt_addrtype,$(P_XT)ipt_addrtype))) -$(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_OWNER, $(P_XT)xt_owner)) -$(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_PKTTYPE, $(P_XT)xt_pkttype)) -$(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_QUOTA, $(P_XT)xt_quota)) -$(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_CGROUP, $(P_XT)xt_cgroup)) - -#$(eval $(call nf_add,IPT_EXTRA,CONFIG_IP_NF_TARGET_ROUTE, $(P_V4)ipt_ROUTE)) - -# physdev - -$(eval $(call nf_add,IPT_PHYSDEV,CONFIG_NETFILTER_XT_MATCH_PHYSDEV, $(P_XT)xt_physdev)) - -# filter - -$(eval $(call nf_add,IPT_FILTER,CONFIG_NETFILTER_XT_MATCH_STRING, $(P_XT)xt_string)) -$(eval $(call nf_add,IPT_FILTER,CONFIG_NETFILTER_XT_MATCH_BPF, $(P_XT)xt_bpf)) - - -# ipopt - -$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_DSCP, $(P_XT)xt_dscp)) -$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_DSCP, $(P_XT)xt_DSCP)) -$(eval $(call nf_add,IPT_HASHLIMIT,CONFIG_NETFILTER_XT_MATCH_HASHLIMIT, $(P_XT)xt_hashlimit)) -$(eval $(call nf_add,IPT_RPFILTER,CONFIG_IP_NF_MATCH_RPFILTER, $(P_V4)ipt_rpfilter)) -$(eval $(call nf_add,IPT_RPFILTER,CONFIG_IP6_NF_MATCH_RPFILTER, $(P_V6)ip6t_rpfilter)) -$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_LENGTH, $(P_XT)xt_length)) -$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_STATISTIC, $(P_XT)xt_statistic)) -$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_TCPMSS, $(P_XT)xt_tcpmss)) - -$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_CLASSIFY, $(P_XT)xt_CLASSIFY)) -$(eval $(call nf_add,IPT_IPOPT,CONFIG_IP_NF_TARGET_ECN, $(P_V4)ipt_ECN)) - -$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_ECN, $(P_XT)xt_ecn)) - -# userland only -$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_DSCP, xt_tos))) -$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_DSCP, xt_TOS))) -$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_HL, ipt_ttl))) -$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_HL, ipt_TTL))) - -$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_HL, $(P_XT)xt_hl)) -$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_HL, $(P_XT)xt_HL)) - -# iprange -$(eval $(call nf_add,IPT_IPRANGE,CONFIG_NETFILTER_XT_MATCH_IPRANGE, $(P_XT)xt_iprange)) - -# ipsec -$(eval $(call nf_add,IPT_IPSEC,CONFIG_IP_NF_MATCH_AH, $(P_V4)ipt_ah)) -$(eval $(call nf_add,IPT_IPSEC,CONFIG_NETFILTER_XT_MATCH_ESP, $(P_XT)xt_esp)) -$(eval $(call nf_add,IPT_IPSEC,CONFIG_NETFILTER_XT_MATCH_POLICY, $(P_XT)xt_policy)) - -# flow offload support -$(eval $(call nf_add,IPT_FLOW,CONFIG_NETFILTER_XT_TARGET_FLOWOFFLOAD, $(P_XT)xt_FLOWOFFLOAD)) - -# IPv6 - -# kernel only -$(eval $(if $(NF_KMOD),$(call nf_add,NF_REJECT6,CONFIG_NF_REJECT_IPV6, $(P_V6)nf_reject_ipv6),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NF_IPT6,CONFIG_IP6_NF_IPTABLES, $(P_V6)ip6_tables),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_DEFRAG_IPV6, $(P_V6)nf_defrag_ipv6),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_FILTER, $(P_V6)ip6table_filter),)) -$(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_MANGLE, $(P_V6)ip6table_mangle),)) - -$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_IPTABLES, ip6t_icmp6))) - - -$(eval $(call nf_add,IPT_IPV6,CONFIG_IP6_NF_TARGET_REJECT, $(P_V6)ip6t_REJECT)) - -# ipv6 extra -$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_IPV6HEADER, $(P_V6)ip6t_ipv6header)) -$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_AH, $(P_V6)ip6t_ah)) -$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_MH, $(P_V6)ip6t_mh)) -$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_EUI64, $(P_V6)ip6t_eui64)) -$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_OPTS, $(P_V6)ip6t_hbh)) -$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_FRAG, $(P_V6)ip6t_frag)) -$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_RT, $(P_V6)ip6t_rt)) - -# log - -$(eval $(call nf_add,NF_LOG,CONFIG_NF_LOG_COMMON, $(P_XT)nf_log_common, lt 5.13)) -$(eval $(call nf_add,NF_LOG,CONFIG_NF_LOG_IPV4, $(P_V4)nf_log_ipv4, lt 5.13)) -$(eval $(call nf_add,NF_LOG,CONFIG_NF_LOG_SYSLOG, $(P_XT)nf_log_syslog, ge 5.13)) -$(eval $(if $(NF_KMOD),$(call nf_add,NF_LOG6,CONFIG_NF_LOG_IPV6, $(P_V6)nf_log_ipv6,lt 5.13),)) - -# nat - -# kernel only -$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT, $(P_XT)nf_nat),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_NETFILTER_XT_NAT, $(P_XT)xt_nat),)) -$(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_IP_NF_NAT, $(P_V4)iptable_nat),)) -$(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT6,CONFIG_IP6_NF_NAT, $(P_V6)ip6table_nat),)) -$(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT6,CONFIG_IP6_NF_TARGET_NPT, $(P_V6)ip6t_NPT),)) - -# userland only -$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_NAT,CONFIG_NF_NAT, ipt_SNAT ipt_DNAT))) -$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_NAT6,CONFIG_IP6_NF_TARGET_NPT, ip6t_DNPT ip6t_SNPT))) - -$(eval $(call nf_add,IPT_NAT,CONFIG_NETFILTER_XT_TARGET_MASQUERADE, $(P_XT)xt_MASQUERADE)) -$(eval $(call nf_add,IPT_NAT,CONFIG_NETFILTER_XT_TARGET_REDIRECT, $(P_XT)xt_REDIRECT)) - - -# nat-extra - -$(eval $(call nf_add,IPT_NAT_EXTRA,CONFIG_IP_NF_TARGET_NETMAP, $(P_XT)xt_NETMAP)) - - -# nathelper - -$(eval $(call nf_add,NF_NATHELPER,CONFIG_NF_CONNTRACK_FTP, $(P_XT)nf_conntrack_ftp)) -$(eval $(call nf_add,NF_NATHELPER,CONFIG_NF_NAT_FTP, $(P_XT)nf_nat_ftp)) - - -# nathelper-extra - -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_BROADCAST, $(P_XT)nf_conntrack_broadcast)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_NETBIOS_NS, $(P_XT)nf_conntrack_netbios_ns)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_SANE, $(P_XT)nf_conntrack_sane)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_AMANDA, $(P_XT)nf_conntrack_amanda)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_AMANDA, $(P_XT)nf_nat_amanda)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_H323, $(P_XT)nf_conntrack_h323)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_H323, $(P_V4)nf_nat_h323)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_PPTP, $(P_XT)nf_conntrack_pptp)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_PPTP, $(P_V4)nf_nat_pptp)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_SIP, $(P_XT)nf_conntrack_sip)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_SIP, $(P_XT)nf_nat_sip)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_SNMP, $(P_XT)nf_conntrack_snmp)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_SNMP_BASIC, $(P_V4)nf_nat_snmp_basic)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_TFTP, $(P_XT)nf_conntrack_tftp)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_TFTP, $(P_XT)nf_nat_tftp)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_IRC, $(P_XT)nf_conntrack_irc)) -$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_IRC, $(P_XT)nf_nat_irc)) - - -# nflog - -$(eval $(call nf_add,IPT_NFLOG,CONFIG_NETFILTER_XT_TARGET_NFLOG, $(P_XT)xt_NFLOG)) - - -# nfqueue - -$(eval $(call nf_add,IPT_NFQUEUE,CONFIG_NETFILTER_XT_TARGET_NFQUEUE, $(P_XT)xt_NFQUEUE)) - - -# debugging - -$(eval $(call nf_add,IPT_DEBUG,CONFIG_NETFILTER_XT_TARGET_TRACE, $(P_XT)xt_TRACE)) - -# socket -$(eval $(call nf_add,NF_SOCKET,CONFIG_NF_SOCKET_IPV4, $(P_V4)nf_socket_ipv4)) -$(eval $(call nf_add,NF_SOCKET,CONFIG_NF_SOCKET_IPV6, $(P_V6)nf_socket_ipv6)) -$(eval $(call nf_add,IPT_SOCKET,CONFIG_NETFILTER_XT_MATCH_SOCKET, $(P_XT)xt_socket)) - -# tproxy -$(eval $(call nf_add,NF_TPROXY,CONFIG_NF_TPROXY_IPV4, $(P_V4)nf_tproxy_ipv4)) -$(eval $(call nf_add,NF_TPROXY,CONFIG_NF_TPROXY_IPV6, $(P_V6)nf_tproxy_ipv6)) -$(eval $(call nf_add,IPT_TPROXY,CONFIG_NETFILTER_XT_TARGET_TPROXY, $(P_XT)xt_TPROXY)) - -# led -$(eval $(call nf_add,IPT_LED,CONFIG_NETFILTER_XT_TARGET_LED, $(P_XT)xt_LED)) - -# tee - -$(eval $(call nf_add,IPT_TEE,CONFIG_NETFILTER_XT_TARGET_TEE, $(P_XT)xt_TEE)) - -# u32 - -$(eval $(call nf_add,IPT_U32,CONFIG_NETFILTER_XT_MATCH_U32, $(P_XT)xt_u32)) - -# checksum - -$(eval $(call nf_add,IPT_CHECKSUM,CONFIG_NETFILTER_XT_TARGET_CHECKSUM, $(P_XT)xt_CHECKSUM)) - - -# netlink - -$(eval $(call nf_add,NFNETLINK,CONFIG_NETFILTER_NETLINK, $(P_XT)nfnetlink)) - -# nflog - -$(eval $(call nf_add,NFNETLINK_LOG,CONFIG_NETFILTER_NETLINK_LOG, $(P_XT)nfnetlink_log)) - -# nfqueue - -$(eval $(call nf_add,NFNETLINK_QUEUE,CONFIG_NETFILTER_NETLINK_QUEUE, $(P_XT)nfnetlink_queue)) - -# conncount - -$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNCOUNT,CONFIG_NETFILTER_CONNCOUNT, $(P_XT)nf_conncount),)) - -# -# ebtables -# - -$(eval $(if $(NF_KMOD),$(call nf_add,EBTABLES,CONFIG_BRIDGE_NF_EBTABLES, $(P_EBT)ebtables),)) - -# ebtables: tables -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_BROUTE, $(P_EBT)ebtable_broute)) -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_T_FILTER, $(P_EBT)ebtable_filter)) -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_T_NAT, $(P_EBT)ebtable_nat)) - -# ebtables: matches -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_802_3, $(P_EBT)ebt_802_3)) -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_AMONG, $(P_EBT)ebt_among)) -$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_ARP, $(P_EBT)ebt_arp)) -$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_IP, $(P_EBT)ebt_ip)) -$(eval $(call nf_add,EBTABLES_IP6,CONFIG_BRIDGE_EBT_IP6, $(P_EBT)ebt_ip6)) -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_LIMIT, $(P_EBT)ebt_limit)) -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_MARK, $(P_EBT)ebt_mark_m)) -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_PKTTYPE, $(P_EBT)ebt_pkttype)) -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_STP, $(P_EBT)ebt_stp)) -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_VLAN, $(P_EBT)ebt_vlan)) - -# targets -$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_ARPREPLY, $(P_EBT)ebt_arpreply)) -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_MARK_T, $(P_EBT)ebt_mark)) -$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_DNAT, $(P_EBT)ebt_dnat)) -$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_REDIRECT, $(P_EBT)ebt_redirect)) -$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_SNAT, $(P_EBT)ebt_snat)) - -# watchers -$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_LOG, $(P_EBT)ebt_log)) -$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_NFLOG, $(P_EBT)ebt_nflog)) -$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_NFQUEUE, $(P_EBT)ebt_nfqueue)) - -# nftables -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES, $(P_XT)nf_tables),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES_SET, $(P_XT)nf_tables_set),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_COUNTER, $(P_XT)nft_counter),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_CT, $(P_XT)nft_ct),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_HASH, $(P_XT)nft_hash),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_LIMIT, $(P_XT)nft_limit),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_LOG, $(P_XT)nft_log),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_META, $(P_XT)nft_meta),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_NUMGEN, $(P_XT)nft_numgen),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_OBJREF, $(P_XT)nft_objref),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_QUOTA, $(P_XT)nft_quota),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REDIR, $(P_XT)nft_redir),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REJECT, $(P_XT)nft_reject $(P_V4)nft_reject_ipv4 $(P_V6)nft_reject_ipv6),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REJECT_INET, $(P_XT)nft_reject_inet),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_BRIDGE,CONFIG_NFT_BRIDGE_META, $(P_EBT)nft_meta_bridge),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_BRIDGE,CONFIG_NFT_BRIDGE_REJECT, $(P_EBT)nft_reject_bridge),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_BRIDGE,CONFIG_NF_CONNTRACK_BRIDGE, $(P_EBT)nf_conntrack_bridge),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NFT_NAT, $(P_XT)nft_nat),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NFT_NAT, $(P_XT)nft_chain_nat),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NFT_MASQ, $(P_XT)nft_masq),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_FIB,CONFIG_NFT_FIB, $(P_XT)nft_fib),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_FIB,CONFIG_NFT_FIB_INET, $(P_XT)nft_fib_inet),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_FIB,CONFIG_NFT_FIB_IPV4, $(P_V4)nft_fib_ipv4),)) -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_FIB,CONFIG_NFT_FIB_IPV6, $(P_V6)nft_fib_ipv6),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_QUEUE,CONFIG_NFT_QUEUE, $(P_XT)nft_queue),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_SOCKET,CONFIG_NFT_SOCKET, $(P_XT)nft_socket),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_TPROXY,CONFIG_NFT_TPROXY, $(P_XT)nft_tproxy),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_COMPAT,CONFIG_NFT_COMPAT, $(P_XT)nft_compat),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_XFRM,CONFIG_NFT_XFRM, $(P_XT)nft_xfrm),)) - -$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CONNLIMIT,CONFIG_NFT_CONNLIMIT, $(P_XT)nft_connlimit),)) - -# userland only -IPT_BUILTIN += $(NF_IPT-y) $(NF_IPT-m) -IPT_BUILTIN += $(IPT_CORE-y) $(IPT_CORE-m) -IPT_BUILTIN += $(NF_CONNTRACK-y) -IPT_BUILTIN += $(NF_CONNTRACK6-y) -IPT_BUILTIN += $(IPT_CONNTRACK-y) -IPT_BUILTIN += $(IPT_CONNTRACK_EXTRA-y) -IPT_BUILTIN += $(IPT_EXTRA-y) -IPT_BUILTIN += $(IPT_PHYSDEV-y) -IPT_BUILTIN += $(IPT_FILTER-y) -IPT_BUILTIN += $(IPT_FLOW-y) $(IPT_FLOW-m) -IPT_BUILTIN += $(IPT_IPOPT-y) -IPT_BUILTIN += $(IPT_IPRANGE-y) -IPT_BUILTIN += $(IPT_CLUSTER-y) -IPT_BUILTIN += $(IPT_IPSEC-y) -IPT_BUILTIN += $(IPT_IPV6-y) $(IPT_IPV6-m) -IPT_BUILTIN += $(NF_NAT-y) -IPT_BUILTIN += $(NF_NAT6-y) -IPT_BUILTIN += $(IPT_NAT-y) -IPT_BUILTIN += $(IPT_NAT6-y) -IPT_BUILTIN += $(IPT_NAT_EXTRA-y) -IPT_BUILTIN += $(NF_NATHELPER-y) -IPT_BUILTIN += $(NF_NATHELPER_EXTRA-y) -IPT_BUILTIN += $(IPT_TPROXY-y) -IPT_BUILTIN += $(NFNETLINK-y) -IPT_BUILTIN += $(NFNETLINK_LOG-y) -IPT_BUILTIN += $(NFNETLINK_QUEUE-y) -IPT_BUILTIN += $(EBTABLES-y) -IPT_BUILTIN += $(EBTABLES_IP4-y) -IPT_BUILTIN += $(EBTABLES_IP6-y) -IPT_BUILTIN += $(EBTABLES_WATCHERS-y) - -endif # __inc_netfilter diff --git a/include/nls.mk b/include/nls.mk deleted file mode 100644 index f054d2bb68..0000000000 --- a/include/nls.mk +++ /dev/null @@ -1,48 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2011-2020 OpenWrt.org - -# iconv full -ifeq ($(CONFIG_BUILD_NLS),y) - ICONV_PREFIX:=$(STAGING_DIR)/usr/lib/libiconv-full - ICONV_FULL:=1 - - INTL_PREFIX:=$(STAGING_DIR)/usr/lib/libintl-full - INTL_FULL:=1 - - CMAKE_OPTIONS += -DCMAKE_PREFIX_PATH="$(ICONV_PREFIX);$(INTL_PREFIX)" -else - ICONV_PREFIX:= - ICONV_FULL:= - - INTL_PREFIX:= - INTL_FULL:= -endif - -PKG_CONFIG_DEPENDS += CONFIG_BUILD_NLS - -ICONV_DEPENDS:=+BUILD_NLS:libiconv-full -ifeq ($(CONFIG_BUILD_NLS),y) - ICONV_CFLAGS:=-I$(ICONV_PREFIX)/include - ICONV_CPPFLAGS:=-I$(ICONV_PREFIX)/include - ICONV_LDFLAGS:=-L$(ICONV_PREFIX)/lib -Wl,-rpath-link=$(ICONV_PREFIX)/lib -else - ICONV_CFLAGS:= - ICONV_CPPFLAGS:= - ICONV_LDFLAGS:= -endif - -INTL_DEPENDS:=+BUILD_NLS:libintl-full -ifeq ($(CONFIG_BUILD_NLS),y) - INTL_CFLAGS:=-I$(INTL_PREFIX)/include - INTL_CPPFLAGS:=-I$(INTL_PREFIX)/include - INTL_LDFLAGS:=-L$(INTL_PREFIX)/lib -Wl,-rpath-link=$(INTL_PREFIX)/lib -else - INTL_CFLAGS:= - INTL_CPPFLAGS:= - INTL_LDFLAGS:= -endif - -TARGET_CFLAGS += $(ICONV_CFLAGS) $(INTL_CFLAGS) -TARGET_CPPFLAGS += $(ICONV_CPPFLAGS) $(INTL_CPPFLAGS) -TARGET_LDFLAGS += $(ICONV_LDFLAGS) $(INTL_LDFLAGS) diff --git a/include/openssl-module.mk b/include/openssl-module.mk deleted file mode 100644 index 7348a10dbc..0000000000 --- a/include/openssl-module.mk +++ /dev/null @@ -1,79 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2022-2023 Enéas Ulir de Queiroz - -ENGINES_DIR=engines-3 - -define Package/openssl/module/Default - SECTION:=libs - CATEGORY:=Libraries - SUBMENU:=SSL - DEPENDS:=libopenssl +libopenssl-conf -endef - -define Package/openssl/engine/Default - $(Package/openssl/module/Default) - DEPENDS+=@OPENSSL_ENGINE -endef - - -# 1 = moudule type (engine|provider) -# 2 = module name -# 3 = directory to save .so file -# 4 = [ package name, defaults to libopenssl-$(2) ] -define Package/openssl/add-module - $(eval MOD_TYPE:=$(1)) - $(eval MOD_NAME:=$(2)) - $(eval MOD_DIR:=$(3)) - $(eval OSSL_PKG:=$(if $(4),$(4),libopenssl-$(MOD_NAME))) - $(info Package/openssl/add-module 1='$(1)'; 2='$(2)'; 3='$(3)' 4='$(4)') - $(info MOD_TYPE='$(MOD_TYPE)'; MOD_NAME='$(MOD_NAME)'; MOD_DIR='$(MOD_DIR)' OSSL_PKG='$(OSSL_PKG)') - Package/$(OSSL_PKG)/conffiles:=/etc/ssl/modules.cnf.d/$(MOD_NAME).cnf - - define Package/$(OSSL_PKG)/install - $$(INSTALL_DIR) $$(1)/$(MOD_DIR) - $$(INSTALL_BIN) $$(PKG_INSTALL_DIR)/$(MOD_DIR)/$(MOD_NAME).so \ - $$(1)/$(MOD_DIR) - $$(INSTALL_DIR) $$(1)/etc/ssl/modules.cnf.d - $$(INSTALL_DATA) ./files/$(MOD_NAME).cnf $$(1)/etc/ssl/modules.cnf.d/ - endef - - define Package/$(OSSL_PKG)/postinst -#!/bin/sh -OPENSSL_UCI="$$$${IPKG_INSTROOT}/etc/config/openssl" - -[ -z "$$$${IPKG_INSTROOT}" ] \ - && uci -q get openssl.$(MOD_NAME) >/dev/null \ - && exit 0 - -cat << EOF >> "$$$${OPENSSL_UCI}" - -config $(MOD_TYPE) '$(MOD_NAME)' - option enabled '1' -EOF - -[ -n "$$$${IPKG_INSTROOT}" ] || /etc/init.d/openssl reload -exit 0 - endef - - define Package/$(OSSL_PKG)/postrm -#!/bin/sh -[ -n "$$$${IPKG_INSTROOT}" ] && exit 0 -uci -q delete openssl.$(MOD_NAME) && uci commit openssl -/etc/init.d/openssl reload -exit 0 - endef -endef - -# 1 = engine name -# 2 - package name, defaults to libopenssl-$(1) -define Package/openssl/add-engine - $(call Package/openssl/add-module,engine,$(1),/usr/lib/$(ENGINES_DIR),$(2)) -endef - -# 1 = provider name -# 2 = [ package name, defaults to libopenssl-$(1) ] -define Package/openssl/add-provider - $(call Package/openssl/add-module,provider,$(1),/usr/lib/ossl-modules,$(2)) -endef - diff --git a/include/package-bin.mk b/include/package-bin.mk deleted file mode 100644 index 4ca49218e9..0000000000 --- a/include/package-bin.mk +++ /dev/null @@ -1,41 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2007-2020 OpenWrt.org - -ifeq ($(DUMP),) - define BuildTarget/bin - TARGET_VARIANT=$(if $(ALL_VARIANTS),$(if $(VARIANT),$(filter-out *,$(VARIANT)),$(firstword $(ALL_VARIANTS)))) - ifeq ($(if $(TARGET_VARIANT),$(BUILD_VARIANT)),$(TARGET_VARIANT)) - ifdef Package/$(1)/install - ifneq ($(CONFIG_PACKAGE_$(1))$(DEVELOPER),) - $(_pkg_target)compile: $(PKG_BUILD_DIR)/.pkgdir/$(1).installed - compile: install-bin-$(1) - else - compile: $(1)-disabled - $(1)-disabled: - @echo "WARNING: skipping $(1) -- package not selected" >&2 - endif - endif - endif - - $(PKG_BUILD_DIR)/.pkgdir/$(1).installed: $(STAMP_BUILT) - rm -rf $(PKG_BUILD_DIR)/.pkgdir/$(1) $$@ - mkdir -p $(PKG_BUILD_DIR)/.pkgdir/$(1) - $(call Package/$(1)/install,$(PKG_BUILD_DIR)/.pkgdir/$(1)) - touch $$@ - - install-bin-$(1): $(PKG_BUILD_DIR)/.pkgdir/$(1).installed - rm -rf $(BIN_DIR)/$(1) - -rmdir $(PKG_BUILD_DIR)/.pkgdir/$(1) >/dev/null 2>/dev/null - if [ -d $(PKG_BUILD_DIR)/.pkgdir/$(1) ]; then \ - $(INSTALL_DIR) $(BIN_DIR)/$(1) && \ - $(CP) $(PKG_BUILD_DIR)/.pkgdir/$(1)/. $(BIN_DIR)/$(1)/; \ - fi - - clean-$(1): - rm -rf $(BIN_DIR)/$(1) - - clean: clean-$(1) - .PHONY: install-bin-$(1) - endef -endif diff --git a/include/package-defaults.mk b/include/package-defaults.mk deleted file mode 100644 index 6a401dde2c..0000000000 --- a/include/package-defaults.mk +++ /dev/null @@ -1,164 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -PKG_DEFAULT_DEPENDS = +libc - -ifneq ($(PKG_NAME),toolchain) - PKG_FIXUP_DEPENDS = $(if $(filter kmod-%,$(1)),$(2),$(PKG_DEFAULT_DEPENDS) $(filter-out $(PKG_DEFAULT_DEPENDS),$(2))) -else - PKG_FIXUP_DEPENDS = $(2) -endif - -define Package/Default - CONFIGFILE:= - SECTION:=opt - CATEGORY:=Extra packages - DEPENDS:= - MDEPENDS:= - CONFLICTS:= - PROVIDES:= - EXTRA_DEPENDS:= - MAINTAINER:=$(PKG_MAINTAINER) - SOURCE:=$(patsubst $(TOPDIR)/%,%,$(patsubst $(TOPDIR)/package/%,feeds/base/%,$(CURDIR))) - ifneq ($(PKG_VERSION),) - ifneq ($(PKG_RELEASE),) - VERSION:=$(PKG_VERSION)-r$(PKG_RELEASE) - else - VERSION:=$(PKG_VERSION) - endif - else - VERSION:=$(PKG_RELEASE) - endif - ABI_VERSION:= - ifneq ($(PKG_FLAGS),) - PKGFLAGS:=$(PKG_FLAGS) - else - PKGFLAGS:= - endif - ifneq ($(ARCH_PACKAGES),) - PKGARCH:=$(ARCH_PACKAGES) - else - PKGARCH:=$(BOARD) - endif - DEFAULT:= - MENU:= - SUBMENU:= - SUBMENUDEP:= - TITLE:= - KCONFIG:= - BUILDONLY:= - HIDDEN:= - URL:=$(PKG_URL) - VARIANT:= - DEFAULT_VARIANT:= - USERID:= - ALTERNATIVES:= - LICENSE:=$(PKG_LICENSE) - LICENSE_FILES:=$(PKG_LICENSE_FILES) - FILE_MODES:=$(PKG_FILE_MODES) -endef - -Build/Patch:=$(Build/Patch/Default) -ifneq ($(strip $(PKG_UNPACK)),) - define Build/Prepare/Default - $(PKG_UNPACK) - [ ! -d ./src/ ] || $(CP) ./src/. $(PKG_BUILD_DIR) - $(Build/Patch) - endef -endif - -EXTRA_CXXFLAGS = $(EXTRA_CFLAGS) -ifeq ($(CONFIG_BUILD_NLS),y) - DISABLE_NLS:= -else - DISABLE_NLS:=--disable-nls -endif - -CONFIGURE_PREFIX:=/usr -CONFIGURE_ARGS = \ - --target=$(GNU_TARGET_NAME) \ - --host=$(GNU_TARGET_NAME) \ - --build=$(GNU_HOST_NAME) \ - --disable-dependency-tracking \ - --program-prefix="" \ - --program-suffix="" \ - --prefix=$(CONFIGURE_PREFIX) \ - --exec-prefix=$(CONFIGURE_PREFIX) \ - --bindir=$(CONFIGURE_PREFIX)/bin \ - --sbindir=$(CONFIGURE_PREFIX)/sbin \ - --libexecdir=$(CONFIGURE_PREFIX)/lib \ - --sysconfdir=/etc \ - --datadir=$(CONFIGURE_PREFIX)/share \ - --localstatedir=/var \ - --mandir=$(CONFIGURE_PREFIX)/man \ - --infodir=$(CONFIGURE_PREFIX)/info \ - $(DISABLE_NLS) \ - $(DISABLE_IPV6) - -CONFIGURE_VARS = \ - $(TARGET_CONFIGURE_OPTS) \ - CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \ - CXXFLAGS="$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS)" \ - CPPFLAGS="$(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)" \ - LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \ - -CONFIGURE_PATH = . -CONFIGURE_CMD = ./configure - -replace_script=$(FIND) $(1) -name $(2) | $(XARGS) chmod u+w; \ - $(FIND) $(1) -name $(2) | $(XARGS) -n1 cp --remove-destination \ - $(SCRIPT_DIR)/$(2); - -define Build/Configure/Default - (cd $(PKG_BUILD_DIR)/$(CONFIGURE_PATH)/$(strip $(3)); \ - if [ -x $(CONFIGURE_CMD) ]; then \ - $(call replace_script,$(PKG_BUILD_DIR)/$(3),config.guess) \ - $(call replace_script,$(PKG_BUILD_DIR)/$(3),config.sub) \ - $(CONFIGURE_VARS) \ - $(2) \ - $(CONFIGURE_CMD) \ - $(CONFIGURE_ARGS) \ - $(1); \ - fi; \ - ) -endef - -MAKE_VARS = \ - CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)" \ - CXXFLAGS="$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)" \ - LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" - -MAKE_FLAGS = \ - $(TARGET_CONFIGURE_OPTS) \ - CROSS="$(TARGET_CROSS)" \ - ARCH="$(ARCH)" - -MAKE_INSTALL_FLAGS = \ - $(MAKE_FLAGS) \ - DESTDIR="$(PKG_INSTALL_DIR)" - -MAKE_PATH ?= . - -define Build/Compile/Default - +$(MAKE_VARS) \ - $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) \ - $(MAKE_FLAGS) \ - $(1); -endef - -define Build/Install/Default - $(MAKE_VARS) \ - $(MAKE) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) \ - $(MAKE_INSTALL_FLAGS) \ - $(if $(PKG_SUBDIRS),SUBDIRS='$$$$(wildcard $(PKG_SUBDIRS))') \ - $(if $(1), $(1), install); -endef - -define Build/Dist/Default - $(call Build/Compile/Default, DESTDIR="$(PKG_BUILD_DIR)/tmp" CC="$(TARGET_CC)" dist) -endef - -define Build/DistCheck/Default - $(call Build/Compile/Default, DESTDIR="$(PKG_BUILD_DIR)/tmp" CC="$(TARGET_CC)" distcheck) -endef diff --git a/include/package-dumpinfo.mk b/include/package-dumpinfo.mk deleted file mode 100644 index e180c770e3..0000000000 --- a/include/package-dumpinfo.mk +++ /dev/null @@ -1,58 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -ifneq ($(DUMP),) - - -define SOURCE_INFO -$(if $(PKG_BUILD_DEPENDS),Build-Depends: $(PKG_BUILD_DEPENDS) -)$(if $(HOST_BUILD_DEPENDS),Build-Depends/host: $(HOST_BUILD_DEPENDS) -)$(if $(BUILD_TYPES),Build-Types: $(BUILD_TYPES) -) - -endef - -define Dumpinfo/Package -$(info $(SOURCE_INFO)Package: $(1) -$(if $(MENU),Menu: $(MENU) -)$(if $(SUBMENU),Submenu: $(SUBMENU) -)$(if $(SUBMENUDEP),Submenu-Depends: $(SUBMENUDEP) -)$(if $(DEFAULT),Default: $(DEFAULT) -)$(if $(findstring $(PREREQ_CHECK),1),Prereq-Check: 1 -)Version: $(VERSION) -Depends: $(call PKG_FIXUP_DEPENDS,$(1),$(DEPENDS)) -Conflicts: $(CONFLICTS) -Menu-Depends: $(MDEPENDS) -Provides: $(PROVIDES) -$(if $(VARIANT),Build-Variant: $(VARIANT) -$(if $(DEFAULT_VARIANT),Default-Variant: $(VARIANT) -))Section: $(SECTION) -Category: $(CATEGORY) -$(if $(filter nonshared,$(PKGFLAGS)),,Repository: $(if $(FEED),$(FEED),base) -)Title: $(TITLE) -Maintainer: $(MAINTAINER) -$(if $(USERID),Require-User: $(USERID) -)Source: $(PKG_SOURCE) -$(if $(LICENSE),License: $(LICENSE) -)$(if $(LICENSE_FILES),LicenseFiles: $(LICENSE_FILES) -)$(if $(PKG_CPE_ID),CPE-ID: $(PKG_CPE_ID) -)$(if $(URL),URL: $(URL) -)$(if $(ABI_VERSION),ABI-Version: $(ABI_VERSION) -)Type: $(if $(Package/$(1)/targets),$(Package/$(1)/targets),$(if $(PKG_TARGETS),$(PKG_TARGETS),ipkg)) -$(if $(KCONFIG),Kernel-Config: $(KCONFIG) -)$(if $(BUILDONLY),Build-Only: $(BUILDONLY) -)$(if $(HIDDEN),Hidden: $(HIDDEN) -)Description: $(if $(Package/$(1)/description),$(Package/$(1)/description),$(TITLE)) -@@ -$(if $(Package/$(1)/config),Config: -$(Package/$(1)/config) -@@ -)) -SOURCE_INFO := -endef - -dumpinfo: FORCE - $(if $(SOURCE_INFO),$(info $(SOURCE_INFO))) - -endif diff --git a/include/package-pack.mk b/include/package-pack.mk deleted file mode 100644 index 26a3278834..0000000000 --- a/include/package-pack.mk +++ /dev/null @@ -1,369 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2022 OpenWrt.org - -ifndef DUMP - include $(INCLUDE_DIR)/feeds.mk -endif - -IPKG_STATE_DIR:=$(TARGET_DIR)/usr/lib/opkg - -# Generates a make statement to return a wildcard for candidate ipkg files -# 1: package name -define gen_package_wildcard - $(1)$$(if $$(filter -%,$$(ABIV_$(1))),,[^a-z-])* -endef - -# 1: package name -# 2: candidate ipk files -define remove_ipkg_files - $(if $(strip $(2)),$(SCRIPT_DIR)/ipkg-remove $(1) $(2)) -endef - -# 1: package name -# 2: variable name -# 3: variable suffix -# 4: file is a script -define BuildPackVariable -ifdef Package/$(1)/$(2) - $$(PACK_$(1)) : VAR_$(2)$(3)=$$(Package/$(1)/$(2)) - $(call shexport,Package/$(1)/$(2)) - $(1)_COMMANDS += echo "$$$$$$$$$(call shvar,Package/$(1)/$(2))" > $(2)$(3); $(if $(4),chmod 0755 $(2)$(3);) -endif -endef - -PARENL :=( -PARENR :=) - -dep_split=$(subst :,$(space),$(1)) -dep_rem=$(subst !,,$(subst $(strip $(PARENL)),,$(subst $(strip $(PARENR)),,$(word 1,$(call dep_split,$(1)))))) -dep_and=dep_and_res:=$$(and $(subst $(space),$(comma),$(foreach cond,$(subst &&, ,$(1)),$$(CONFIG_$(cond))))) -dep_confvar=$(strip $(foreach cond,$(subst ||, ,$(call dep_rem,$(1))),$(eval $(call dep_and,$(cond)))$(dep_and_res))) -dep_pos=$(if $(call dep_confvar,$(1)),$(call dep_val,$(1))) -dep_neg=$(if $(call dep_confvar,$(1)),,$(call dep_val,$(1))) -dep_if=$(if $(findstring !,$(1)),$(call dep_neg,$(1)),$(call dep_pos,$(1))) -dep_val=$(word 2,$(call dep_split,$(1))) -strip_deps=$(strip $(subst +,,$(filter-out @%,$(1)))) -filter_deps=$(foreach dep,$(call strip_deps,$(1)),$(if $(findstring :,$(dep)),$(call dep_if,$(dep)),$(dep))) - -define AddDependency - $$(if $(1),$$(if $(2),$$(foreach pkg,$(1),$$(PACK_$$(pkg))): $$(foreach pkg,$(2),$$(PACK_$$(pkg))))) -endef - -define FixupReverseDependencies - DEPS := $$(filter %:$(1),$$(IDEPEND)) - DEPS := $$(patsubst %:$(1),%,$$(DEPS)) - DEPS := $$(filter $$(DEPS),$$(IPKGS)) - $(call AddDependency,$$(DEPS),$(1)) -endef - -define FixupDependencies - DEPS := $$(filter $(1):%,$$(IDEPEND)) - DEPS := $$(patsubst $(1):%,%,$$(DEPS)) - DEPS := $$(filter $$(DEPS),$$(IPKGS)) - $(call AddDependency,$(1),$$(DEPS)) -endef - -ifneq ($(PKG_NAME),toolchain) - define CheckDependencies - @( \ - rm -f $(PKG_INFO_DIR)/$(1).missing; \ - ( \ - export \ - READELF=$(TARGET_CROSS)readelf \ - OBJCOPY=$(TARGET_CROSS)objcopy \ - XARGS="$(XARGS)"; \ - $(SCRIPT_DIR)/gen-dependencies.sh "$$(IDIR_$(1))"; \ - ) | while read FILE; do \ - grep -qxF "$$$$FILE" $(PKG_INFO_DIR)/$(1).provides || \ - echo "$$$$FILE" >> $(PKG_INFO_DIR)/$(1).missing; \ - done; \ - if [ -f "$(PKG_INFO_DIR)/$(1).missing" ]; then \ - echo "Package $(1) is missing dependencies for the following libraries:" >&2; \ - cat "$(PKG_INFO_DIR)/$(1).missing" >&2; \ - false; \ - fi; \ - ) - endef -endif - -_addsep=$(word 1,$(1))$(foreach w,$(wordlist 2,$(words $(1)),$(1)),$(strip $(2) $(w))) -_cleansep=$(subst $(space)$(2)$(space),$(2)$(space),$(1)) -mergelist=$(call _cleansep,$(call _addsep,$(1),$(comma)),$(comma)) -addfield=$(if $(strip $(2)),$(1): $(2)) -_define=define -_endef=endef - -ifeq ($(DUMP),) - define BuildTarget/ipkg - ABIV_$(1):=$(call FormatABISuffix,$(1),$(ABI_VERSION)) - PDIR_$(1):=$(call FeedPackageDir,$(1)) -ifeq ($(CONFIG_USE_APK),) - PACK_$(1):=$$(PDIR_$(1))/$(1)$$(ABIV_$(1))_$(VERSION)_$(PKGARCH).ipk -else - PACK_$(1):=$$(PDIR_$(1))/$(1)$$(ABIV_$(1))-$(VERSION).apk -endif - IDIR_$(1):=$(PKG_BUILD_DIR)/ipkg-$(PKGARCH)/$(1) - ADIR_$(1):=$(PKG_BUILD_DIR)/apk-$(PKGARCH)/$(1) - KEEP_$(1):=$(strip $(call Package/$(1)/conffiles)) - - TARGET_VARIANT:=$$(if $(ALL_VARIANTS),$$(if $$(VARIANT),$$(filter-out *,$$(VARIANT)),$(firstword $(ALL_VARIANTS)))) - ifeq ($(BUILD_VARIANT),$$(if $$(TARGET_VARIANT),$$(TARGET_VARIANT),$(BUILD_VARIANT))) - do_install= - ifdef Package/$(1)/install - do_install=yes - endif - ifdef Package/$(1)/install-overlay - do_install=yes - endif - ifdef do_install - ifneq ($(CONFIG_PACKAGE_$(1))$(DEVELOPER),) - IPKGS += $(1) - $(_pkg_target)compile: $$(PACK_$(1)) $(PKG_INFO_DIR)/$(1).provides $(PKG_BUILD_DIR)/.pkgdir/$(1).installed - prepare-package-install: $$(PACK_$(1)) - compile: $(STAGING_DIR_ROOT)/stamp/.$(1)_installed - else - $(if $(CONFIG_PACKAGE_$(1)),$$(info WARNING: skipping $(1) -- package not selected)) - endif - - .PHONY: $(PKG_INSTALL_STAMP).$(1) - ifeq ($(CONFIG_PACKAGE_$(1)),y) - compile: $(PKG_INSTALL_STAMP).$(1) - endif - $(PKG_INSTALL_STAMP).$(1): prepare-package-install - echo "$(1)" >> $(PKG_INSTALL_STAMP) - else - $(if $(CONFIG_PACKAGE_$(1)),$$(warning WARNING: skipping $(1) -- package has no install section)) - endif - endif - - DEPENDS:=$(call PKG_FIXUP_DEPENDS,$(1),$(DEPENDS)) - IDEPEND_$(1):=$$(call filter_deps,$$(DEPENDS)) - IDEPEND += $$(patsubst %,$(1):%,$$(IDEPEND_$(1))) - $(FixupDependencies) - $(FixupReverseDependencies) - - $(eval $(call BuildPackVariable,$(1),conffiles)) - $(eval $(call BuildPackVariable,$(1),preinst,,1)) - $(eval $(call BuildPackVariable,$(1),postinst,-pkg,1)) - $(eval $(call BuildPackVariable,$(1),prerm,-pkg,1)) - $(eval $(call BuildPackVariable,$(1),postrm,,1)) - - $(PKG_BUILD_DIR)/.pkgdir/$(1).installed : export PATH=$$(TARGET_PATH_PKG) - $(PKG_BUILD_DIR)/.pkgdir/$(1).installed: $(STAMP_BUILT) - rm -rf $$@ $(PKG_BUILD_DIR)/.pkgdir/$(1) - mkdir -p $(PKG_BUILD_DIR)/.pkgdir/$(1) - $(call Package/$(1)/install,$(PKG_BUILD_DIR)/.pkgdir/$(1)) - $(call Package/$(1)/install_lib,$(PKG_BUILD_DIR)/.pkgdir/$(1)) - touch $$@ - - $(STAGING_DIR_ROOT)/stamp/.$(1)_installed: $(PKG_BUILD_DIR)/.pkgdir/$(1).installed - mkdir -p $(STAGING_DIR_ROOT)/stamp - $(if $(ABI_VERSION),echo '$(ABI_VERSION)' | cmp -s - $(PKG_INFO_DIR)/$(1).version || { \ - echo '$(ABI_VERSION)' > $(PKG_INFO_DIR)/$(1).version; \ - $(foreach pkg,$(filter-out $(1),$(PROVIDES)), \ - cp $(PKG_INFO_DIR)/$(1).version $(PKG_INFO_DIR)/$(pkg).version; \ - ) \ - } ) - $(call locked,$(CP) $(PKG_BUILD_DIR)/.pkgdir/$(1)/. $(STAGING_DIR_ROOT)/,root-copy) - touch $$@ - - Package/$(1)/DEPENDS := $$(call mergelist,$$(foreach dep,$$(filter-out @%,$$(IDEPEND_$(1))),$$(dep)$$(call GetABISuffix,$$(dep)))) - ifneq ($$(EXTRA_DEPENDS),) - Package/$(1)/DEPENDS := $$(EXTRA_DEPENDS)$$(if $$(Package/$(1)/DEPENDS),$$(comma) $$(Package/$(1)/DEPENDS)) - endif - -$(_define) Package/$(1)/CONTROL -Package: $(1)$$(ABIV_$(1)) -Version: $(VERSION) -$$(call addfield,Depends,$$(Package/$(1)/DEPENDS) -)$$(call addfield,Conflicts,$$(call mergelist,$(CONFLICTS)) -)$$(call addfield,Provides,$$(call mergelist,$$(filter-out $(1)$$(ABIV_$(1)),$(PROVIDES)$$(if $$(ABIV_$(1)), $(1) $(foreach provide,$(PROVIDES),$(provide)$$(ABIV_$(1)))))) -)$$(call addfield,Alternatives,$$(call mergelist,$(ALTERNATIVES)) -)$$(call addfield,Source,$(SOURCE) -)$$(call addfield,SourceName,$(PKG_NAME) -)$$(call addfield,License,$(LICENSE) -)$$(call addfield,LicenseFiles,$(LICENSE_FILES) -)$$(call addfield,Section,$(SECTION) -)$$(call addfield,Require-User,$(USERID) -)$$(call addfield,SourceDateEpoch,$(PKG_SOURCE_DATE_EPOCH) -)$$(call addfield,URL,$(URL) -)$$(if $$(ABIV_$(1)),ABIVersion: $$(ABIV_$(1)) -)$(if $(PKG_CPE_ID),CPE-ID: $(PKG_CPE_ID) -)$(if $(filter hold,$(PKG_FLAGS)),Status: unknown hold not-installed -)$(if $(filter essential,$(PKG_FLAGS)),Essential: yes -)$(if $(MAINTAINER),Maintainer: $(MAINTAINER) -)Architecture: $(PKGARCH) -Installed-Size: 0 -$(_endef) - - $$(PACK_$(1)) : export CONTROL=$$(Package/$(1)/CONTROL) - $$(PACK_$(1)) : export DESCRIPTION=$$(Package/$(1)/description) - $$(PACK_$(1)) : export PATH=$$(TARGET_PATH_PKG) - $$(PACK_$(1)) : export PKG_SOURCE_DATE_EPOCH:=$(PKG_SOURCE_DATE_EPOCH) - $(PKG_INFO_DIR)/$(1).provides $$(PACK_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-pack.mk - rm -rf $$(IDIR_$(1)) -ifeq ($$(CONFIG_USE_APK),) - $$(call remove_ipkg_files,$(1),$$(call opkg_package_files,$(call gen_package_wildcard,$(1)))) -else - $$(call remove_ipkg_files,$(1),$$(call apk_package_files,$(call gen_package_wildcard,$(1)))) -endif - mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1)) $(PKG_INFO_DIR) - $(call Package/$(1)/install,$$(IDIR_$(1))) - $(if $(Package/$(1)/install-overlay),mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1))/rootfs-overlay) - $(call Package/$(1)/install-overlay,$$(IDIR_$(1))/rootfs-overlay) - -find $$(IDIR_$(1)) -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| $(XARGS) rm -rf - @( \ - find $$(IDIR_$(1)) -name lib\*.so\* -or -name \*.ko | awk -F/ '{ print $$$$NF }'; \ - for file in $$(patsubst %,$(PKG_INFO_DIR)/%.provides,$$(IDEPEND_$(1))); do \ - if [ -f "$$$$file" ]; then \ - cat $$$$file; \ - fi; \ - done; $(Package/$(1)/extra_provides) \ - ) | sort -u > $(PKG_INFO_DIR)/$(1).provides - $(if $(PROVIDES),@for pkg in $(filter-out $(1),$(PROVIDES)); do cp $(PKG_INFO_DIR)/$(1).provides $(PKG_INFO_DIR)/$$$$pkg.provides; done) - $(CheckDependencies) - - $(RSTRIP) $$(IDIR_$(1)) - - ifneq ($$(CONFIG_IPK_FILES_CHECKSUMS),) - (cd $$(IDIR_$(1)); \ - ( \ - find . -type f \! -path ./CONTROL/\* -exec $(MKHASH) sha256 -n \{\} \; 2> /dev/null | \ - sed 's|\([[:blank:]]\)\./| \1/|' > $$(IDIR_$(1))/CONTROL/files-sha256sum \ - ) || true \ - ) - endif - - ifneq ($$(KEEP_$(1)),) - @( \ - keepfiles=""; \ - for x in $$(KEEP_$(1)); do \ - [ -f "$$(IDIR_$(1))/$$$$x" ] || keepfiles="$$$${keepfiles:+$$$$keepfiles }$$$$x"; \ - done; \ - [ -z "$$$$keepfiles" ] || { \ - mkdir -p $$(IDIR_$(1))/lib/upgrade/keep.d; \ - for x in $$$$keepfiles; do echo $$$$x >> $$(IDIR_$(1))/lib/upgrade/keep.d/$(1); done; \ - }; \ - ) - endif - - $(INSTALL_DIR) $$(PDIR_$(1))/tmp - -ifeq ($(CONFIG_USE_APK),) - mkdir -p $$(IDIR_$(1))/CONTROL - (cd $$(IDIR_$(1))/CONTROL; \ - ( \ - echo "$$$$CONTROL"; \ - printf "Description: "; echo "$$$$DESCRIPTION" | sed -e 's,^[[:space:]]*, ,g'; \ - ) > control; \ - chmod 644 control; \ - ( \ - echo "#!/bin/sh"; \ - echo "[ \"\$$$${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; \ - echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \ - echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \ - echo "default_postinst \$$$$0 \$$$$@"; \ - ) > postinst; \ - ( \ - echo "#!/bin/sh"; \ - echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \ - echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \ - echo "default_prerm \$$$$0 \$$$$@"; \ - ) > prerm; \ - chmod 0755 postinst prerm; \ - $($(1)_COMMANDS) \ - ) - - $(FAKEROOT) $(STAGING_DIR_HOST)/bin/bash $(SCRIPT_DIR)/ipkg-build -m "$(FILE_MODES)" $$(IDIR_$(1)) $$(PDIR_$(1)) -else - mkdir -p $$(ADIR_$(1))/ - mkdir -p $$(IDIR_$(1))/lib/apk/packages/ - - (cd $$(ADIR_$(1)); $($(1)_COMMANDS)) - - ( \ - echo "#!/bin/sh"; \ - echo "[ \"\$$$${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; \ - echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \ - echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \ - echo 'export root="$$$${IPKG_INSTROOT}"'; \ - echo 'export pkgname="$(1)"'; \ - echo "add_group_and_user"; \ - [ ! -f $$(ADIR_$(1))/postinst-pkg ] || cat "$$(ADIR_$(1))/postinst-pkg"; \ - echo "default_postinst"; \ - ) > $$(ADIR_$(1))/post-install; - - ( \ - echo "#!/bin/sh"; \ - echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \ - echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \ - echo 'export root="$$$${IPKG_INSTROOT}"'; \ - echo 'export pkgname="$(1)"'; \ - [ ! -f $$(ADIR_$(1))/prerm-pkg ] || cat "$$(ADIR_$(1))/prerm-pkg"; \ - echo "default_prerm"; \ - ) > $$(ADIR_$(1))/pre-deinstall; - - if [ -n "$(USERID)" ]; then echo $(USERID) > $$(IDIR_$(1))/lib/apk/packages/$(1).rusers; fi; - if [ -n "$(ALTERNATIVES)" ]; then echo $(ALTERNATIVES) > $$(IDIR_$(1))/lib/apk/packages/$(1).alternatives; fi; - (cd $$(IDIR_$(1)) && find . -type f,l -printf "/%P\n" > $$(IDIR_$(1))/lib/apk/packages/$(1).list) - # Move conffiles to IDIR and build conffiles_static with csums - if [ -f $$(ADIR_$(1))/conffiles ]; then \ - mv -f $$(ADIR_$(1))/conffiles $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; \ - for file in $$$$(cat $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles); do \ - [ -f $$(IDIR_$(1))/$$$$file ] || continue; \ - csum=$$$$($(MKHASH) sha256 $$(IDIR_$(1))/$$$$file); \ - echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles_static; \ - done; \ - fi - - # Some package (base-files) manually append stuff to conffiles - # Append stuff from it and delete the CONTROL directory since everything else should be migrated - if [ -f $$(IDIR_$(1))/CONTROL/conffiles ]; then \ - echo $$$$(IDIR_$(1))/CONTROL/conffiles >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; \ - for file in $$$$(cat $$(IDIR_$(1))/CONTROL/conffiles); do \ - [ -f $$(IDIR_$(1))/$$$$file ] || continue; \ - csum=$$$$($(MKHASH) sha256 $$(IDIR_$(1))/$$$$file); \ - echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles_static; \ - done; \ - rm -rf $$(IDIR_$(1))/CONTROL/conffiles; \ - fi - - if [ -z "$$$$(ls -A $$(IDIR_$(1))/CONTROL 2>/dev/null)" ]; then \ - rm -rf $$(IDIR_$(1))/CONTROL; \ - else \ - echo "CONTROL directory $$(IDIR_$(1))/CONTROL is not empty! This is not right and should be checked!" >&2; \ - exit 1; \ - fi - - $(FAKEROOT) $(STAGING_DIR_HOST)/bin/apk mkpkg \ - --info "name:$(1)$$(ABIV_$(1))" \ - --info "version:$(VERSION)" \ - --info "description:" \ - --info "arch:$(PKGARCH)" \ - --info "license:$(LICENSE)" \ - --info "origin:$(SOURCE)" \ - --info "provides:$$(foreach prov,$$(filter-out $(1)$$(ABIV_$(1)),$(PROVIDES)$$(if $$(ABIV_$(1)), \ - $(1) $(foreach provide,$(PROVIDES),$(provide)$$(ABIV_$(1))))),$$(prov)=$(VERSION) )" \ - --script "post-install:$$(ADIR_$(1))/post-install" \ - --script "pre-deinstall:$$(ADIR_$(1))/pre-deinstall" \ - --info "depends:$$(foreach depends,$$(subst $$(comma),$$(space),$$(subst $$(space),,$$(subst $$(paren_right),,$$(subst $$(paren_left),,$$(Package/$(1)/DEPENDS))))),$$(depends))" \ - --files "$$(IDIR_$(1))" \ - --output "$$(PACK_$(1))" \ - --sign "$(BUILD_KEY_APK_SEC)" -endif - - @[ -f $$(PACK_$(1)) ] - - $(1)-clean: -ifeq ($(CONFIG_USE_APK),) - $$(call remove_ipkg_files,$(1),$$(call opkg_package_files,$(call gen_package_wildcard,$(1)))) -else - $$(call remove_ipkg_files,$(1),$$(call apk_package_files,$(call gen_package_wildcard,$(1)))) -endif - - - clean: $(1)-clean - - endef -endif diff --git a/include/package-seccomp.mk b/include/package-seccomp.mk deleted file mode 100644 index 86e834450d..0000000000 --- a/include/package-seccomp.mk +++ /dev/null @@ -1,12 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2015-2020 OpenWrt.org - -PKG_CONFIG_DEPENDS+= CONFIG_KERNEL_SECCOMP - -ifeq ($(CONFIG_KERNEL_SECCOMP),y) - define InstallSeccomp - $(INSTALL_DIR) $(1)/etc/seccomp - $(INSTALL_DATA) $(2) $(1)/etc/seccomp/ - endef -endif diff --git a/include/package.mk b/include/package.mk deleted file mode 100644 index 7fbecf98dc..0000000000 --- a/include/package.mk +++ /dev/null @@ -1,381 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -__package_mk:=1 - -all: $(if $(DUMP),dumpinfo,$(if $(CHECK),check,compile)) - -include $(INCLUDE_DIR)/download.mk - -PKG_BUILD_DIR ?= $(BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION)) -PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install -PKG_BUILD_PARALLEL ?= -PKG_SKIP_DOWNLOAD=$(USE_SOURCE_DIR)$(USE_GIT_TREE)$(USE_GIT_SRC_CHECKOUT) - -MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) $(if $(filter 3.% 4.0 4.1,$(MAKE_VERSION)),-j)) - -PKG_SOURCE_DATE_EPOCH:=$(if $(DUMP),,$(shell $(TOPDIR)/scripts/get_source_date_epoch.sh $(CURDIR))) - -ifeq ($(strip $(PKG_BUILD_PARALLEL)),0) -PKG_JOBS?=-j1 -else -PKG_JOBS?=$(if $(PKG_BUILD_PARALLEL),$(MAKE_J),-j1) -endif - -PKG_BUILD_FLAGS?= -__unknown_flags=$(filter-out no-iremap no-mips16 gc-sections no-gc-sections lto no-lto no-mold,$(PKG_BUILD_FLAGS)) -ifneq ($(__unknown_flags),) - $(error unknown PKG_BUILD_FLAGS: $(__unknown_flags)) -endif - -# $1=flagname, $2=default (0/1) -define pkg_build_flag -$(if $(filter no-$(1),$(PKG_BUILD_FLAGS)),0,$(if $(filter $(1),$(PKG_BUILD_FLAGS)),1,$(2))) -endef - -ifeq ($(call pkg_build_flag,iremap,1),1) - IREMAP_CFLAGS = $(call iremap,$(PKG_BUILD_DIR),$(notdir $(PKG_BUILD_DIR))) - TARGET_CFLAGS += $(IREMAP_CFLAGS) -endif -ifdef CONFIG_USE_MIPS16 - ifeq ($(call pkg_build_flag,mips16,1),1) - TARGET_ASFLAGS_DEFAULT = $(filter-out -mips16 -minterlink-mips16,$(TARGET_CFLAGS)) - TARGET_CFLAGS += -mips16 -minterlink-mips16 - TARGET_CXXFLAGS += -mips16 -minterlink-mips16 - endif -endif -ifeq ($(call pkg_build_flag,gc-sections,$(if $(CONFIG_USE_GC_SECTIONS),1,0)),1) - TARGET_CFLAGS+= -ffunction-sections -fdata-sections - TARGET_CXXFLAGS+= -ffunction-sections -fdata-sections - TARGET_LDFLAGS+= -Wl,--gc-sections -endif -ifeq ($(call pkg_build_flag,lto,$(if $(CONFIG_USE_LTO),1,0)),1) - TARGET_CFLAGS+= -flto=auto -fno-fat-lto-objects - TARGET_CXXFLAGS+= -flto=auto -fno-fat-lto-objects - TARGET_LDFLAGS+= -flto=auto -fuse-linker-plugin -endif -ifdef CONFIG_USE_MOLD - ifeq ($(call pkg_build_flag,mold,1),1) - TARGET_LINKER:=mold - endif -endif - -include $(INCLUDE_DIR)/hardening.mk -include $(INCLUDE_DIR)/prereq.mk -include $(INCLUDE_DIR)/unpack.mk -include $(INCLUDE_DIR)/depends.mk - -ifneq ($(wildcard $(TOPDIR)/git-src/$(PKG_NAME)/.git),) - USE_GIT_SRC_CHECKOUT:=1 - QUILT:=1 -endif -ifneq ($(if $(CONFIG_SRC_TREE_OVERRIDE),$(wildcard ./git-src)),) - USE_GIT_TREE:=1 - QUILT:=1 -endif -ifdef USE_SOURCE_DIR - QUILT:=1 -endif -ifneq ($(wildcard $(PKG_BUILD_DIR)/.source_dir),) - QUILT:=1 -endif - -include $(INCLUDE_DIR)/quilt.mk - -find_library_dependencies = \ - $(wildcard $(patsubst %,$(STAGING_DIR)/pkginfo/%.version, \ - $(filter-out $(BUILD_PACKAGES), $(sort $(foreach dep4, \ - $(sort $(foreach dep3, \ - $(sort $(foreach dep2, \ - $(sort $(foreach dep1, \ - $(sort $(foreach dep0, \ - $(Package/$(1)/depends), \ - $(Package/$(dep0)/depends) $(dep0) \ - )), \ - $(Package/$(dep1)/depends) $(dep1) \ - )), \ - $(Package/$(dep2)/depends) $(dep2) \ - )), \ - $(Package/$(dep3)/depends) $(dep3) \ - )), \ - $(Package/$(dep4)/depends) $(dep4) \ - ))) \ - )) - - -PKG_DIR_NAME:=$(lastword $(subst /,$(space),$(CURDIR))) -STAMP_NO_AUTOREBUILD=$(wildcard $(PKG_BUILD_DIR)/.no_autorebuild) -PREV_STAMP_PREPARED:=$(if $(STAMP_NO_AUTOREBUILD),$(wildcard $(PKG_BUILD_DIR)/.prepared*)) -ifneq ($(PREV_STAMP_PREPARED),) - STAMP_PREPARED:=$(PREV_STAMP_PREPARED) - CONFIG_AUTOREBUILD:= -else - STAMP_PREPARED=$(PKG_BUILD_DIR)/.prepared$(if $(QUILT)$(DUMP),,_$(shell $(call $(if $(CONFIG_AUTOREMOVE),find_md5_reproducible,find_md5),${CURDIR} $(PKG_FILE_DEPENDS),))_$(call confvar,CONFIG_AUTOREMOVE $(PKG_PREPARED_DEPENDS))) -endif -STAMP_CONFIGURED=$(PKG_BUILD_DIR)/.configured$(if $(DUMP),,_$(call confvar,$(PKG_CONFIG_DEPENDS))) -STAMP_CONFIGURED_WILDCARD=$(PKG_BUILD_DIR)/.configured_* -STAMP_BUILT:=$(PKG_BUILD_DIR)/.built -STAMP_INSTALLED:=$(STAGING_DIR)/stamp/.$(PKG_DIR_NAME)$(if $(BUILD_VARIANT),.$(BUILD_VARIANT),)_installed - -STAGING_FILES_LIST:=$(PKG_DIR_NAME)$(if $(BUILD_VARIANT),.$(BUILD_VARIANT),).list - -define CleanStaging - rm -f $(STAMP_INSTALLED) - @-(\ - if [ -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) ]; then \ - $(SCRIPT_DIR)/clean-package.sh \ - "$(STAGING_DIR)/packages/$(STAGING_FILES_LIST)" \ - "$(STAGING_DIR)"; \ - fi; \ - ) -endef - - -PKG_INSTALL_STAMP:=$(PKG_INFO_DIR)/$(PKG_DIR_NAME).$(if $(BUILD_VARIANT),$(BUILD_VARIANT),default).install - -include $(INCLUDE_DIR)/package-defaults.mk -include $(INCLUDE_DIR)/package-dumpinfo.mk -include $(INCLUDE_DIR)/package-pack.mk -include $(INCLUDE_DIR)/package-bin.mk -include $(INCLUDE_DIR)/autotools.mk - -_pkg_target:=$(if $(QUILT),,.) - -override MAKEFLAGS= -CONFIG_SITE:=$(INCLUDE_DIR)/site/$(ARCH) -CUR_MAKEFILE:=$(filter-out Makefile,$(firstword $(MAKEFILE_LIST))) -SUBMAKE:=$(NO_TRACE_MAKE) $(if $(CUR_MAKEFILE),-f $(CUR_MAKEFILE)) -PKG_CONFIG_PATH=$(STAGING_DIR)/usr/lib/pkgconfig:$(STAGING_DIR)/usr/share/pkgconfig -unexport QUIET CONFIG_SITE - -ifeq ($(DUMP)$(filter prereq clean refresh update,$(MAKECMDGOALS)),) - ifneq ($(if $(QUILT),,$(CONFIG_AUTOREBUILD)),) - define Build/Autoclean - $(PKG_BUILD_DIR)/.dep_files: $(STAMP_PREPARED) - $(call rdep,${CURDIR} $(PKG_FILE_DEPENDS),$(STAMP_PREPARED),$(PKG_BUILD_DIR)/.dep_files,-x "*/.dep_*") - $(if $(filter prepare,$(MAKECMDGOALS)),,$(call rdep,$(PKG_BUILD_DIR),$(STAMP_BUILT),,-x "*/.dep_*" -x "*/ipkg*")) - endef - endif -endif - -ifdef USE_GIT_SRC_CHECKOUT - define Build/Prepare/Default - mkdir -p $(PKG_BUILD_DIR) - ln -s $(TOPDIR)/git-src/$(PKG_NAME)/.git $(PKG_BUILD_DIR)/.git - ( cd $(PKG_BUILD_DIR); \ - git checkout .; \ - git submodule update --recursive; \ - git submodule foreach git config --unset core.worktree; \ - git submodule foreach git checkout .; \ - ) - endef -endif -ifdef USE_GIT_TREE - define Build/Prepare/Default - mkdir -p $(PKG_BUILD_DIR) - ln -s $(CURDIR)/git-src $(PKG_BUILD_DIR)/.git - ( cd $(PKG_BUILD_DIR); \ - git checkout .; \ - git submodule update --recursive; \ - git submodule foreach git config --unset core.worktree; \ - git submodule foreach git checkout .; \ - ) - endef -endif -ifdef USE_SOURCE_DIR - define Build/Prepare/Default - rm -rf $(PKG_BUILD_DIR) - $(if $(wildcard $(USE_SOURCE_DIR)/*),,@echo "Error: USE_SOURCE_DIR=$(USE_SOURCE_DIR) path not found"; false) - ln -snf $(USE_SOURCE_DIR) $(PKG_BUILD_DIR) - touch $(PKG_BUILD_DIR)/.source_dir - endef -endif - -define Build/Exports/Default - $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR)/usr/share/aclocal $$(STAGING_DIR)/usr/share/aclocal-* $$(STAGING_DIR_HOSTPKG)/share/aclocal $$(STAGING_DIR_HOSTPKG)/share/aclocal-* $$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*),-I $$(p)) - $(1) : export STAGING_PREFIX=$$(STAGING_DIR)/usr - $(1) : export PATH=$$(TARGET_PATH_PKG) - $(1) : export CONFIG_SITE:=$$(CONFIG_SITE) - $(1) : export PKG_CONFIG_PATH:=$$(PKG_CONFIG_PATH) - $(1) : export PKG_CONFIG_LIBDIR:=$$(PKG_CONFIG_PATH) - $(1) : export GIT_CEILING_DIRECTORIES:=$$(BUILD_DIR) -endef -Build/Exports=$(Build/Exports/Default) - -define Build/CoreTargets - STAMP_PREPARED:=$$(STAMP_PREPARED) - STAMP_CONFIGURED:=$$(STAMP_CONFIGURED) - - $(if $(QUILT),$(Build/Quilt)) - $(call Build/Autoclean) - $(call DefaultTargets) - - $(call check_download_integrity) - - download: - $(foreach hook,$(Hooks/Download), - $(call $(hook))$(sep) - ) - - $(STAMP_PREPARED) : export PATH=$$(TARGET_PATH_PKG) - $(STAMP_PREPARED): $(STAMP_PREPARED_DEPENDS) - @-rm -rf $(PKG_BUILD_DIR) - @mkdir -p $(PKG_BUILD_DIR) - touch $$@_check - $(foreach hook,$(Hooks/Prepare/Pre),$(call $(hook))$(sep)) - $(Build/Prepare) - $(foreach hook,$(Hooks/Prepare/Post),$(call $(hook))$(sep)) - touch $$@ - - $(call Build/Exports,$(STAMP_CONFIGURED)) - $(STAMP_CONFIGURED): $(STAMP_PREPARED) $(STAMP_CONFIGURED_DEPENDS) - rm -f $(STAMP_CONFIGURED_WILDCARD) - $(CleanStaging) - $(foreach hook,$(Hooks/Configure/Pre),$(call $(hook))$(sep)) - $(Build/Configure) - $(foreach hook,$(Hooks/Configure/Post),$(call $(hook))$(sep)) - touch $$@ - - $(call Build/Exports,$(STAMP_BUILT)) - $(STAMP_BUILT): $(STAMP_CONFIGURED) $(STAMP_BUILT_DEPENDS) - rm -f $$@ - touch $$@_check - $(foreach hook,$(Hooks/Compile/Pre),$(call $(hook))$(sep)) - $(Build/Compile) - $(foreach hook,$(Hooks/Compile/Post),$(call $(hook))$(sep)) - $(Build/Install) - $(foreach hook,$(Hooks/Install/Post),$(call $(hook))$(sep)) - touch $$@ - - $(STAMP_INSTALLED) : export PATH=$$(TARGET_PATH_PKG) - $(STAMP_INSTALLED): $(STAMP_BUILT) - rm -rf $(TMP_DIR)/stage-$(PKG_DIR_NAME) - mkdir -p $(TMP_DIR)/stage-$(PKG_DIR_NAME)/host $(STAGING_DIR)/packages - $(foreach hook,$(Hooks/InstallDev/Pre),\ - $(call $(hook),$(TMP_DIR)/stage-$(PKG_DIR_NAME),$(TMP_DIR)/stage-$(PKG_DIR_NAME)/host)$(sep)\ - ) - $(call Build/InstallDev,$(TMP_DIR)/stage-$(PKG_DIR_NAME),$(TMP_DIR)/stage-$(PKG_DIR_NAME)/host) - $(foreach hook,$(Hooks/InstallDev/Post),\ - $(call $(hook),$(TMP_DIR)/stage-$(PKG_DIR_NAME),$(TMP_DIR)/stage-$(PKG_DIR_NAME)/host)$(sep)\ - ) - if [ -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) ]; then \ - $(SCRIPT_DIR)/clean-package.sh \ - "$(STAGING_DIR)/packages/$(STAGING_FILES_LIST)" \ - "$(STAGING_DIR)"; \ - fi - if [ -d $(TMP_DIR)/stage-$(PKG_DIR_NAME) ]; then \ - (cd $(TMP_DIR)/stage-$(PKG_DIR_NAME); find ./ > $(TMP_DIR)/stage-$(PKG_DIR_NAME).files); \ - $(call locked, \ - mv $(TMP_DIR)/stage-$(PKG_DIR_NAME).files $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) && \ - $(CP) $(TMP_DIR)/stage-$(PKG_DIR_NAME)/* $(STAGING_DIR)/; \ - ,staging-dir); \ - fi - rm -rf $(TMP_DIR)/stage-$(PKG_DIR_NAME) - touch $$@ - - ifdef Build/InstallDev - $(_pkg_target)compile: $(STAMP_INSTALLED) - endif - - $(_pkg_target)prepare: $(STAMP_PREPARED) - $(_pkg_target)configure: $(STAMP_CONFIGURED) - $(_pkg_target)dist: $(STAMP_CONFIGURED) - $(_pkg_target)distcheck: $(STAMP_CONFIGURED) - - ifneq ($(CONFIG_AUTOREMOVE),) - compile: - -touch -r $(PKG_BUILD_DIR)/.built $(PKG_BUILD_DIR)/.autoremove 2>/dev/null >/dev/null - $(FIND) $(PKG_BUILD_DIR) -mindepth 1 -maxdepth 1 -not '(' -type f -and -name '.*' -and -size 0 ')' -and -not -name '.pkgdir' -print0 | \ - $(XARGS) -0 rm -rf - endif -endef - -define Build/DefaultTargets - $(if $(PKG_SKIP_DOWNLOAD),,$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default))) - $(if $(DUMP),,$(Build/CoreTargets)) - - define Build/DefaultTargets - endef -endef - -define BuildPackage - $(eval $(Package/Default)) - $(eval $(Package/$(1))) - -ifdef DESCRIPTION -$$(error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description) -endif - -ifndef Package/$(1)/description -define Package/$(1)/description - $(TITLE) -endef -endif - - BUILD_PACKAGES += $(1) - $(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(1))) - - $(foreach FIELD, TITLE CATEGORY SECTION VERSION, - ifeq ($($(FIELD)),) - $$(error Package/$(1) is missing the $(FIELD) field) - endif - ) - - $(if $(DUMP), \ - $(if $(CHECK),,$(Dumpinfo/Package)), \ - $(foreach target, \ - $(if $(Package/$(1)/targets),$(Package/$(1)/targets), \ - $(if $(PKG_TARGETS),$(PKG_TARGETS), ipkg) \ - ), $(BuildTarget/$(target)) \ - ) \ - ) - $(if $(PKG_HOST_ONLY),,$(call Build/DefaultTargets,$(1))) -endef - -define pkg_install_files - $(foreach install_file,$(1),$(INSTALL_DIR) $(3)/`dirname $(install_file)`; $(INSTALL_DATA) $(2)/$(install_file) $(3)/`dirname $(install_file)`;) -endef - -define pkg_install_bin - $(foreach install_apps,$(1),$(INSTALL_DIR) $(3)/`dirname $(install_apps)`; $(INSTALL_BIN) $(2)/$(install_apps) $(3)/`dirname $(install_apps)`;) -endef - -Build/Prepare=$(call Build/Prepare/Default,) -Build/Configure=$(call Build/Configure/Default,) -Build/Compile=$(call Build/Compile/Default,$(if $(PKG_SUBDIRS),SUBDIRS='$$$$(wildcard $(PKG_SUBDIRS))')) -Build/Install=$(if $(PKG_INSTALL),$(call Build/Install/Default,)) -Build/Dist=$(call Build/Dist/Default,) -Build/DistCheck=$(call Build/DistCheck/Default,) - -.NOTPARALLEL: - -.PHONY: prepare-package-install -prepare-package-install: - @mkdir -p $(PKG_INFO_DIR) - @rm -f $(PKG_INSTALL_STAMP) - @echo "$(filter-out essential nonshared,$(PKG_FLAGS))" > $(PKG_INSTALL_STAMP).flags - -$(PACKAGE_DIR): - mkdir -p $@ - -compile: -.install: .compile -install: compile - -force-clean-build: FORCE - rm -rf $(PKG_BUILD_DIR) - -clean-build: $(if $(wildcard $(PKG_BUILD_DIR)/.autoremove),force-clean-build) - -clean: force-clean-build - $(CleanStaging) - $(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR)/host) - $(Build/Clean) - rm -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) - -dist: - $(Build/Dist) - -distcheck: - $(Build/DistCheck) diff --git a/include/prereq-build.mk b/include/prereq-build.mk deleted file mode 100644 index 49340ce3e4..0000000000 --- a/include/prereq-build.mk +++ /dev/null @@ -1,241 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/prereq.mk - -SHELL:=sh -PKG_NAME:=Build dependency - -$(eval $(call TestHostCommand,true, \ - Please install GNU 'coreutils', \ - $(TRUE))) - -$(eval $(call TestHostCommand,false, \ - Please install GNU 'coreutils', \ - $(FALSE); [ $$$$$$$$? = 1 ] && $(TRUE))) - -# Required for the toolchain -$(eval $(call TestHostCommand,working-make, \ - Please install GNU make v4.1 or later., \ - $(MAKE) -v | grep -E 'Make (4\.[1-9]|[5-9]\.)')) - -$(eval $(call TestHostCommand,case-sensitive-fs, \ - OpenWrt can only be built on a case-sensitive filesystem, \ - rm -f $(TMP_DIR)/test.*; touch $(TMP_DIR)/test.fs; \ - test ! -f $(TMP_DIR)/test.FS)) - -$(eval $(call TestHostCommand,proper-umask, \ - Please build with umask 022 - other values produce broken packages, \ - umask | grep -xE 0?0[012][012])) - -ifndef IB -$(eval $(call SetupHostCommand,gcc, \ - Please install the GNU C Compiler (gcc) 8 or later, \ - $(CC) -dumpversion | grep -E '^([8-9]\.?|1[0-9]\.?)', \ - gcc -dumpversion | grep -E '^([8-9]\.?|1[0-9]\.?)', \ - gcc-8 -dumpversion | grep -E '^([8-9]\.?|1[0-9]\.?)', \ - gcc --version | grep -E 'Apple.(LLVM|clang)' )) - -$(eval $(call TestHostCommand,working-gcc, \ - Please reinstall the GNU C Compiler (8 or later) - \ - it appears to be broken, \ - echo 'int main(int argc, char **argv) { return 0; }' | \ - $(STAGING_DIR_HOST)/bin/gcc -x c -o $(TMP_DIR)/a.out -)) - -$(eval $(call SetupHostCommand,g++, \ - Please install the GNU C++ Compiler (g++) 8 or later, \ - $(CXX) -dumpversion | grep -E '^([8-9]\.?|1[0-9]\.?)', \ - g++ -dumpversion | grep -E '^([8-9]\.?|1[0-9]\.?)', \ - g++-8 -dumpversion | grep -E '^([8-9]\.?|1[0-9]\.?)', \ - g++ --version | grep -E 'Apple.(LLVM|clang)' )) - -$(eval $(call TestHostCommand,working-g++, \ - Please reinstall the GNU C++ Compiler (8 or later) - \ - it appears to be broken, \ - echo 'int main(int argc, char **argv) { return 0; }' | \ - $(STAGING_DIR_HOST)/bin/g++ -x c++ -o $(TMP_DIR)/a.out - -lstdc++ && \ - $(TMP_DIR)/a.out)) - -$(eval $(call RequireCHeader,ncurses.h, \ - Please install ncurses. (Missing libncurses.so or ncurses.h), \ - initscr(), -lncurses)) - -$(eval $(call SetupHostCommand,git,Please install Git (git-core) >= 1.7.12.2, \ - git --exec-path | xargs -I % -- grep -q -- --recursive %/git-submodule, \ - git submodule --help | grep -- --recursive)) - -$(eval $(call SetupHostCommand,rsync,Please install 'rsync', \ - rsync --version &1 | grep GNU, \ - gnutar --version 2>&1 | grep GNU, \ - tar --version 2>&1 | grep GNU)) - -$(eval $(call SetupHostCommand,find,Please install GNU 'find', \ - gfind --version 2>&1 | grep GNU, \ - find --version 2>&1 | grep GNU)) - -$(eval $(call SetupHostCommand,bash,Please install GNU 'bash', \ - bash --version 2>&1 | grep GNU)) - -$(eval $(call SetupHostCommand,xargs, \ - Please install 'xargs' that supports '-r/--no-run-if-empty', \ - gxargs -r --version, \ - xargs -r --version)) - -$(eval $(call SetupHostCommand,patch,Please install GNU 'patch', \ - gpatch --version 2>&1 | grep 'Free Software Foundation', \ - patch --version 2>&1 | grep 'Free Software Foundation')) - -$(eval $(call SetupHostCommand,diff,Please install GNU diffutils, \ - gdiff --version 2>&1 | grep GNU, \ - diff --version 2>&1 | grep GNU)) - -$(eval $(call SetupHostCommand,cp,Please install GNU fileutils, \ - gcp --help 2>&1 | grep 'Copy SOURCE', \ - cp --help 2>&1 | grep 'Copy SOURCE')) - -$(eval $(call SetupHostCommand,seq,Please install seq, \ - gseq --version, \ - seq --version 2>&1 | grep seq)) - -$(eval $(call SetupHostCommand,awk,Please install GNU 'awk', \ - gawk --version 2>&1 | grep GNU, \ - awk --version 2>&1 | grep GNU)) - -$(eval $(call SetupHostCommand,grep,Please install GNU 'grep', \ - ggrep --version 2>&1 | grep GNU, \ - grep --version 2>&1 | grep GNU)) - -$(eval $(call SetupHostCommand,egrep,Please install GNU 'grep', \ - gegrep --version 2>&1 | grep GNU, \ - egrep --version 2>&1 | grep GNU)) - -$(eval $(call SetupHostCommand,getopt, \ - Please install an extended getopt version that supports --long, \ - gnugetopt -o t --long test -- --test | grep '^ *--test *--', \ - getopt -o t --long test -- --test | grep '^ *--test *--', \ - /usr/local/opt/gnu-getopt/bin/getopt -o t --long test -- --test | grep '^ *--test *--', \ - /opt/local/bin/getopt -o t --long test -- --test | grep '^ *--test *--')) - -$(eval $(call SetupHostCommand,realpath,Please install a 'realpath' utility, \ - grealpath /, \ - realpath /)) - -$(eval $(call SetupHostCommand,stat,Cannot find a file stat utility, \ - gnustat -c%s $(TOPDIR)/Makefile, \ - gstat -c%s $(TOPDIR)/Makefile, \ - stat -c%s $(TOPDIR)/Makefile)) - -$(eval $(call SetupHostCommand,gzip,Please install 'gzip', \ - gzip --version &1 | grep zipfile, \ - unzip)) - -$(eval $(call SetupHostCommand,bzip2,Please install 'bzip2', \ - bzip2 --version = 3.7, \ - python3.11 -V 2>&1 | grep 'Python 3', \ - python3.10 -V 2>&1 | grep 'Python 3', \ - python3.9 -V 2>&1 | grep 'Python 3', \ - python3.8 -V 2>&1 | grep 'Python 3', \ - python3.7 -V 2>&1 | grep 'Python 3', \ - python3 -V 2>&1 | grep -E 'Python 3\.([7-9]|[0-9][0-9])\.?')) - -$(eval $(call SetupHostCommand,python3,Please install Python >= 3.7, \ - python3.11 -V 2>&1 | grep 'Python 3', \ - python3.10 -V 2>&1 | grep 'Python 3', \ - python3.9 -V 2>&1 | grep 'Python 3', \ - python3.8 -V 2>&1 | grep 'Python 3', \ - python3.7 -V 2>&1 | grep 'Python 3', \ - python3 -V 2>&1 | grep -E 'Python 3\.([7-9]|[0-9][0-9])\.?')) - -$(eval $(call TestHostCommand,python3-distutils, \ - Please install the Python3 distutils module, \ - $(STAGING_DIR_HOST)/bin/python3 -c 'from distutils import util')) - -$(eval $(call TestHostCommand,python3-stdlib, \ - Please install the Python3 stdlib module, \ - $(STAGING_DIR_HOST)/bin/python3 -c 'import ntpath')) - -$(eval $(call SetupHostCommand,file,Please install the 'file' package, \ - file --version 2>&1 | grep file)) - -$(eval $(call SetupHostCommand,which,Please install 'which', \ - /usr/bin/which which, \ - /bin/which which, \ - which which)) - -ifeq ($(HOST_OS),Linux) - $(eval $(call RequireCHeader,argp.h, \ - Missing argp.h Please install the argp-standalone package if musl libc)) - - $(eval $(call RequireCHeader,fts.h, \ - Missing fts.h Please install the musl-fts-dev package if musl libc)) - - $(eval $(call RequireCHeader,obstack.h, \ - Missing obstack.h Please install the musl-obstack-dev package if musl libc)) - - $(eval $(call RequireCHeader,libintl.h, \ - Missing libintl.h Please install the musl-libintl package if musl libc)) -endif - -$(STAGING_DIR_HOST)/bin/mkhash: $(SCRIPT_DIR)/mkhash.c - mkdir -p $(dir $@) - $(CC) -O2 -I$(TOPDIR)/tools/include -o $@ $< - -$(STAGING_DIR_HOST)/bin/xxd: $(SCRIPT_DIR)/xxdi.pl - $(LN) $< $@ - -prereq: $(STAGING_DIR_HOST)/bin/mkhash $(STAGING_DIR_HOST)/bin/xxd - -# Install ldconfig stub -$(eval $(call TestHostCommand,ldconfig-stub,Failed to install stub, \ - $(LN) $(SCRIPT_DIR)/noop.sh $(STAGING_DIR_HOST)/bin/ldconfig)) diff --git a/include/prereq.mk b/include/prereq.mk deleted file mode 100644 index 1039c5540c..0000000000 --- a/include/prereq.mk +++ /dev/null @@ -1,125 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -ifneq ($(__prereq_inc),1) -__prereq_inc:=1 - -prereq: - if [ -f $(TMP_DIR)/.prereq-error ]; then \ - echo; \ - cat $(TMP_DIR)/.prereq-error; \ - rm -f $(TMP_DIR)/.prereq-error; \ - echo; \ - false; \ - fi - -.SILENT: prereq -endif - -PREREQ_PREV= - -# 1: display name -# 2: error message -define Require - export PREREQ_CHECK=1 - ifeq ($$(CHECK_$(1)),) - prereq: prereq-$(1) - - prereq-$(1): $(if $(PREREQ_PREV),prereq-$(PREREQ_PREV)) FORCE - printf "Checking '$(1)'... " - if $(NO_TRACE_MAKE) -f $(firstword $(MAKEFILE_LIST)) check-$(1) PATH="$(ORIG_PATH)" >/dev/null 2>/dev/null; then \ - echo 'ok.'; \ - elif $(NO_TRACE_MAKE) -f $(firstword $(MAKEFILE_LIST)) check-$(1) PATH="$(ORIG_PATH)" >/dev/null 2>/dev/null; then \ - echo 'updated.'; \ - else \ - echo 'failed.'; \ - echo "$(PKG_NAME): $(strip $(2))" >> $(TMP_DIR)/.prereq-error; \ - fi - - check-$(1): FORCE - $(call Require/$(1)) - CHECK_$(1):=1 - - .SILENT: prereq-$(1) check-$(1) - .NOTPARALLEL: - endif - - PREREQ_PREV=$(1) -endef - - -define RequireCommand - define Require/$(1) - command -v $(1) - endef - - $$(eval $$(call Require,$(1),$(2))) -endef - -define RequireHeader - define Require/$(1) - [ -e "$(1)" ] - endef - - $$(eval $$(call Require,$(1),$(2))) -endef - -# 1: header to test -# 2: failure message -# 3: optional compile time test -# 4: optional link library test (example -lncurses) -define RequireCHeader - define Require/$(1) - echo 'int main(int argc, char **argv) { $(3); return 0; }' | gcc -include $(1) -x c -o $(TMP_DIR)/a.out - $(4) - endef - - $$(eval $$(call Require,$(1),$(2))) -endef - -define QuoteHostCommand -'$(subst ','"'"',$(strip $(1)))' -endef - -# 1: display name -# 2: failure message -# 3: test -define TestHostCommand - define Require/$(1) - ($(3)) >/dev/null 2>/dev/null - endef - - $$(eval $$(call Require,$(1),$(2))) -endef - -# 1: canonical name -# 2: failure message -# 3+: candidates -define SetupHostCommand - define Require/$(1) - mkdir -p "$(STAGING_DIR_HOST)/bin"; \ - for cmd in $(call QuoteHostCommand,$(3)) $(call QuoteHostCommand,$(4)) \ - $(call QuoteHostCommand,$(5)) $(call QuoteHostCommand,$(6)) \ - $(call QuoteHostCommand,$(7)) $(call QuoteHostCommand,$(8)) \ - $(call QuoteHostCommand,$(9)) $(call QuoteHostCommand,$(10)) \ - $(call QuoteHostCommand,$(11)) $(call QuoteHostCommand,$(12)); do \ - if [ -n "$$$$$$$$cmd" ]; then \ - bin="$$$$$$$$(command -v "$$$$$$$${cmd%% *}")"; \ - if [ -x "$$$$$$$$bin" ] && eval "$$$$$$$$cmd" >/dev/null 2>/dev/null; then \ - case "$$$$$$$$(ls -dl -- $(STAGING_DIR_HOST)/bin/$(strip $(1)))" in \ - "-"* | \ - *" -> $$$$$$$$bin"* | \ - *" -> "[!/]*) \ - [ -x "$(STAGING_DIR_HOST)/bin/$(strip $(1))" ] && exit 0 \ - ;; \ - esac; \ - ln -sf "$$$$$$$$bin" "$(STAGING_DIR_HOST)/bin/$(strip $(1))"; \ - exit 1; \ - fi; \ - fi; \ - done; \ - exit 1 - endef - - $$(eval $$(call Require,$(1),$(if $(2),$(2),Missing $(1) command))) -endef diff --git a/include/quilt.mk b/include/quilt.mk deleted file mode 100644 index a58390f6c5..0000000000 --- a/include/quilt.mk +++ /dev/null @@ -1,184 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2007-2020 OpenWrt.org - -ifeq ($(TARGET_BUILD),1) - PKG_BUILD_DIR:=$(LINUX_DIR) -endif - -ifneq ($(filter host-refresh refresh,$(MAKECMDGOALS)),) - override QUILT=1 - override HOST_QUILT=1 -endif - -ifneq ($(PKG_BUILD_DIR),) - QUILT?=$(if $(wildcard $(PKG_BUILD_DIR)/.quilt_used),y) - ifneq ($(QUILT),) - STAMP_CHECKED:=$(PKG_BUILD_DIR)/.quilt_checked - override CONFIG_AUTOREBUILD= - override CONFIG_AUTOREMOVE= - quilt-check: $(STAMP_CHECKED) - endif -endif - -ifneq ($(HOST_BUILD_DIR),) - HOST_QUILT?=$(if $(findstring command,$(origin QUILT)),$(QUILT),$(if $(wildcard $(HOST_BUILD_DIR)/.quilt_used),y)) - ifneq ($(HOST_QUILT),) - HOST_STAMP_CHECKED:=$(HOST_BUILD_DIR)/.quilt_checked - override CONFIG_AUTOREBUILD= - override CONFIG_AUTOREMOVE= - host-quilt-check: $(HOST_STAMP_CHECKED) - endif -endif - -ifneq ($(if $(DUMP),1,$(__quilt_inc)),1) -__quilt_inc:=1 - -PATCH_DIR?=$(CURDIR)/patches -FILES_DIR?=$(CURDIR)/files -HOST_PATCH_DIR?=$(PATCH_DIR) -HOST_FILES_DIR?=$(FILES_DIR) - -QUILT_CMD:=quilt --quiltrc=- - -define filter_series -sed -e s,\\\#.*,, $(1) | grep -E \[a-zA-Z0-9\] -endef - -define PatchDir/Quilt - @mkdir -p "$(1)/patches$(if $(3),/$(patsubst %/,%,$(3)))" - @if [ -s "$(2)/series" ]; then \ - mkdir -p "$(1)/patches/$(3)"; \ - cp "$(2)/series" "$(1)/patches/$(3)"; \ - fi - @for patch in $$$$( (cd "$(2)" && if [ -f series ]; then $(call filter_series,series); else ls | sort; fi; ) 2>/dev/null ); do ( \ - cp "$(2)/$$$$patch" "$(1)/patches/$(3)"; \ - echo "$(3)$$$$patch" >> "$(1)/patches/series"; \ - ); done - $(if $(3),@echo $(3) >> "$(1)/patches/.subdirs") -endef - -define PatchDir/Default - @if [ -d "$(2)" ] && [ "$$$$(ls $(2) | wc -l)" -gt 0 ]; then \ - export PATCH="$(PATCH)"; \ - if [ -s "$(2)/series" ]; then \ - $(call filter_series,$(2)/series) | xargs -n1 \ - $(KPATCH) "$(1)" "$(2)"; \ - else \ - $(KPATCH) "$(1)" "$(2)"; \ - fi; \ - fi -endef - -define PatchDir -$(call PatchDir/$(if $(strip $(QUILT)),Quilt,Default),$(strip $(1)),$(strip $(2)),$(strip $(3))) -endef - -define HostPatchDir -$(call PatchDir/$(if $(strip $(HOST_QUILT)),Quilt,Default),$(strip $(1)),$(strip $(2)),$(strip $(3))) -endef - -define Host/Patch/Default - $(if $(HOST_QUILT),rm -rf $(HOST_BUILD_DIR)/patches; mkdir -p $(HOST_BUILD_DIR)/patches) - $(call HostPatchDir,$(HOST_BUILD_DIR),$(HOST_PATCH_DIR),) - $(if $(HOST_QUILT),touch $(HOST_BUILD_DIR)/.quilt_used) -endef - -define Build/Patch/Default - $(if $(QUILT),rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches) - $(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR),) - $(if $(QUILT),touch $(PKG_BUILD_DIR)/.quilt_used) -endef - -kernel_files=$(foreach fdir,$(GENERIC_FILES_DIR) $(FILES_DIR),$(fdir)/.) -define Kernel/Patch/Default - $(if $(QUILT),rm -rf $(LINUX_DIR)/patches; mkdir -p $(LINUX_DIR)/patches) - $(if $(kernel_files),$(CP) $(kernel_files) $(LINUX_DIR)/) - find $(LINUX_DIR)/ -name \*.rej -or -name \*.orig | $(XARGS) rm -f - if [ -d $(GENERIC_PLATFORM_DIR)/patches$(if $(wildcard $(GENERIC_PLATFORM_DIR)/patches-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) ]; then \ - echo "generic patches directory is present. please move your patches to the pending directory" ; \ - exit 1; \ - fi - $(call PatchDir,$(LINUX_DIR),$(GENERIC_BACKPORT_DIR),generic-backport/) - $(call PatchDir,$(LINUX_DIR),$(GENERIC_PATCH_DIR),generic/) - $(call PatchDir,$(LINUX_DIR),$(GENERIC_HACK_DIR),generic-hack/) - $(call PatchDir,$(LINUX_DIR),$(PATCH_DIR),platform/) -endef - -define Quilt/RefreshDir - -rm -rf $(2) 2>/dev/null >/dev/null - [ -f $(1)/.quilt_no_patch ] || mkdir -p $(2) - @[ -f $(1)/.quilt_no_patch ] || { \ - for patch in $$$$($(if $(3),grep "^$(3)",cat) $(1)/patches/series | awk '{print $$$$1}'); do \ - $(CP) -v "$(1)/patches/$$$$patch" $(2); \ - done; \ - } - @-rm -f $(1)/.quilt_no_patch 2>/dev/null >/dev/null; -endef - -define Quilt/Refresh/Host - $(call Quilt/RefreshDir,$(HOST_BUILD_DIR),$(HOST_PATCH_DIR)) -endef - -define Quilt/Refresh/Package - $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR)) -endef - -define Quilt/Refresh/Kernel - @[ -z "$$(grep -v '^generic/' $(PKG_BUILD_DIR)/patches/series | grep -v '^platform/')" ] || { \ - echo "All kernel patches must start with either generic/ or platform/"; \ - false; \ - } - $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_BACKPORT_DIR),generic-backport/) - $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_PATCH_DIR),generic/) - $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_HACK_DIR),generic-hack/) - $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR),platform/) -endef - -define Quilt/Template - $($(2)STAMP_CONFIGURED): $($(2)STAMP_CHECKED) - $(if $(NO_RECONFIGURE),$($(2)STAMP_BUILT),$($(2)STAMP_CONFIGURED)): FORCE - $($(2)STAMP_CHECKED): $($(2)STAMP_PREPARED) - if [ -s "$(1)/patches/series" ]; then \ - (cd "$(1)"; \ - if $(QUILT_CMD) next >/dev/null 2>&1; then \ - $(QUILT_CMD) push -a; \ - else \ - $(QUILT_CMD) top >/dev/null 2>&1; \ - fi \ - ); \ - fi - touch "$$@" - - $(3)quilt-check: $($(2)STAMP_PREPARED) FORCE - @[ -f "$(1)/.quilt_used" ] || { \ - echo "The source directory was not unpacked using quilt. Please rebuild with QUILT=1"; \ - false; \ - } - @[ -f "$(1)/patches/series" ] || { \ - echo "The source directory contains no quilt patches."; \ - touch $(1)/patches/series $(1)/.quilt_no_patch; \ - } - @[ -n "$$$$(ls $(1)/patches/series)" -o \ - "$$$$(cat $(1)/patches/series | $(MKHASH) md5)" = "$$(sort $(1)/patches/series | $(MKHASH) md5)" ] || { \ - echo "The patches are not sorted in the right order. Please fix."; \ - false; \ - } - - $(3)refresh: $(3)quilt-check - @[ -f $(1)/.quilt_no_patch ] || { \ - cd "$(1)"; $(QUILT_CMD) pop -a -f >/dev/null 2>/dev/null; \ - while $(QUILT_CMD) next 2>/dev/null >/dev/null && $(QUILT_CMD) push; do \ - QUILT_DIFF_OPTS="-p" $(QUILT_CMD) refresh -p ab --no-index --no-timestamps; \ - done; ! $(QUILT_CMD) next 2>/dev/null >/dev/null; \ - } - $(Quilt/Refresh/$(4)) - - $(3)update: $(3)quilt-check - $(Quilt/Refresh/$(4)) -endef - -Build/Quilt=$(call Quilt/Template,$(PKG_BUILD_DIR),,,$(if $(TARGET_BUILD),Kernel,Package)) -Host/Quilt=$(call Quilt/Template,$(HOST_BUILD_DIR),HOST_,host-,Host) - -endif diff --git a/include/rootfs.mk b/include/rootfs.mk deleted file mode 100644 index 554dd48460..0000000000 --- a/include/rootfs.mk +++ /dev/null @@ -1,128 +0,0 @@ -ifdef CONFIG_USE_MKLIBS - define mklibs - rm -rf $(TMP_DIR)/mklibs-progs $(TMP_DIR)/mklibs-out - # first find all programs and add them to the mklibs list - find $(STAGING_DIR_ROOT) -type f -perm /100 -exec \ - file -r -N -F '' {} + | \ - awk ' /executable.*dynamically/ { print $$1 }' > $(TMP_DIR)/mklibs-progs - # find all loadable objects that are not regular libraries and add them to the list as well - find $(STAGING_DIR_ROOT) -type f -name \*.so\* -exec \ - file -r -N -F '' {} + | \ - awk ' /shared object/ { print $$1 }' > $(TMP_DIR)/mklibs-libs - mkdir -p $(TMP_DIR)/mklibs-out - $(STAGING_DIR_HOST)/bin/mklibs -D \ - -d $(TMP_DIR)/mklibs-out \ - --sysroot $(STAGING_DIR_ROOT) \ - `cat $(TMP_DIR)/mklibs-libs | sed 's:/*[^/]\+/*$$::' | uniq | sed 's:^$(STAGING_DIR_ROOT):-L :'` \ - --ldlib $(patsubst $(STAGING_DIR_ROOT)/%,/%,$(firstword $(wildcard \ - $(foreach name,ld-uClibc.so.* ld-linux.so.* ld-*.so ld-musl-*.so.*, \ - $(STAGING_DIR_ROOT)/lib/$(name) \ - )))) \ - --target $(REAL_GNU_TARGET_NAME) \ - `cat $(TMP_DIR)/mklibs-progs $(TMP_DIR)/mklibs-libs` 2>&1 - $(RSTRIP) $(TMP_DIR)/mklibs-out - for lib in `ls $(TMP_DIR)/mklibs-out/*.so.* 2>/dev/null`; do \ - LIB="$${lib##*/}"; \ - DEST="`ls "$(1)/lib/$$LIB" "$(1)/usr/lib/$$LIB" 2>/dev/null`"; \ - [ -n "$$DEST" ] || continue; \ - echo "Copying stripped library $$lib to $$DEST"; \ - cp "$$lib" "$$DEST" || exit 1; \ - done - endef -endif - -# where to build (and put) .ipk packages -opkg = \ - IPKG_NO_SCRIPT=1 \ - IPKG_INSTROOT=$(1) \ - TMPDIR=$(1)/tmp \ - $(STAGING_DIR_HOST)/bin/opkg \ - --offline-root $(1) \ - --force-postinstall \ - --add-dest root:/ \ - --add-arch all:100 \ - --add-arch $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(BOARD)):200 - -apk = \ - IPKG_INSTROOT=$(1) \ - $(FAKEROOT) $(STAGING_DIR_HOST)/bin/apk \ - --root $(1) \ - --repositories-file /dev/zero \ - --keys-dir $(TOPDIR) \ - --no-cache \ - --no-logfile \ - --preserve-env \ - --repository file://$(PACKAGE_DIR_ALL)/packages.adb - -TARGET_DIR_ORIG := $(TARGET_ROOTFS_DIR)/root.orig-$(BOARD) - -ifdef CONFIG_CLEAN_IPKG - define clean_ipkg - -find $(1)/usr/lib/opkg/info -type f -and -not -name '*.control' -delete - -sed -i -ne '/^Require-User: /p' $(1)/usr/lib/opkg/info/*.control - awk ' \ - BEGIN { conffiles = 0; print "Conffiles:" } \ - /^Conffiles:/ { conffiles = 1; next } \ - !/^ / { conffiles = 0; next } \ - conffiles == 1 { print } \ - ' $(1)/usr/lib/opkg/status >$(1)/usr/lib/opkg/status.new - mv $(1)/usr/lib/opkg/status.new $(1)/usr/lib/opkg/status - -find $(1)/usr/lib/opkg -empty -delete - endef -endif - -define prepare_rootfs - $(if $(2),@if [ -d '$(2)' ]; then \ - $(call file_copy,$(2)/.,$(1)); \ - fi) - @mkdir -p $(1)/etc/rc.d - @mkdir -p $(1)/var/lock - @( \ - cd $(1); \ - if [ -n "$(CONFIG_USE_APK)" ]; then \ - IPKG_POSTINST_PATH=./lib/apk/db/*.post-install; \ - $(STAGING_DIR_HOST)/bin/tar -C ./lib/apk/db/ -xf ./lib/apk/db/scripts.tar --wildcards "*.post-install"; \ - else \ - IPKG_POSTINST_PATH=./usr/lib/opkg/info/*.postinst; \ - fi; \ - for script in $$IPKG_POSTINST_PATH; do \ - IPKG_INSTROOT=$(1) $$(command -v bash) $$script; \ - ret=$$?; \ - if [ $$ret -ne 0 ]; then \ - echo "postinst script $$script has failed with exit code $$ret" >&2; \ - exit 1; \ - fi; \ - [ -n "$(CONFIG_USE_APK)" ] && $(STAGING_DIR_HOST)/bin/tar --delete -f ./lib/apk/db/scripts.tar $$(basename $$script); \ - done; \ - if [ -z "$(CONFIG_USE_APK)" ]; then \ - $(if $(IB),,awk -i inplace \ - '/^Status:/ { \ - if ($$3 == "user") { $$3 = "ok" } \ - else { sub(/,\|\,/, "", $$3) } \ - }1' $(1)/usr/lib/opkg/status) ; \ - $(if $(SOURCE_DATE_EPOCH),sed -i "s/Installed-Time: .*/Installed-Time: $(SOURCE_DATE_EPOCH)/" $(1)/usr/lib/opkg/status ;) \ - fi; \ - for script in ./etc/init.d/*; do \ - grep '#!/bin/sh /etc/rc.common' $$script >/dev/null || continue; \ - if ! echo " $(3) " | grep -q " $$(basename $$script) "; then \ - IPKG_INSTROOT=$(1) $$(command -v bash) ./etc/rc.common $$script enable; \ - echo "Enabling" $$(basename $$script); \ - else \ - IPKG_INSTROOT=$(1) $$(command -v bash) ./etc/rc.common $$script disable; \ - echo "Disabling" $$(basename $$script); \ - fi; \ - done || true \ - ) - - @-find $(1) -name CVS -o -name .svn -o -name .git -o -name '.#*' | $(XARGS) rm -rf - rm -rf \ - $(1)/boot \ - $(1)/tmp/* \ - $(1)/lib/apk/db/*.post-install* \ - $(1)/usr/lib/opkg/info/*.postinst* \ - $(1)/usr/lib/opkg/lists/* \ - $(1)/var/lock/*.lock - $(call clean_ipkg,$(1)) - $(call mklibs,$(1)) - $(if $(SOURCE_DATE_EPOCH),find $(1)/ -mindepth 1 -execdir touch -hcd "@$(SOURCE_DATE_EPOCH)" "{}" +) -endef diff --git a/include/scan.awk b/include/scan.awk deleted file mode 100644 index 0f02782326..0000000000 --- a/include/scan.awk +++ /dev/null @@ -1,19 +0,0 @@ -BEGIN { FS="/" } -$1 ~ /^feeds/ { FEEDS[$NF]=$0 } -$1 !~ /^feeds/ { PKGS[$NF]=$0 } -END { - # Filter-out OpenWrt packages which have a feeds equivalent - for (pkg in PKGS) - if (pkg in FEEDS) { - print PKGS[pkg] > of - delete PKGS[pkg] - } - n = asort(PKGS) - for (i=1; i <= n; i++) { - print PKGS[i] - } - n = asort(FEEDS) - for (i=1; i <= n; i++){ - print FEEDS[i] - } -} diff --git a/include/scan.mk b/include/scan.mk deleted file mode 100644 index 2e0ee0c960..0000000000 --- a/include/scan.mk +++ /dev/null @@ -1,122 +0,0 @@ -include $(TOPDIR)/include/verbose.mk -include $(TOPDIR)/rules.mk -TMP_DIR:=$(TOPDIR)/tmp - -all: $(TMP_DIR)/.$(SCAN_TARGET) - -SCAN_TARGET ?= packageinfo -SCAN_NAME ?= package -SCAN_DIR ?= package -TARGET_STAMP:=$(TMP_DIR)/info/.files-$(SCAN_TARGET).stamp -FILELIST:=$(TMP_DIR)/info/.files-$(SCAN_TARGET)-$(SCAN_COOKIE) -OVERRIDELIST:=$(TMP_DIR)/info/.overrides-$(SCAN_TARGET)-$(SCAN_COOKIE) - -export ORIG_PATH:=$(if $(ORIG_PATH),$(ORIG_PATH),$(PATH)) -export PATH:=$(STAGING_DIR_HOST)/bin:$(PATH) - -define feedname -$(if $(patsubst feeds/%,,$(1)),,$(word 2,$(subst /, ,$(1)))) -endef - -ifeq ($(SCAN_NAME),target) - SCAN_DEPS=image/Makefile profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk image/*.mk -else - SCAN_DEPS=$(TOPDIR)/include/package*.mk -ifneq ($(call feedname,$(SCAN_DIR)),) - SCAN_DEPS += $(TOPDIR)/feeds/$(call feedname,$(SCAN_DIR))/*.mk -endif -endif - -ifeq ($(IS_TTY),1) - ifneq ($(strip $(NO_COLOR)),1) - define progress - printf "\033[M\r$(1)" >&2; - endef - else - define progress - printf "\r$(1)" >&2; - endef - endif -else - define progress - :; - endef -endif - -define PackageDir - $(TMP_DIR)/.$(SCAN_TARGET): $(TMP_DIR)/info/.$(SCAN_TARGET)-$(1) - $(TMP_DIR)/info/.$(SCAN_TARGET)-$(1): $(SCAN_DIR)/$(2)/Makefile $(foreach DEP,$(DEPS_$(SCAN_DIR)/$(2)/Makefile) $(SCAN_DEPS),$(wildcard $(if $(filter /%,$(DEP)),$(DEP),$(SCAN_DIR)/$(2)/$(DEP)))) - { \ - $$(call progress,Collecting $(SCAN_NAME) info: $(SCAN_DIR)/$(2)) \ - echo Source-Makefile: $(SCAN_DIR)/$(2)/Makefile; \ - $(if $(3),echo Override: $(3),true); \ - $(if $(findstring c,$(OPENWRT_VERBOSE)),$(MAKE),$(NO_TRACE_MAKE) --no-print-dir) -r DUMP=1 FEED="$(call feedname,$(2))" -C $(SCAN_DIR)/$(2) $(SCAN_MAKEOPTS) \ - $(if $(findstring c,$(OPENWRT_VERBOSE)),,2>/dev/null) || { \ - mkdir -p "$(TOPDIR)/logs/$(SCAN_DIR)/$(2)"; \ - $(NO_TRACE_MAKE) --no-print-dir -r DUMP=1 FEED="$(call feedname,$(2))" -C $(SCAN_DIR)/$(2) $(SCAN_MAKEOPTS) > $(TOPDIR)/logs/$(SCAN_DIR)/$(2)/dump.txt 2>&1; \ - $$(call progress,ERROR: please fix $(SCAN_DIR)/$(2)/Makefile - see logs/$(SCAN_DIR)/$(2)/dump.txt for details\n) \ - rm -f $$@; \ - }; \ - echo; \ - } > $$@.tmp - mv $$@.tmp $$@ -endef - -$(OVERRIDELIST): - rm -f $(TMP_DIR)/info/.overrides-$(SCAN_TARGET)-* - touch $@ - -ifeq ($(SCAN_NAME),target) - GREP_STRING=BuildTarget -else - GREP_STRING=(Build/DefaultTargets|BuildPackage|KernelPackage) -endif - -$(FILELIST): $(OVERRIDELIST) - rm -f $(TMP_DIR)/info/.files-$(SCAN_TARGET)-* - find -L $(SCAN_DIR) -mindepth 1 $(if $(SCAN_DEPTH),-maxdepth $(SCAN_DEPTH)) $(SCAN_EXTRA) -name Makefile | xargs grep -aHE 'call $(GREP_STRING)' | sed -e 's#^$(SCAN_DIR)/##' -e 's#/Makefile:.*##' | uniq | awk -v of=$(OVERRIDELIST) -f include/scan.awk > $@ - -$(TMP_DIR)/info/.files-$(SCAN_TARGET).mk: $(FILELIST) - ( \ - cat $< | awk '{print "$(SCAN_DIR)/" $$0 "/Makefile" }' | xargs grep -HE '^ *SCAN_DEPS *= *' | awk -F: '{ gsub(/^.*DEPS *= */, "", $$2); print "DEPS_" $$1 "=" $$2 }'; \ - awk -F/ -v deps="$$DEPS" -v of="$(OVERRIDELIST)" ' \ - BEGIN { \ - while (getline < (of)) \ - override[$$NF]=$$0; \ - close(of) \ - } \ - { \ - info=$$0; \ - gsub(/\//, "_", info); \ - dir=$$0; \ - pkg=""; \ - if($$NF in override) \ - pkg=override[$$NF]; \ - print "$$(eval $$(call PackageDir," info "," dir "," pkg "))"; \ - } ' < $<; \ - true; \ - ) > $@.tmp - mv $@.tmp $@ - --include $(TMP_DIR)/info/.files-$(SCAN_TARGET).mk - -$(TARGET_STAMP):: - +( \ - $(NO_TRACE_MAKE) $(FILELIST); \ - MD5SUM=$$(cat $(FILELIST) $(OVERRIDELIST) | $(MKHASH) md5 | awk '{print $$1}'); \ - [ -f "$@.$$MD5SUM" ] || { \ - rm -f $@.*; \ - touch $@.$$MD5SUM; \ - touch $@; \ - } \ - ) - -$(TMP_DIR)/.$(SCAN_TARGET): $(TARGET_STAMP) - $(call progress,Collecting $(SCAN_NAME) info: merging...) - -cat $(FILELIST) | awk '{gsub(/\//, "_", $$0);print "$(TMP_DIR)/info/.$(SCAN_TARGET)-" $$0}' | xargs cat > $@ 2>/dev/null - $(call progress,Collecting $(SCAN_NAME) info: done) - echo - -FORCE: -.PHONY: FORCE -.NOTPARALLEL: diff --git a/include/shell.sh b/include/shell.sh deleted file mode 100644 index 6ee0cf6030..0000000000 --- a/include/shell.sh +++ /dev/null @@ -1,15 +0,0 @@ -getvar() { - eval "echo \"\${$1}\"" -} - -var2file() { - local var - eval "var=\"\${$1}\"" - if [ -n "$var" ]; then echo "$var" > "$2"; fi -} - -isset() { - local var - eval "var=\"\${$1}\"" - [ -n "$var" ] -} diff --git a/include/site/aarch64 b/include/site/aarch64 deleted file mode 100644 index c5aa9c5543..0000000000 --- a/include/site/aarch64 +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=yes} -ac_cv_c_bigendian=${ac_cv_c_bigendian=no} - -ac_cv_sizeof___int64=8 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=8 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=8 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=8 -ac_cv_sizeof_ssize_t=8 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=8 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=8 diff --git a/include/site/aarch64_be b/include/site/aarch64_be deleted file mode 100644 index 19e75ab991..0000000000 --- a/include/site/aarch64_be +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=no} -ac_cv_c_bigendian=${ac_cv_c_bigendian=yes} - -ac_cv_sizeof___int64=8 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=8 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=8 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=8 -ac_cv_sizeof_ssize_t=8 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=8 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=8 diff --git a/include/site/arc b/include/site/arc deleted file mode 100644 index 72a3805c64..0000000000 --- a/include/site/arc +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=yes} -ac_cv_c_bigendian=${ac_cv_c_bigendian=no} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=4 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=4 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=4 -ac_cv_sizeof_ssize_t=4 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=4 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=4 diff --git a/include/site/arm b/include/site/arm deleted file mode 100644 index 72a3805c64..0000000000 --- a/include/site/arm +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=yes} -ac_cv_c_bigendian=${ac_cv_c_bigendian=no} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=4 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=4 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=4 -ac_cv_sizeof_ssize_t=4 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=4 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=4 diff --git a/include/site/armeb b/include/site/armeb deleted file mode 100644 index a5626a722b..0000000000 --- a/include/site/armeb +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=no} -ac_cv_c_bigendian=${ac_cv_c_bigendian=yes} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=4 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=4 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=4 -ac_cv_sizeof_ssize_t=4 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=4 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=4 diff --git a/include/site/darwin b/include/site/darwin deleted file mode 100644 index ec38f67be6..0000000000 --- a/include/site/darwin +++ /dev/null @@ -1,2 +0,0 @@ -ac_cv_func_futimens=no -ac_cv_func_utimensat=no diff --git a/include/site/i386 b/include/site/i386 deleted file mode 100644 index 78f1557b79..0000000000 --- a/include/site/i386 +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/i486 - diff --git a/include/site/i486 b/include/site/i486 deleted file mode 100644 index 72a3805c64..0000000000 --- a/include/site/i486 +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=yes} -ac_cv_c_bigendian=${ac_cv_c_bigendian=no} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=4 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=4 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=4 -ac_cv_sizeof_ssize_t=4 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=4 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=4 diff --git a/include/site/i686 b/include/site/i686 deleted file mode 100644 index 78f1557b79..0000000000 --- a/include/site/i686 +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/i486 - diff --git a/include/site/linux b/include/site/linux deleted file mode 100644 index 1ca2837c28..0000000000 --- a/include/site/linux +++ /dev/null @@ -1,80 +0,0 @@ -ac_atomic_add=yes -ac_atomic_sub=yes -ac_cv_c_gettext_without_libintl=yes -ac_cv_c_long_double=no -ac_cv_conv_longlong_to_float=yes -ac_cv_file__dev_zero=yes -ac_cv_func___va_copy=no -ac_cv_func__exit=yes -ac_cv_func_bcopy=yes -ac_cv_func_bzero=yes -ac_cv_func_bcmp=yes -ac_cv_func_creal=yes -ac_cv_func_cimag=yes -ac_cv_func_fchmod=yes -ac_cv_func_getaddrinfo=yes -ac_cv_func_getcwd=yes -ac_cv_func_getdomainname=yes -ac_cv_func_getpgrp_void=yes -ac_cv_func_getpwuid_r=yes -ac_cv_func_gettimeofday=yes -ac_cv_func_index=yes -ac_cv_func_lstat_dereferences_slashed_symlink=yes -ac_cv_func_lstat_empty_string_bug=no -ac_cv_func_lstat=yes -ac_cv_func_malloc_0_nonnull=yes -ac_cv_func_malloc_works=yes -ac_cv_func_memcmp_clean=yes -ac_cv_func_memcmp_working=yes -ac_cv_func_posix_getgrgid_r=yes -ac_cv_func_posix_getpwuid_r=yes -ac_cv_func_psignal=yes -ac_cv_func_pthread_key_delete=yes -ac_cv_func_realloc_0_nonnull=yes -ac_cv_func_realloc_works=yes -ac_cv_func_rename=yes -ac_cv_func_rindex=yes -ac_cv_func_setlocale=yes -ac_cv_func_setgrent_void=yes -ac_cv_func_setpgrp_void=yes -ac_cv_func_setresuid=yes -ac_cv_func_setvbuf_reversed=no -ac_cv_func_stat_empty_string_bug=no -ac_cv_func_stat_ignores_trailing_slash=no -ac_cv_func_strerror=yes -ac_cv_func_strftime=yes -ac_cv_func_utimes=yes -ac_cv_func___adjtimex=yes -ac_cv_func_va_copy=no -ac_cv_func_vsnprintf=yes -ac_cv_have_accrights_in_msghdr=no -ac_cv_have_broken_snprintf=no -ac_cv_have_control_in_msghdr=yes -ac_cv_have_decl_sys_siglist=no -ac_cv_have_openpty_ctty_bug=yes -ac_cv_have_space_d_name_in_struct_dirent=yes -ac_cv_header_netinet_sctp_uio_h=no -ac_cv_int64_t=yes -ac_cv_lbl_unaligned_fail=no -ac_cv_linux_kernel_pppoe=yes -ac_cv_linux_vers=2 -ac_cv_pack_bitfields_reversed=yes -ac_cv_path_LDCONFIG= -ac_cv_regexec_segfault_emptystr=no -ac_cv_sctp=no -ac_cv_sys_restartable_syscalls=yes -ac_cv_time_r_type=POSIX -ac_cv_type_suseconds_t=yes -ac_cv_size_t=yes -ac_cv_ssize_t=yes -ac_cv_uchar=no -ac_cv_uint=yes -ac_cv_uint64_t=yes -ac_cv_uintptr_t=yes -ac_cv_ulong=yes -ac_cv_ushort=yes -ac_cv_va_copy=C99 -ac_cv_va_val_copy=yes -as_cv_unaligned_access=yes -ac_cv_func_malloc_0_nonnull=yes -ac_cv_func_realloc_0_nonnull=yes diff --git a/include/site/loongarch64 b/include/site/loongarch64 deleted file mode 100644 index b8d581d448..0000000000 --- a/include/site/loongarch64 +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=yes} -ac_cv_c_bigendian=${ac_cv_c_bigendian=no} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=8 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=8 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=8 -ac_cv_sizeof_ssize_t=8 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=8 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=8 diff --git a/include/site/m68k b/include/site/m68k deleted file mode 100644 index 0037600a09..0000000000 --- a/include/site/m68k +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=no} -ac_cv_c_bigendian=${ac_cv_c_bigendian=yes} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=4 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=4 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=4 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=4 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=4 diff --git a/include/site/mips b/include/site/mips deleted file mode 100644 index a5626a722b..0000000000 --- a/include/site/mips +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=no} -ac_cv_c_bigendian=${ac_cv_c_bigendian=yes} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=4 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=4 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=4 -ac_cv_sizeof_ssize_t=4 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=4 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=4 diff --git a/include/site/mips64 b/include/site/mips64 deleted file mode 100644 index 19e75ab991..0000000000 --- a/include/site/mips64 +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=no} -ac_cv_c_bigendian=${ac_cv_c_bigendian=yes} - -ac_cv_sizeof___int64=8 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=8 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=8 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=8 -ac_cv_sizeof_ssize_t=8 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=8 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=8 diff --git a/include/site/mips64el b/include/site/mips64el deleted file mode 100644 index c5aa9c5543..0000000000 --- a/include/site/mips64el +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=yes} -ac_cv_c_bigendian=${ac_cv_c_bigendian=no} - -ac_cv_sizeof___int64=8 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=8 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=8 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=8 -ac_cv_sizeof_ssize_t=8 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=8 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=8 diff --git a/include/site/mipsel b/include/site/mipsel deleted file mode 100644 index 72a3805c64..0000000000 --- a/include/site/mipsel +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=yes} -ac_cv_c_bigendian=${ac_cv_c_bigendian=no} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=4 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=4 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=4 -ac_cv_sizeof_ssize_t=4 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=4 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=4 diff --git a/include/site/powerpc b/include/site/powerpc deleted file mode 100644 index a5626a722b..0000000000 --- a/include/site/powerpc +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=no} -ac_cv_c_bigendian=${ac_cv_c_bigendian=yes} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=4 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=4 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=4 -ac_cv_sizeof_ssize_t=4 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=4 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=4 diff --git a/include/site/powerpc64 b/include/site/powerpc64 deleted file mode 100644 index 6a66346b42..0000000000 --- a/include/site/powerpc64 +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=no} -ac_cv_c_bigendian=${ac_cv_c_bigendian=yes} - -ac_cv_sizeof_char=1 -ac_cv_sizeof_char_p=8 -ac_cv_sizeof_double=8 -ac_cv_sizeof_float=4 -ac_cv_sizeof_int=4 -ac_cv_sizeof_long=8 -ac_cv_sizeof_long_double=16 -ac_cv_sizeof_long_int=8 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long_long_int=8 -ac_cv_sizeof_short=2 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_signed_char=1 -ac_cv_sizeof_unsigned_char=1 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=8 -ac_cv_sizeof_unsigned_long_int=8 -ac_cv_sizeof_unsigned_long_long_int=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_unsigned_short_int=2 -ac_cv_sizeof_void_p=8 diff --git a/include/site/riscv64 b/include/site/riscv64 deleted file mode 100644 index c5aa9c5543..0000000000 --- a/include/site/riscv64 +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=yes} -ac_cv_c_bigendian=${ac_cv_c_bigendian=no} - -ac_cv_sizeof___int64=8 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=8 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=8 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=8 -ac_cv_sizeof_ssize_t=8 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=8 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=8 diff --git a/include/site/sparc b/include/site/sparc deleted file mode 100644 index a5626a722b..0000000000 --- a/include/site/sparc +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=no} -ac_cv_c_bigendian=${ac_cv_c_bigendian=yes} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=4 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=4 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=4 -ac_cv_sizeof_ssize_t=4 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=4 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=4 diff --git a/include/site/x86_64 b/include/site/x86_64 deleted file mode 100644 index b8d581d448..0000000000 --- a/include/site/x86_64 +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. $TOPDIR/include/site/linux -ac_cv_c_littleendian=${ac_cv_c_littleendian=yes} -ac_cv_c_bigendian=${ac_cv_c_bigendian=no} - -ac_cv_sizeof___int64=0 -ac_cv_sizeof_char=1 -ac_cv_sizeof_int=4 -ac_cv_sizeof_int16_t=2 -ac_cv_sizeof_int32_t=4 -ac_cv_sizeof_int64_t=8 -ac_cv_sizeof_long_int=8 -ac_cv_sizeof_long_long=8 -ac_cv_sizeof_long=8 -ac_cv_sizeof_off_t=8 -ac_cv_sizeof_short_int=2 -ac_cv_sizeof_short=2 -ac_cv_sizeof_size_t=8 -ac_cv_sizeof_ssize_t=8 -ac_cv_sizeof_u_int16_t=2 -ac_cv_sizeof_u_int32_t=4 -ac_cv_sizeof_u_int64_t=8 -ac_cv_sizeof_uint16_t=2 -ac_cv_sizeof_uint32_t=4 -ac_cv_sizeof_uint64_t=8 -ac_cv_sizeof_unsigned_int=4 -ac_cv_sizeof_unsigned_long=8 -ac_cv_sizeof_unsigned_long_long=8 -ac_cv_sizeof_unsigned_short=2 -ac_cv_sizeof_void_p=8 diff --git a/include/subdir.mk b/include/subdir.mk deleted file mode 100644 index b4edbf8b96..0000000000 --- a/include/subdir.mk +++ /dev/null @@ -1,109 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2007-2020 OpenWrt.org - -ifeq ($(MAKECMDGOALS),prereq) - SUBTARGETS:=prereq - PREREQ_ONLY:=1 -# For target/linux related target add dtb to selectively compile dtbs -else ifneq ($(filter target/linux/%,$(MAKECMDGOALS)),) - SUBTARGETS:=$(DEFAULT_SUBDIR_TARGETS) dtb -else - SUBTARGETS:=$(DEFAULT_SUBDIR_TARGETS) -endif - -subtarget-default = $(filter-out ., \ - $(if $($(1)/builddirs-$(2)),$($(1)/builddirs-$(2)), \ - $(if $($(1)/builddirs-default),$($(1)/builddirs-default), \ - $($(1)/builddirs)))) - -define subtarget - $(call warn_eval,$(1),t,T,$(1)/$(2): $($(1)/) $(foreach bd,$(call subtarget-default,$(1),$(2)),$(1)/$(bd)/$(2))) - -endef - -define ERROR - ($(call MESSAGE, $(2)); $(if $(BUILD_LOG), echo "$(2)" >> $(BUILD_LOG_DIR)/$(1)/error.txt;) $(if $(3),, exit 1;)) -endef - -lastdir=$(word $(words $(subst /, ,$(1))),$(subst /, ,$(1))) -diralias=$(if $(findstring $(1),$(call lastdir,$(1))),,$(call lastdir,$(1))) - -subdir_make_opts = \ - $(if $(SUBDIR_MAKE_DEBUG),-d) -r -C $(1) \ - BUILD_SUBDIR="$(1)" \ - BUILD_VARIANT="$(4)" \ - ALL_VARIANTS="$(5)" - -# 1: subdir -# 2: target -# 3: build type -# 4: build variant -# 5: all variants -log_make = \ - $(if $(call debug,$(1),v),,@)+ \ - $(if $(BUILD_LOG), \ - set -o pipefail; \ - mkdir -p $(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4));) \ - $(SCRIPT_DIR)/time.pl "time: $(1)$(if $(4),/$(4))/$(if $(3),$(3)-)$(2)" \ - $$(SUBMAKE) $(subdir_make_opts) $(if $(3),$(3)-)$(2) \ - $(if $(BUILD_LOG),SILENT= 2>&1 | tee $(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4))/$(if $(3),$(3)-)$(2).txt) - -ifdef CONFIG_AUTOREMOVE -rebuild_check = \ - @-$$(NO_TRACE_MAKE) $(subdir_make_opts) check-depends >/dev/null 2>/dev/null; \ - $(if $(BUILD_LOG),mkdir -p $(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4));) \ - $$(NO_TRACE_MAKE) $(if $(BUILD_LOG),-d) -q $(subdir_make_opts) .$(if $(3),$(3)-)$(2) \ - > $(if $(BUILD_LOG),$(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4))/check-$(if $(3),$(3)-)$(2).txt,/dev/null) 2>&1 || \ - $$(SUBMAKE) $(subdir_make_opts) clean-build >/dev/null 2>/dev/null - -endif - -# Parameters: -define subdir - $(call warn,$(1),d,D $(1)) - $(foreach bd,$($(1)/builddirs), - $(call warn,$(1),d,BD $(1)/$(bd)) - $(foreach target,$(SUBTARGETS) $($(1)/subtargets), - $(foreach btype,$(buildtypes-$(bd)), - $(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(btype)/$(target): $(if $(NO_DEPS)$(QUILT),,$($(1)/$(bd)/$(btype)/$(target)) $(call $(1)//$(btype)/$(target),$(1)/$(bd)/$(btype)))) - $(call log_make,$(1)/$(bd),$(target),$(btype),$(filter-out __default,$(variant)),$($(1)/$(bd)/variants)) \ - || $(call ERROR,$(2), ERROR: $(1)/$(bd) [$(btype)] failed to build.,$(findstring $(bd),$($(1)/builddirs-ignore-$(btype)-$(target)))) - $(if $(call diralias,$(bd)),$(call warn_eval,$(1)/$(bd),l,T,$(1)/$(call diralias,$(bd))/$(btype)/$(target): $(1)/$(bd)/$(btype)/$(target))) - ) - $(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(target): $(if $(NO_DEPS)$(QUILT),,$($(1)/$(bd)/$(target)) $(call $(1)//$(target),$(1)/$(bd)))) - $(foreach variant,$(filter-out *,$(if $(BUILD_VARIANT),$(BUILD_VARIANT),$(if $(strip $($(1)/$(bd)/variants)),$($(1)/$(bd)/variants),$(if $($(1)/$(bd)/default-variant),$($(1)/$(bd)/default-variant),__default)))), - $(if $(BUILD_LOG),@mkdir -p $(BUILD_LOG_DIR)/$(1)/$(bd)/$(filter-out __default,$(variant))) - $(if $($(1)/autoremove),$(call rebuild_check,$(1)/$(bd),$(target),,$(filter-out __default,$(variant)),$($(1)/$(bd)/variants))) - $(call log_make,$(1)/$(bd),$(target),,$(filter-out __default,$(variant)),$($(1)/$(bd)/variants)) \ - || $(call ERROR,$(1), ERROR: $(1)/$(bd) failed to build$(if $(filter-out __default,$(variant)), (build variant: $(variant))).,$(findstring $(bd),$($(1)/builddirs-ignore-$(target)))) - ) - $(if $(PREREQ_ONLY)$(DUMP_TARGET_DB),, - # aliases - $(if $(call diralias,$(bd)),$(call warn_eval,$(1)/$(bd),l,T,$(1)/$(call diralias,$(bd))/$(target): $(1)/$(bd)/$(target))) - ) - ) - ) - $(foreach target,$(SUBTARGETS) $($(1)/subtargets),$(call subtarget,$(1),$(target))) -endef - -ifndef DUMP_TARGET_DB -# Parameters: -define stampfile - $(1)/stamp-$(3):=$(if $(6),$(6),$(STAGING_DIR))/stamp/.$(2)_$(3)$(5) - $$($(1)/stamp-$(3)): $(TMP_DIR)/.build $(4) - @+$(SCRIPT_DIR)/timestamp.pl -n $$($(1)/stamp-$(3)) $(1) $(4) || \ - $(MAKE) $(if $(QUIET),--no-print-directory) $$($(1)/flags-$(3)) $(1)/$(3) - @mkdir -p $$$$(dirname $$($(1)/stamp-$(3))) - @touch $$($(1)/stamp-$(3)) - - $$(if $(call debug,$(1),v),,.SILENT: $$($(1)/stamp-$(3))) - - .PRECIOUS: $$($(1)/stamp-$(3)) # work around a make bug - - $(1)//clean:=$(1)/stamp-$(3)/clean - $(1)/stamp-$(3)/clean: FORCE - @rm -f $$($(1)/stamp-$(3)) - -endef -endif diff --git a/include/target.mk b/include/target.mk deleted file mode 100644 index d13902ad6e..0000000000 --- a/include/target.mk +++ /dev/null @@ -1,402 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2007-2008 OpenWrt.org -# Copyright (C) 2016 LEDE Project - -ifneq ($(__target_inc),1) -__target_inc=1 - - -# default device type -DEVICE_TYPE?=router - -# Default packages - the really basic set -DEFAULT_PACKAGES:=\ - base-files \ - ca-bundle \ - dropbear \ - fstools \ - libc \ - libgcc \ - libustream-mbedtls \ - logd \ - mtd \ - netifd \ - uci \ - uclient-fetch \ - urandom-seed \ - urngd - -# For the basic set -DEFAULT_PACKAGES.basic:= -# For nas targets -DEFAULT_PACKAGES.nas:=\ - block-mount \ - fdisk \ - lsblk \ - mdadm -# For router targets -DEFAULT_PACKAGES.router:=\ - dnsmasq \ - firewall4 \ - nftables \ - kmod-nft-offload \ - odhcp6c \ - odhcpd-ipv6only \ - ppp \ - ppp-mod-pppoe - -ifneq ($(DUMP),) - all: dumpinfo -endif - -target_conf=$(subst .,_,$(subst -,_,$(subst /,_,$(1)))) -ifeq ($(DUMP),) - PLATFORM_DIR:=$(firstword $(wildcard $(TOPDIR)/target/linux/feeds/$(BOARD) $(TOPDIR)/target/linux/$(BOARD))) - SUBTARGET:=$(strip $(foreach subdir,$(patsubst $(PLATFORM_DIR)/%/target.mk,%,$(wildcard $(PLATFORM_DIR)/*/target.mk)),$(if $(CONFIG_TARGET_$(call target_conf,$(BOARD)_$(subdir))),$(subdir)))) -else - PLATFORM_DIR:=${CURDIR} - ifeq ($(SUBTARGETS),) - SUBTARGETS:=$(strip $(patsubst $(PLATFORM_DIR)/%/target.mk,%,$(wildcard $(PLATFORM_DIR)/*/target.mk))) - endif -endif - -TARGETID:=$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET)) -PLATFORM_SUBDIR:=$(PLATFORM_DIR)$(if $(SUBTARGET),/$(SUBTARGET)) - -ifneq ($(TARGET_BUILD),1) - ifndef DUMP - include $(PLATFORM_DIR)/Makefile - ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR)) - include $(PLATFORM_SUBDIR)/target.mk - endif - endif -else - ifneq ($(SUBTARGET),) - -include ./$(SUBTARGET)/target.mk - endif -endif - -ifneq ($(DUMP),) - # Parse generic config that might be set before a .config is generated to modify the - # default package configuration - # Keep DYNAMIC_DEF_PKG_CONF in sync with toplevel.mk to reflect the same configs - DYNAMIC_DEF_PKG_CONF := CONFIG_USE_APK CONFIG_SELINUX CONFIG_SMALL_FLASH CONFIG_SECCOMP - $(foreach config, $(DYNAMIC_DEF_PKG_CONF), \ - $(eval $(config) := $(shell grep "$(config)=y" $(TOPDIR)/.config 2>/dev/null)) \ - ) - # The config options that are enabled by default and where other default - # packages depends on needs to be set if they are missing in the .config. - ifeq ($(shell grep "CONFIG_SECCOMP" $(TOPDIR)/.config 2>/dev/null),) - ifeq ($(filter $(BOARD), uml),) - ifneq ($(filter $(ARCH), aarch64 arm armeb mips mipsel mips64 mips64el i386 powerpc x86_64),) - CONFIG_SECCOMP := y - endif - endif - endif -endif - -ifneq ($(CONFIG_USE_APK),) -DEFAULT_PACKAGES+=apk-mbedtls -else -DEFAULT_PACKAGES+=opkg -endif - -ifneq ($(CONFIG_SELINUX),) -DEFAULT_PACKAGES+=busybox-selinux procd-selinux -else -DEFAULT_PACKAGES+=busybox procd -endif - -# include ujail on systems with enough storage -ifeq ($(CONFIG_SMALL_FLASH),) -DEFAULT_PACKAGES+=procd-ujail -endif - -# include seccomp ld-preload hooks if kernel supports it -ifneq ($(CONFIG_SECCOMP),) -DEFAULT_PACKAGES+=procd-seccomp -endif - -# Add device specific packages (here below to allow device type set from subtarget) -DEFAULT_PACKAGES += $(DEFAULT_PACKAGES.$(DEVICE_TYPE)) - -filter_packages = $(filter-out -% $(patsubst -%,%,$(filter -%,$(1))),$(1)) -extra_packages = $(if $(filter wpad wpad-% nas,$(1)),iwinfo) - -define ProfileDefault - NAME:= - PRIORITY:= - PACKAGES:= -endef - -ifndef Profile -define Profile - $(eval $(call ProfileDefault)) - $(eval $(call Profile/$(1))) - dumpinfo : $(call shexport,Profile/$(1)/Description) - PACKAGES := $(filter-out -%,$(PACKAGES)) - DUMPINFO += \ - echo "Target-Profile: $(1)"; \ - $(if $(PRIORITY), echo "Target-Profile-Priority: $(PRIORITY)"; ) \ - echo "Target-Profile-Name: $(NAME)"; \ - echo "Target-Profile-Packages: $(PACKAGES) $(call extra_packages,$(DEFAULT_PACKAGES) $(PACKAGES))"; \ - echo "Target-Profile-Description:"; \ - echo "$$$$$$$$$(call shvar,Profile/$(1)/Description)"; \ - echo "@@"; \ - echo; -endef -endif - -ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR)) - define IncludeProfiles - -include $(sort $(wildcard $(PLATFORM_DIR)/profiles/*.mk)) - -include $(sort $(wildcard $(PLATFORM_SUBDIR)/profiles/*.mk)) - endef -else - define IncludeProfiles - -include $(sort $(wildcard $(PLATFORM_DIR)/profiles/*.mk)) - endef -endif - -PROFILE?=$(call qstrip,$(CONFIG_TARGET_PROFILE)) - -ifeq ($(TARGET_BUILD),1) - ifneq ($(DUMP),) - $(eval $(call IncludeProfiles)) - endif -endif - -ifneq ($(TARGET_BUILD)$(if $(DUMP),,1),) - include $(INCLUDE_DIR)/kernel-version.mk -endif - -GENERIC_PLATFORM_DIR := $(TOPDIR)/target/linux/generic -GENERIC_BACKPORT_DIR := $(GENERIC_PLATFORM_DIR)/backport$(if $(wildcard $(GENERIC_PLATFORM_DIR)/backport-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) -GENERIC_PATCH_DIR := $(GENERIC_PLATFORM_DIR)/pending$(if $(wildcard $(GENERIC_PLATFORM_DIR)/pending-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) -GENERIC_HACK_DIR := $(GENERIC_PLATFORM_DIR)/hack$(if $(wildcard $(GENERIC_PLATFORM_DIR)/hack-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) -GENERIC_FILES_DIR := $(foreach dir,$(wildcard $(GENERIC_PLATFORM_DIR)/files $(GENERIC_PLATFORM_DIR)/files-$(KERNEL_PATCHVER)),"$(dir)") - -__config_name_list = $(1)/config-$(KERNEL_PATCHVER) $(1)/config-default -__config_list = $(firstword $(wildcard $(call __config_name_list,$(1)))) -find_kernel_config=$(if $(__config_list),$(__config_list),$(lastword $(__config_name_list))) - -GENERIC_LINUX_CONFIG = $(call find_kernel_config,$(GENERIC_PLATFORM_DIR)) -LINUX_TARGET_CONFIG = $(call find_kernel_config,$(PLATFORM_DIR)) -ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR)) - LINUX_SUBTARGET_CONFIG = $(call find_kernel_config,$(PLATFORM_SUBDIR)) -endif - -# config file list used for compiling -LINUX_KCONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG) $(LINUX_SUBTARGET_CONFIG) $(TOPDIR)/env/kernel-config) - -# default config list for reconfiguring -# defaults to subtarget if subtarget exists and target does not -# defaults to target otherwise -USE_SUBTARGET_CONFIG = $(if $(wildcard $(LINUX_TARGET_CONFIG)),,$(if $(LINUX_SUBTARGET_CONFIG),1)) - -LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG) $(if $(USE_SUBTARGET_CONFIG),$(LINUX_SUBTARGET_CONFIG))) -LINUX_RECONFIG_TARGET = $(if $(USE_SUBTARGET_CONFIG),$(LINUX_SUBTARGET_CONFIG),$(LINUX_TARGET_CONFIG)) - -CFG_TARGET = $(CONFIG_TARGET) -ifeq ($(CFG_TARGET),platform) - CFG_TARGET = target - $(warning Deprecation warning: use CONFIG_TARGET=target instead.) -else ifeq ($(CFG_TARGET),subtarget_platform) - CFG_TARGET = subtarget_target - $(warning Deprecation warning: use CONFIG_TARGET=subtarget_target instead.) -endif - -# select the config file to be changed by kernel_menuconfig/kernel_oldconfig -ifeq ($(CFG_TARGET),target) - LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG)) - LINUX_RECONFIG_TARGET = $(LINUX_TARGET_CONFIG) -else ifeq ($(CFG_TARGET),subtarget) - LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG) $(LINUX_SUBTARGET_CONFIG)) - LINUX_RECONFIG_TARGET = $(LINUX_SUBTARGET_CONFIG) -else ifeq ($(CFG_TARGET),subtarget_target) - LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_SUBTARGET_CONFIG) $(LINUX_TARGET_CONFIG)) - LINUX_RECONFIG_TARGET = $(LINUX_TARGET_CONFIG) -else ifeq ($(CFG_TARGET),env) - LINUX_RECONFIG_LIST = $(LINUX_KCONFIG_LIST) - LINUX_RECONFIG_TARGET = $(TOPDIR)/env/kernel-config -else ifneq ($(strip $(CFG_TARGET)),) - $(error CONFIG_TARGET=$(CFG_TARGET) is invalid. Valid: target|subtarget|subtarget_target|env) -endif - -__linux_confcmd = $(2) $(patsubst %,+,$(wordlist 2,9999,$(1))) $(1) - -LINUX_CONF_CMD = $(SCRIPT_DIR)/kconfig.pl $(call __linux_confcmd,$(LINUX_KCONFIG_LIST)) -LINUX_RECONF_CMD = $(SCRIPT_DIR)/kconfig.pl $(call __linux_confcmd,$(LINUX_RECONFIG_LIST)) -LINUX_RECONF_DIFF = $(SCRIPT_DIR)/kconfig.pl - '>' $(call __linux_confcmd,$(filter-out $(LINUX_RECONFIG_TARGET),$(LINUX_RECONFIG_LIST))) $(1) $(GENERIC_PLATFORM_DIR)/config-filter - -ifeq ($(DUMP),1) - BuildTarget=$(BuildTargets/DumpCurrent) - - CPU_CFLAGS = -Os -pipe - ifneq ($(findstring mips,$(ARCH)),) - ifneq ($(findstring mips64,$(ARCH)),) - CPU_TYPE ?= mips64 - else - CPU_TYPE ?= mips32 - endif - CPU_CFLAGS += -mno-branch-likely - CPU_CFLAGS_mips32 = -mips32 -mtune=mips32 - CPU_CFLAGS_mips64 = -mips64 -mtune=mips64 -mabi=64 - CPU_CFLAGS_mips64r2 = -mips64r2 -mtune=mips64r2 -mabi=64 - CPU_CFLAGS_4kec = -mips32r2 -mtune=4kec - CPU_CFLAGS_24kc = -mips32r2 -mtune=24kc - CPU_CFLAGS_74kc = -mips32r2 -mtune=74kc - CPU_CFLAGS_octeonplus = -march=octeon+ -mabi=64 - endif - ifeq ($(ARCH),i386) - CPU_TYPE ?= pentium-mmx - CPU_CFLAGS_pentium-mmx = -march=pentium-mmx - CPU_CFLAGS_pentium4 = -march=pentium4 - endif - ifneq ($(findstring arm,$(ARCH)),) - CPU_TYPE ?= xscale - endif - ifeq ($(ARCH),powerpc) - CPU_CFLAGS_603e:=-mcpu=603e - CPU_CFLAGS_8540:=-mcpu=8540 - CPU_CFLAGS_8548:=-mcpu=8548 - CPU_CFLAGS_405:=-mcpu=405 - CPU_CFLAGS_440:=-mcpu=440 - CPU_CFLAGS_464fp:=-mcpu=464fp - endif - ifeq ($(ARCH),powerpc64) - CPU_TYPE ?= powerpc64 - CPU_CFLAGS_e5500:=-mcpu=e5500 - CPU_CFLAGS_powerpc64:=-mcpu=powerpc64 - endif - ifeq ($(ARCH),sparc) - CPU_TYPE = sparc - CPU_CFLAGS_ultrasparc = -mcpu=ultrasparc - endif - ifeq ($(ARCH),aarch64) - CPU_TYPE ?= generic - CPU_CFLAGS_generic = -mcpu=generic - CPU_CFLAGS_cortex-a53 = -mcpu=cortex-a53 - endif - ifeq ($(ARCH),arc) - CPU_TYPE ?= arc700 - CPU_CFLAGS += -matomic - CPU_CFLAGS_arc700 = -mcpu=arc700 - CPU_CFLAGS_archs = -mcpu=archs - endif - ifeq ($(ARCH),riscv64) - CPU_TYPE ?= riscv64 - CPU_CFLAGS_riscv64:=-mabi=lp64d -march=rv64imafdc - endif - ifeq ($(ARCH),loongarch64) - CPU_TYPE ?= generic - CPU_CFLAGS := -O2 -pipe - CPU_CFLAGS_generic:=-march=loongarch64 - endif - ifneq ($(CPU_TYPE),) - ifndef CPU_CFLAGS_$(CPU_TYPE) - $(warning CPU_TYPE "$(CPU_TYPE)" doesn't correspond to a known type) - endif - endif - DEFAULT_CFLAGS=$(strip $(CPU_CFLAGS) $(CPU_CFLAGS_$(CPU_TYPE)) $(CPU_CFLAGS_$(CPU_SUBTYPE))) - - ifneq ($(BOARD),) - TMP_CONFIG:=$(TMP_DIR)/.kconfig-$(call target_conf,$(TARGETID)) - $(TMP_CONFIG): $(LINUX_KCONFIG_LIST) - $(LINUX_CONF_CMD) > $@ || rm -f $@ - -include $(TMP_CONFIG) - .SILENT: $(TMP_CONFIG) - .PRECIOUS: $(TMP_CONFIG) - - ifdef KERNEL_TESTING_PATCHVER - ifneq ($(KERNEL_TESTING_PATCHVER),$(KERNEL_PATCHVER)) - FEATURES += testing-kernel - endif - endif - ifneq ($(CONFIG_OF),) - FEATURES += dt - endif - ifneq ($(CONFIG_GENERIC_GPIO)$(CONFIG_GPIOLIB),) - FEATURES += gpio - endif - ifneq ($(CONFIG_PCI),) - FEATURES += pci - endif - ifneq ($(CONFIG_PCIEPORTBUS),) - FEATURES += pcie - endif - ifneq ($(CONFIG_USB)$(CONFIG_USB_SUPPORT),) - ifneq ($(CONFIG_USB_ARCH_HAS_HCD)$(CONFIG_USB_EHCI_HCD),) - FEATURES += usb - endif - endif - ifneq ($(CONFIG_PCMCIA)$(CONFIG_PCCARD),) - FEATURES += pcmcia - endif - ifneq ($(CONFIG_VGA_CONSOLE)$(CONFIG_FB),) - FEATURES += display - endif - ifneq ($(CONFIG_RTC_CLASS),) - FEATURES += rtc - endif - ifneq ($(CONFIG_VIRTIO),) - FEATURES += virtio - endif - ifneq ($(CONFIG_CPU_MIPS32_R2),) - FEATURES += mips16 - endif - ifneq ($(CONFIG_CPU_V6),) - FEATURES += arm_v6 - endif - ifneq ($(CONFIG_CPU_V6K),) - FEATURES += arm_v6 - endif - ifneq ($(CONFIG_CPU_V7),) - FEATURES += arm_v7 - endif - - # remove duplicates - FEATURES:=$(sort $(FEATURES)) - endif -endif - -CUR_SUBTARGET:=$(SUBTARGET) -ifeq ($(SUBTARGETS),) - CUR_SUBTARGET := default -endif - -define BuildTargets/DumpCurrent - .PHONY: dumpinfo - dumpinfo : export DESCRIPTION=$$(Target/Description) - dumpinfo: - @echo 'Target: $(TARGETID)'; \ - echo 'Target-Board: $(BOARD)'; \ - echo 'Target-Name: $(BOARDNAME)$(if $(SUBTARGETS),$(if $(SUBTARGET),))'; \ - echo 'Target-Arch: $(ARCH)'; \ - echo 'Target-Arch-Packages: $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(ARCH)$(if $(CPU_TYPE),_$(CPU_TYPE))$(if $(CPU_SUBTYPE),_$(CPU_SUBTYPE)))'; \ - echo 'Target-Features: $(FEATURES)'; \ - echo 'Target-Depends: $(DEPENDS)'; \ - echo 'Target-Optimization: $(if $(CFLAGS),$(CFLAGS),$(DEFAULT_CFLAGS))'; \ - echo 'CPU-Type: $(CPU_TYPE)$(if $(CPU_SUBTYPE),+$(CPU_SUBTYPE))'; \ - echo 'Linux-Version: $(LINUX_VERSION)'; \ - $(if $(LINUX_TESTING_VERSION),echo 'Linux-Testing-Version: $(LINUX_TESTING_VERSION)';) \ - echo 'Linux-Release: $(LINUX_RELEASE)'; \ - echo 'Linux-Kernel-Arch: $(LINUX_KARCH)'; \ - $(if $(SUBTARGET),,$(if $(DEFAULT_SUBTARGET), echo 'Default-Subtarget: $(DEFAULT_SUBTARGET)'; )) \ - echo 'Target-Description:'; \ - echo "$$$$DESCRIPTION"; \ - echo '@@'; \ - echo 'Default-Packages: $(DEFAULT_PACKAGES) $(call extra_packages,$(DEFAULT_PACKAGES))'; \ - $(DUMPINFO) - $(if $(CUR_SUBTARGET),$(SUBMAKE) -r --no-print-directory -C image -s DUMP=1 SUBTARGET=$(CUR_SUBTARGET)) - $(if $(SUBTARGET),,@$(foreach SUBTARGET,$(SUBTARGETS),$(SUBMAKE) -s DUMP=1 SUBTARGET=$(SUBTARGET); )) -endef - -include $(INCLUDE_DIR)/kernel.mk -ifeq ($(TARGET_BUILD),1) - include $(INCLUDE_DIR)/kernel-build.mk - BuildTarget?=$(BuildKernel) -endif - -endif #__target_inc diff --git a/include/toolchain-build.mk b/include/toolchain-build.mk deleted file mode 100644 index 87ba8313df..0000000000 --- a/include/toolchain-build.mk +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2009-2020 OpenWrt.org - -override CONFIG_AUTOREBUILD= -override CONFIG_AUTOREMOVE= - -HOST_BUILD_PREFIX:=$(TOOLCHAIN_DIR) -BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN) - -include $(INCLUDE_DIR)/host-build.mk -include $(INCLUDE_DIR)/hardening.mk - -HOST_STAMP_PREPARED=$(HOST_BUILD_DIR)/.prepared - -define FixupLibdir - if [ -d $(1)/lib64 -a \! -L $(1)/lib64 ]; then \ - mkdir -p $(1)/lib; \ - mv $(1)/lib64/* $(1)/lib/; \ - rm -rf $(1)/lib64; \ - ln -sf lib $(1)/lib64; \ - fi -endef diff --git a/include/toplevel.mk b/include/toplevel.mk deleted file mode 100644 index 54cd8e3a90..0000000000 --- a/include/toplevel.mk +++ /dev/null @@ -1,287 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2007-2020 OpenWrt.org - -PREP_MK= OPENWRT_BUILD= QUIET=0 - -export IS_TTY=$(if $(MAKE_TERMOUT),1,0) - -include $(TOPDIR)/include/verbose.mk - -ifeq ($(SDK),1) - include $(TOPDIR)/include/version.mk -else - REVISION:=$(shell $(TOPDIR)/scripts/getver.sh) - SOURCE_DATE_EPOCH:=$(shell $(TOPDIR)/scripts/get_source_date_epoch.sh) -endif - -export REVISION -export SOURCE_DATE_EPOCH -export GIT_CONFIG_PARAMETERS='core.autocrlf=false' -export GIT_ASKPASS:=/bin/true -export MAKE_JOBSERVER=$(filter --jobserver%,$(MAKEFLAGS)) -export GNU_HOST_NAME:=$(shell $(TOPDIR)/scripts/config.guess) -export HOST_OS:=$(shell uname) -export HOST_ARCH:=$(shell uname -m) - -ifeq ($(HOST_OS),Darwin) - ifneq ($(filter /Applications/Xcode.app/% /Library/Developer/%,$(MAKE)),) - $(error Please use a newer version of GNU make. The version shipped by Apple is not supported) - endif -endif - -# prevent perforce from messing with the patch utility -unexport P4PORT P4USER P4CONFIG P4CLIENT - -# prevent user defaults for quilt from interfering -unexport QUILT_PATCHES QUILT_PATCH_OPTS - -unexport C_INCLUDE_PATH CROSS_COMPILE ARCH - -# prevent distro default LPATH from interfering -unexport LPATH - -# make sure that a predefined CFLAGS variable does not disturb packages -export CFLAGS= -export LDFLAGS= - -empty:= -space:= $(empty) $(empty) -path:=$(subst :,$(space),$(PATH)) -path:=$(filter-out .%,$(path)) -path:=$(subst $(space),:,$(path)) -export ORIG_PATH:=$(if $(ORIG_PATH),$(ORIG_PATH),$(PATH)) -export PATH:=$(path) -export STAGING_DIR_HOST:=$(if $(STAGING_DIR),$(abspath $(STAGING_DIR)/../host),$(TOPDIR)/staging_dir/host) - -unexport TAR_OPTIONS - -ifeq ($(FORCE),) - .config scripts/config/conf scripts/config/mconf: $(STAGING_DIR_HOST)/.prereq-build -endif - -SCAN_COOKIE?=$(shell echo $$$$) -export SCAN_COOKIE - -SUBMAKE:=umask 022; $(SUBMAKE) - -ULIMIT_FIX=_limit=`ulimit -n`; [ "$$_limit" = "unlimited" -o "$$_limit" -ge 1024 ] || ulimit -n 1024; - -prepare-mk: $(STAGING_DIR_HOST)/.prereq-build FORCE ; - -ifdef SDK - IGNORE_PACKAGES = linux -endif - -_ignore = $(foreach p,$(IGNORE_PACKAGES),--ignore $(p)) - -# Config that will invalidate the .targetinfo as they will affect -# DEFAULT_PACKAGES. -# Keep DYNAMIC_DEF_PKG_CONF in sync with target.mk to reflect the same configs -DYNAMIC_DEF_PKG_CONF := CONFIG_USE_APK CONFIG_SELINUX CONFIG_SMALL_FLASH CONFIG_SECCOMP -check-dynamic-def-pkg: FORCE - @+DEF_PKG_CONFS=""; \ - if [ -f $(TOPDIR)/.config ]; then \ - for config in $(DYNAMIC_DEF_PKG_CONF); do \ - DEF_PKG_CONFS="$$DEF_PKG_CONFS "$$(grep "$$config"=y $(TOPDIR)/.config); \ - done; \ - fi; \ - [ ! -f tmp/.packagedynamicdefault ] || OLD_DEF_PKG_CONFS=$$(cat tmp/.packagedynamicdefault); \ - [ "$$DEF_PKG_CONFS" = "$$OLD_DEF_PKG_CONFS" ] || rm -rf tmp/info/.targetinfo*; \ - mkdir -p tmp && echo "$$DEF_PKG_CONFS" > tmp/.packagedynamicdefault; - -prepare-tmpinfo: check-dynamic-def-pkg FORCE - @+$(MAKE) -r -s $(STAGING_DIR_HOST)/.prereq-build $(PREP_MK) - mkdir -p tmp/info feeds - [ -e $(TOPDIR)/feeds/base ] || ln -sf $(TOPDIR)/package $(TOPDIR)/feeds/base - $(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPTH=5 SCAN_EXTRA="" - $(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPTH=3 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1" - for type in package target; do \ - f=tmp/.$${type}info; t=tmp/.config-$${type}.in; \ - [ "$$t" -nt "$$f" ] || ./scripts/$${type}-metadata.pl $(_ignore) config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \ - done - [ tmp/.config-feeds.in -nt tmp/.packageauxvars ] || ./scripts/feeds feed_config > tmp/.config-feeds.in - ./scripts/package-metadata.pl mk tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; } - ./scripts/package-metadata.pl pkgaux tmp/.packageinfo > tmp/.packageauxvars || { rm -f tmp/.packageauxvars; false; } - ./scripts/package-metadata.pl usergroup tmp/.packageinfo > tmp/.packageusergroup || { rm -f tmp/.packageusergroup; false; } - touch $(TOPDIR)/tmp/.build - -.config: ./scripts/config/conf $(if $(CONFIG_HAVE_DOT_CONFIG),,prepare-tmpinfo) - @+if [ \! -e .config ] || ! grep CONFIG_HAVE_DOT_CONFIG .config >/dev/null; then \ - [ -e $(HOME)/.openwrt/defconfig ] && cp $(HOME)/.openwrt/defconfig .config; \ - $(_SINGLE)$(NO_TRACE_MAKE) menuconfig $(PREP_MK); \ - fi - -ifeq ($(RECURSIVE_DEP_IS_ERROR),1) - KCONF_FLAGS=--fatalrecursive -endif -ifneq ($(DISTRO_PKG_CONFIG),) -scripts/config/%onf: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH) -endif -scripts/config/%onf: CFLAGS+= -O2 -scripts/config/%onf: FORCE - @$(_SINGLE)$(SUBMAKE) $(if $(findstring s,$(OPENWRT_VERBOSE)),,-s) \ - -C scripts/config $(notdir $@) - -$(eval $(call rdep,scripts/config,scripts/config/mconf)) - -config: scripts/config/conf prepare-tmpinfo FORCE - [ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \ - $< $(KCONF_FLAGS) Config.in - -config-clean: FORCE - $(_SINGLE)$(NO_TRACE_MAKE) -C scripts/config clean - -defconfig: scripts/config/conf prepare-tmpinfo FORCE - touch .config - @if [ ! -s .config -a -e $(HOME)/.openwrt/defconfig ]; then cp $(HOME)/.openwrt/defconfig .config; fi - [ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \ - $< $(KCONF_FLAGS) --defconfig=.config Config.in - -confdefault-y=allyes -confdefault-m=allmod -confdefault-n=allno -confdefault:=$(confdefault-$(CONFDEFAULT)) - -oldconfig: scripts/config/conf prepare-tmpinfo FORCE - [ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \ - $< $(KCONF_FLAGS) --$(if $(confdefault),$(confdefault),old)config Config.in - -menuconfig: scripts/config/mconf prepare-tmpinfo FORCE - if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \ - cp $(HOME)/.openwrt/defconfig .config; \ - fi - [ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \ - $< Config.in - -nconfig: scripts/config/nconf prepare-tmpinfo FORCE - if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \ - cp $(HOME)/.openwrt/defconfig .config; \ - fi - [ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \ - $< Config.in - -xconfig: scripts/config/qconf prepare-tmpinfo FORCE - if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \ - cp $(HOME)/.openwrt/defconfig .config; \ - fi - $< Config.in - -prepare_kernel_conf: .config toolchain/install FORCE - -ifeq ($(wildcard $(STAGING_DIR_HOST)/bin/quilt),) - prepare_kernel_conf: - @+$(SUBMAKE) -r tools/quilt/compile -else - prepare_kernel_conf: ; -endif - -kernel_oldconfig: prepare_kernel_conf - $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux oldconfig - -ifneq ($(DISTRO_PKG_CONFIG),) -kernel_menuconfig: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH) -kernel_nconfig: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH) -kernel_xconfig: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH) -endif -kernel_menuconfig: prepare_kernel_conf - $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux menuconfig - -kernel_nconfig: prepare_kernel_conf - $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux nconfig - -kernel_xconfig: prepare_kernel_conf - $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux xconfig - -$(STAGING_DIR_HOST)/.prereq-build: include/prereq-build.mk - mkdir -p tmp - @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \ - echo "Prerequisite check failed. Use FORCE=1 to override."; \ - false; \ - } - ifneq ($(realpath $(TOPDIR)/include/prepare.mk),) - @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prepare.mk prepare 2>/dev/null || { \ - echo "Preparation failed."; \ - false; \ - } - endif - touch $@ - -printdb: FORCE - @$(_SINGLE)$(NO_TRACE_MAKE) -p $@ V=99 DUMP_TARGET_DB=1 2>&1 - -ifndef SDK - DOWNLOAD_DIRS = tools/download toolchain/download package/download target/download -else - DOWNLOAD_DIRS = package/download -endif - -download: .config FORCE $(if $(wildcard $(STAGING_DIR_HOST)/bin/flock),,tools/flock/compile) - @+$(foreach dir,$(DOWNLOAD_DIRS),$(SUBMAKE) $(dir);) - -clean dirclean: .config - @+$(SUBMAKE) -r $@ - -prereq:: prepare-tmpinfo .config - @+$(NO_TRACE_MAKE) -r -s $@ - -check: .config FORCE - @+$(NO_TRACE_MAKE) -r -s $@ QUIET= V=s - -val.% var.%: FORCE - @+$(NO_TRACE_MAKE) -r -s $@ QUIET= V=s - -WARN_PARALLEL_ERROR = $(if $(BUILD_LOG),,$(and $(filter -j,$(MAKEFLAGS)),$(findstring s,$(OPENWRT_VERBOSE)))) - -ifeq ($(SDK),1) - -%:: - @+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq - @./scripts/config/conf $(KCONF_FLAGS) --defconfig=.config Config.in - @+$(ULIMIT_FIX) $(SUBMAKE) -r $@ - -else - -%:: - @+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq - @( \ - cp .config tmp/.config; \ - ./scripts/config/conf $(KCONF_FLAGS) --defconfig=tmp/.config -w tmp/.config Config.in > /dev/null 2>&1; \ - if ./scripts/kconfig.pl '>' .config tmp/.config | grep -q CONFIG; then \ - printf "$(_R)WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \ - fi \ - ) - @+$(ULIMIT_FIX) $(SUBMAKE) -r $@ $(if $(WARN_PARALLEL_ERROR), || { \ - printf "$(_R)Build failed - please re-run with -j1 to see the real error message$(_N)\n" >&2; \ - false; \ - } ) - -endif - -# update all feeds, re-create index files, install symlinks -package/symlinks: - ./scripts/feeds update -a - ./scripts/feeds install -a - -# re-create index files, install symlinks -package/symlinks-install: - ./scripts/feeds update -i - ./scripts/feeds install -a - -# remove all symlinks, don't touch ./feeds -package/symlinks-clean: - ./scripts/feeds uninstall -a - -help: - cat README.md - -distclean: - rm -rf bin build_dir .ccache .config* dl feeds key-build* logs package/feeds staging_dir tmp - @$(_SINGLE)$(SUBMAKE) -C scripts/config clean - -ifeq ($(findstring v,$(DEBUG)),) - .SILENT: symlinkclean clean dirclean distclean config-clean download help tmpinfo-clean .config scripts/config/mconf scripts/config/conf menuconfig $(STAGING_DIR_HOST)/.prereq-build tmp/.prereq-package prepare-tmpinfo -endif -.PHONY: help FORCE -.NOTPARALLEL: - diff --git a/include/trusted-firmware-a.mk b/include/trusted-firmware-a.mk deleted file mode 100644 index e469dae984..0000000000 --- a/include/trusted-firmware-a.mk +++ /dev/null @@ -1,104 +0,0 @@ -PKG_NAME ?= trusted-firmware-a -PKG_CPE_ID ?= cpe:/a:arm:trusted_firmware-a - -ifndef PKG_SOURCE_PROTO -PKG_SOURCE = trusted-firmware-a-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/snapshot -endif - -PKG_BUILD_DIR = $(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) - -PKG_TARGETS := bin -PKG_FLAGS:=nonshared - -PKG_LICENSE:=BSD-3-Clause -PKG_LICENSE_FILES:=docs/license.rst - -PKG_BUILD_PARALLEL:=1 - -export GCC_HONOUR_COPTS=s - -define Package/trusted-firmware-a/install/default - $(CP) $(patsubst %,$(PKG_BUILD_DIR)/build/$(PLAT)/release/%,$(TFA_IMAGE)) $(1)/ -endef - -Package/trusted-firmware-a/install = $(Package/trusted-firmware-a/install/default) - -define Trusted-Firmware-A/Init - BUILD_TARGET:= - BUILD_SUBTARGET:= - BUILD_DEVICES:= - NAME:= - DEPENDS:= - HIDDEN:= - DEFAULT:= - PLAT:= - VARIANT:=$(1) - TFA_IMAGE:= -endef - -TARGET_DEP = TARGET_$(BUILD_TARGET)$(if $(BUILD_SUBTARGET),_$(BUILD_SUBTARGET)) - -define Build/Trusted-Firmware-A/Target - $(eval $(call Trusted-Firmware-A/Init,$(1))) - $(eval $(call Trusted-Firmware-A/Default,$(1))) - $(eval $(call Trusted-Firmware-A/$(1),$(1))) - - define Package/trusted-firmware-a-$(1) - SECTION:=boot - CATEGORY:=Boot Loaders - TITLE:=Trusted-Firmware-A for $(NAME) - VARIANT:=$(VARIANT) - DEPENDS:=@!IN_SDK $(DEPENDS) - HIDDEN:=$(HIDDEN) - ifneq ($(BUILD_TARGET),) - DEPENDS += @$(TARGET_DEP) - ifneq ($(BUILD_DEVICES),) - DEFAULT := y if ($(TARGET_DEP)_Default \ - $(patsubst %,|| $(TARGET_DEP)_DEVICE_%,$(BUILD_DEVICES)) \ - $(patsubst %,|| $(patsubst TARGET_%,TARGET_DEVICE_%,$(TARGET_DEP))_DEVICE_%,$(BUILD_DEVICES))) - endif - endif - $(if $(DEFAULT),DEFAULT:=$(DEFAULT)) - URL:=https://www.trustedfirmware.org/projects/tf-a/ - endef - - ifndef Package/trusted-firmware-a-$(1)/install - define Package/trusted-firmware-a-$(1)/install - $$(Package/trusted-firmware-a/install) - endef - endif -endef - -define Build/Configure/Trusted-Firmware-A - $(INSTALL_DIR) $(STAGING_DIR)/usr/include -endef - -DTC=$(wildcard $(LINUX_DIR)/scripts/dtc/dtc) - -define Build/Compile/Trusted-Firmware-A - +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ - CROSS_COMPILE=$(TARGET_CROSS) \ - OPENSSL_DIR=$(STAGING_DIR_HOST) \ - $(if $(DTC),DTC="$(DTC)") \ - PLAT=$(PLAT) \ - BUILD_STRING="OpenWrt v$(PKG_VERSION)-$(PKG_RELEASE) ($(VARIANT))" \ - $(if $(CONFIG_BINUTILS_VERSION_2_37)$(CONFIG_BINUTILS_VERSION_2_38),,LDFLAGS="-no-warn-rwx-segments") \ - $(TFA_MAKE_FLAGS) -endef - -define BuildPackage/Trusted-Firmware-A/Defaults - Build/Configure/Default = $$$$(Build/Configure/Trusted-Firmware-A) - Build/Compile/Default = $$$$(Build/Compile/Trusted-Firmware-A) -endef - -define BuildPackage/Trusted-Firmware-A - $(eval $(call BuildPackage/Trusted-Firmware-A/Defaults)) - $(foreach type,$(if $(DUMP),$(TFA_TARGETS),$(BUILD_VARIANT)), \ - $(eval $(call Build/Trusted-Firmware-A/Target,$(type))) - ) - $(eval $(call Build/DefaultTargets)) - $(foreach type,$(if $(DUMP),$(TFA_TARGETS),$(BUILD_VARIANT)), \ - $(call BuildPackage,trusted-firmware-a-$(type)) - ) -endef diff --git a/include/u-boot.mk b/include/u-boot.mk deleted file mode 100644 index 1bd7ed4bd5..0000000000 --- a/include/u-boot.mk +++ /dev/null @@ -1,144 +0,0 @@ -include $(INCLUDE_DIR)/prereq.mk - -PKG_NAME ?= u-boot - -ifndef PKG_SOURCE_PROTO -PKG_SOURCE = $(PKG_NAME)-$(PKG_VERSION).tar.bz2 -PKG_SOURCE_URL = \ - https://mirror.cyberbits.eu/u-boot \ - https://ftp.denx.de/pub/u-boot \ - ftp://ftp.denx.de/pub/u-boot -endif - -PKG_BUILD_DIR = $(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) - -PKG_TARGETS := bin -PKG_FLAGS:=nonshared - -PKG_LICENSE:=GPL-2.0 GPL-2.0+ -PKG_LICENSE_FILES:=Licenses/README - -PKG_BUILD_PARALLEL ?= 1 - -ifdef UBOOT_USE_BINMAN - $(eval $(call TestHostCommand,python3-pyelftools, \ - Please install the Python3 elftools module, \ - $(STAGING_DIR_HOST)/bin/python3 -c 'import elftools')) -endif - -ifdef UBOOT_USE_INTREE_DTC - $(eval $(call TestHostCommand,python3-dev, \ - Please install the python3-dev package, \ - python3.11-config --includes 2>&1 | grep 'python3', \ - python3.10-config --includes 2>&1 | grep 'python3', \ - python3.9-config --includes 2>&1 | grep 'python3', \ - python3.8-config --includes 2>&1 | grep 'python3', \ - python3.7-config --includes 2>&1 | grep 'python3', \ - python3-config --includes 2>&1 | grep -E 'python3\.([7-9]|[0-9][0-9])\.?')) - - $(eval $(call TestHostCommand,python3-setuptools, \ - Please install the Python3 setuptools module, \ - $(STAGING_DIR_HOST)/bin/python3 -c 'import setuptools')) - - $(eval $(call TestHostCommand,swig, \ - Please install the swig package, \ - swig -version)) -endif - -export GCC_HONOUR_COPTS=s - -define Package/u-boot/install/default - $(CP) $(patsubst %,$(PKG_BUILD_DIR)/%,$(UBOOT_IMAGE)) $(1)/ -endef - -Package/u-boot/install = $(Package/u-boot/install/default) - -define U-Boot/Init - BUILD_TARGET:= - BUILD_SUBTARGET:= - BUILD_DEVICES:= - NAME:= - DEPENDS:= - HIDDEN:= - DEFAULT:= - VARIANT:=$(1) - UBOOT_CONFIG:=$(1) - UBOOT_IMAGE:=u-boot.bin -endef - -TARGET_DEP = TARGET_$(BUILD_TARGET)$(if $(BUILD_SUBTARGET),_$(BUILD_SUBTARGET)) - -UBOOT_MAKE_FLAGS = \ - PATH=$(STAGING_DIR_HOST)/bin:$(PATH) \ - HOSTCC="$(HOSTCC)" \ - HOSTCFLAGS="$(HOST_CFLAGS) $(HOST_CPPFLAGS) -std=gnu11" \ - HOSTLDFLAGS="$(HOST_LDFLAGS)" \ - LOCALVERSION="-OpenWrt-$(REVISION)" \ - STAGING_PREFIX="$(STAGING_DIR_HOST)" \ - PKG_CONFIG_PATH="$(STAGING_DIR_HOST)/lib/pkgconfig" \ - PKG_CONFIG_LIBDIR="$(STAGING_DIR_HOST)/lib/pkgconfig" \ - PKG_CONFIG_EXTRAARGS="--static" \ - $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') - -define Build/U-Boot/Target - $(eval $(call U-Boot/Init,$(1))) - $(eval $(call U-Boot/Default,$(1))) - $(eval $(call U-Boot/$(1),$(1))) - - define Package/u-boot-$(1) - SECTION:=boot - CATEGORY:=Boot Loaders - TITLE:=U-Boot for $(NAME) - VARIANT:=$(VARIANT) - DEPENDS:=@!IN_SDK $(DEPENDS) - HIDDEN:=$(HIDDEN) - ifneq ($(BUILD_TARGET),) - DEPENDS += @$(TARGET_DEP) - ifneq ($(BUILD_DEVICES),) - DEFAULT := y if ($(TARGET_DEP)_Default \ - $(patsubst %,|| $(TARGET_DEP)_DEVICE_%,$(BUILD_DEVICES)) \ - $(patsubst %,|| $(patsubst TARGET_%,TARGET_DEVICE_%,$(TARGET_DEP))_DEVICE_%,$(BUILD_DEVICES))) - endif - endif - $(if $(DEFAULT),DEFAULT:=$(DEFAULT)) - URL:=http://www.denx.de/wiki/U-Boot - endef - - define Package/u-boot-$(1)/install - $$(Package/u-boot/install) - endef -endef - -define Build/Configure/U-Boot - +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) CROSS_COMPILE=$(TARGET_CROSS) $(UBOOT_CONFIGURE_VARS) $(UBOOT_CONFIG)_config - $(if $(strip $(UBOOT_CUSTOMIZE_CONFIG)), - $(PKG_BUILD_DIR)/scripts/config --file $(PKG_BUILD_DIR)/.config $(UBOOT_CUSTOMIZE_CONFIG) - +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) CROSS_COMPILE=$(TARGET_CROSS) $(UBOOT_CONFIGURE_VARS) oldconfig) -endef - -ifndef UBOOT_USE_INTREE_DTC - DTC=$(wildcard $(LINUX_DIR)/scripts/dtc/dtc) -endif - -define Build/Compile/U-Boot - +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ - CROSS_COMPILE=$(TARGET_CROSS) \ - $(if $(DTC),DTC="$(DTC)") \ - $(UBOOT_MAKE_FLAGS) -endef - -define BuildPackage/U-Boot/Defaults - Build/Configure/Default = $$$$(Build/Configure/U-Boot) - Build/Compile/Default = $$$$(Build/Compile/U-Boot) -endef - -define BuildPackage/U-Boot - $(eval $(call BuildPackage/U-Boot/Defaults)) - $(foreach type,$(if $(DUMP),$(UBOOT_TARGETS),$(BUILD_VARIANT)), \ - $(eval $(call Build/U-Boot/Target,$(type))) - ) - $(eval $(call Build/DefaultTargets)) - $(foreach type,$(if $(DUMP),$(UBOOT_TARGETS),$(BUILD_VARIANT)), \ - $(call BuildPackage,u-boot-$(type)) - ) -endef diff --git a/include/uclibc++.mk b/include/uclibc++.mk deleted file mode 100644 index 10f8d98e15..0000000000 --- a/include/uclibc++.mk +++ /dev/null @@ -1,2 +0,0 @@ -$(warn uclibc++.mk is deprecated. Please remove it and CXX_DEPENDS) -CXX_DEPENDS = +libstdcpp diff --git a/include/unpack.mk b/include/unpack.mk deleted file mode 100644 index 5959d55f4b..0000000000 --- a/include/unpack.mk +++ /dev/null @@ -1,72 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -HOST_TAR:=$(TAR) -TAR_CMD=$(HOST_TAR) -C $(1)/.. $(TAR_OPTIONS) -UNZIP_CMD=unzip -q -d $(1)/.. $(DL_DIR)/$(PKG_SOURCE) - -ifeq ($(PKG_SOURCE),) - PKG_UNPACK ?= true -else - -ifeq ($(strip $(UNPACK_CMD)),) - ifeq ($(strip $(PKG_CAT)),) - # try to autodetect file type - EXT:=$(call ext,$(PKG_SOURCE)) - EXT1:=$(EXT) - - ifeq ($(filter gz tgz,$(EXT)),$(EXT)) - EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=)) - DECOMPRESS_CMD:=$(STAGING_DIR_HOST)/bin/libdeflate-gzip -dc $(DL_DIR)/$(PKG_SOURCE) | - endif - ifeq ($(filter bzip2 bz2 bz tbz2 tbz,$(EXT)),$(EXT)) - EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=)) - DECOMPRESS_CMD:=bzcat $(DL_DIR)/$(PKG_SOURCE) | - endif - ifeq ($(filter xz txz,$(EXT)),$(EXT)) - EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=)) - DECOMPRESS_CMD:=xzcat $(DL_DIR)/$(PKG_SOURCE) | - endif - ifeq (zst,$(EXT)) - EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=)) - DECOMPRESS_CMD:=zstdcat $(DL_DIR)/$(PKG_SOURCE) | - endif - ifeq ($(filter tgz tbz tbz2 txz,$(EXT1)),$(EXT1)) - EXT:=tar - endif - DECOMPRESS_CMD ?= cat $(DL_DIR)/$(PKG_SOURCE) | - ifeq ($(EXT),tar) - UNPACK_CMD=$(DECOMPRESS_CMD) $(TAR_CMD) - endif - ifeq ($(EXT),cpio) - UNPACK_CMD=$(DECOMPRESS_CMD) (cd $(1)/..; $(STAGING_DIR_HOST)/bin/cpio -i -d) - endif - ifeq ($(EXT),zip) - UNPACK_CMD=$(UNZIP_CMD) - endif - endif - - # compatibility code for packages that set PKG_CAT - ifeq ($(strip $(UNPACK_CMD)),) - # use existing PKG_CAT - UNPACK_CMD=$(PKG_CAT) $(DL_DIR)/$(PKG_SOURCE) | $(TAR_CMD) - ifeq ($(PKG_CAT),unzip) - UNPACK_CMD=$(UNZIP_CMD) - endif - # replace zcat with $(ZCAT), because some system don't support it properly - ifeq ($(PKG_CAT),zcat) - UNPACK_CMD=$(STAGING_DIR_HOST)/bin/libdeflate-gzip -dc $(DL_DIR)/$(PKG_SOURCE) | $(TAR_CMD) - endif - endif -endif - -ifdef PKG_BUILD_DIR - PKG_UNPACK ?= $(SH_FUNC) $(call UNPACK_CMD,$(PKG_BUILD_DIR)) -endif -ifdef HOST_BUILD_DIR - HOST_UNPACK ?= $(SH_FUNC) $(call UNPACK_CMD,$(HOST_BUILD_DIR)) -endif - -endif # PKG_SOURCE - diff --git a/include/verbose.mk b/include/verbose.mk deleted file mode 100644 index f6aa0d7012..0000000000 --- a/include/verbose.mk +++ /dev/null @@ -1,72 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2020 OpenWrt.org - -ifndef OPENWRT_VERBOSE - OPENWRT_VERBOSE:= -endif -ifeq ("$(origin V)", "command line") - OPENWRT_VERBOSE:=$(V) -endif - -ifeq ($(OPENWRT_VERBOSE),1) - OPENWRT_VERBOSE:=w -endif -ifeq ($(OPENWRT_VERBOSE),99) - OPENWRT_VERBOSE:=s -endif - -ifeq ($(NO_TRACE_MAKE),) -NO_TRACE_MAKE := $(MAKE) V=s$(OPENWRT_VERBOSE) -export NO_TRACE_MAKE -endif - -ifeq ($(IS_TTY),1) - ifneq ($(strip $(NO_COLOR)),1) - _Y:=\\033[33m - _R:=\\033[31m - _N:=\\033[m - endif -endif - -define ERROR_MESSAGE - { \ - printf "$(_R)%s$(_N)\n" "$(1)" >&9 || \ - printf "$(_R)%s$(_N)\n" "$(1)"; \ - } >&2 2>/dev/null -endef - -ifeq ($(findstring s,$(OPENWRT_VERBOSE)),) - define MESSAGE - { \ - printf "$(_Y)%s$(_N)\n" "$(1)" >&8 || \ - printf "$(_Y)%s$(_N)\n" "$(1)"; \ - } 2>/dev/null - endef - - ifeq ($(QUIET),1) - ifneq ($(CURDIR),$(TOPDIR)) - _DIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR}) - else - _DIR:= - endif - _MESSAGE:=$(if $(MAKECMDGOALS),$(shell \ - $(call MESSAGE, make[$(MAKELEVEL)]$(if $(_DIR), -C $(_DIR)) $(MAKECMDGOALS)); \ - )) - ifneq ($(strip $(_MESSAGE)),) - $(info $(_MESSAGE)) - endif - SUBMAKE=$(MAKE) - else - SILENT:=>/dev/null $(if $(findstring w,$(OPENWRT_VERBOSE)),,2>&1) - export QUIET:=1 - SUBMAKE=cmd() { $(SILENT) $(MAKE) -s "$$@" < /dev/null || { echo "make $$*: build failed. Please re-run make with -j1 V=s or V=sc for a higher verbosity level to see what's going on"; false; } } 8>&1 9>&2; cmd - endif - - .SILENT: $(MAKECMDGOALS) -else - SUBMAKE=$(MAKE) -w - define MESSAGE - printf "%s\n" "$(1)" - endef -endif diff --git a/include/version.mk b/include/version.mk deleted file mode 100644 index cdee0976da..0000000000 --- a/include/version.mk +++ /dev/null @@ -1,108 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2012-2015 OpenWrt.org -# Copyright (C) 2016 LEDE Project - -# Substituted by SDK, do not remove -# REVISION:=x -# SOURCE_DATE_EPOCH:=x - -PKG_CONFIG_DEPENDS += \ - CONFIG_VERSION_HOME_URL \ - CONFIG_VERSION_BUG_URL \ - CONFIG_VERSION_NUMBER \ - CONFIG_VERSION_CODE \ - CONFIG_VERSION_REPO \ - CONFIG_VERSION_DIST \ - CONFIG_VERSION_MANUFACTURER \ - CONFIG_VERSION_MANUFACTURER_URL \ - CONFIG_VERSION_PRODUCT \ - CONFIG_VERSION_SUPPORT_URL \ - CONFIG_VERSION_HWREV \ - -sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1)))) - -VERSION_NUMBER:=$(call qstrip,$(CONFIG_VERSION_NUMBER)) -VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),SNAPSHOT) - -VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE)) -VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),$(REVISION)) - -VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO)) -VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/snapshots) - -VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST)) -VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt) -VERSION_DIST_SANITIZED:=$(call sanitize,$(VERSION_DIST)) - -VERSION_MANUFACTURER:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER)) -VERSION_MANUFACTURER:=$(if $(VERSION_MANUFACTURER),$(VERSION_MANUFACTURER),OpenWrt) - -VERSION_MANUFACTURER_URL:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER_URL)) -VERSION_MANUFACTURER_URL:=$(if $(VERSION_MANUFACTURER_URL),$(VERSION_MANUFACTURER_URL),https://openwrt.org/) - -VERSION_BUG_URL:=$(call qstrip,$(CONFIG_VERSION_BUG_URL)) -VERSION_BUG_URL:=$(if $(VERSION_BUG_URL),$(VERSION_BUG_URL),https://bugs.openwrt.org/) - -VERSION_HOME_URL:=$(call qstrip,$(CONFIG_VERSION_HOME_URL)) -VERSION_HOME_URL:=$(if $(VERSION_HOME_URL),$(VERSION_HOME_URL),https://openwrt.org/) - -VERSION_SUPPORT_URL:=$(call qstrip,$(CONFIG_VERSION_SUPPORT_URL)) -VERSION_SUPPORT_URL:=$(if $(VERSION_SUPPORT_URL),$(VERSION_SUPPORT_URL),https://forum.openwrt.org/) - -VERSION_PRODUCT:=$(call qstrip,$(CONFIG_VERSION_PRODUCT)) -VERSION_PRODUCT:=$(if $(VERSION_PRODUCT),$(VERSION_PRODUCT),Generic) - -VERSION_HWREV:=$(call qstrip,$(CONFIG_VERSION_HWREV)) -VERSION_HWREV:=$(if $(VERSION_HWREV),$(VERSION_HWREV),v0) - -define taint2sym -$(CONFIG_$(firstword $(subst :, ,$(subst +,,$(subst -,,$(1)))))) -endef - -define taint2name -$(lastword $(subst :, ,$(1))) -endef - -VERSION_TAINT_SPECS := \ - -ALL_KMODS:no-all \ - -IPV6:no-ipv6 \ - +USE_GLIBC:glibc \ - +USE_MKLIBS:mklibs \ - +BUSYBOX_CUSTOM:busybox \ - +OVERRIDE_PKGS:override \ - -VERSION_TAINTS := $(strip $(foreach taint,$(VERSION_TAINT_SPECS), \ - $(if $(findstring +,$(taint)), \ - $(if $(call taint2sym,$(taint)),$(call taint2name,$(taint))), \ - $(if $(call taint2sym,$(taint)),,$(call taint2name,$(taint))) \ - ))) - -PKG_CONFIG_DEPENDS += $(foreach taint,$(VERSION_TAINT_SPECS),$(call taint2sym,$(taint))) - -# escape commas, backslashes, squotes, and ampersands for sed -define sed_escape -$(subst &,\&,$(subst $(comma),\$(comma),$(subst ','\'',$(subst \,\\,$(1))))) -endef -#' - -VERSION_SED_SCRIPT:=$(SED) 's,%U,$(call sed_escape,$(VERSION_REPO)),g' \ - -e 's,%V,$(call sed_escape,$(VERSION_NUMBER)),g' \ - -e 's,%v,\L$(call sed_escape,$(subst $(space),_,$(VERSION_NUMBER))),g' \ - -e 's,%C,$(call sed_escape,$(VERSION_CODE)),g' \ - -e 's,%c,\L$(call sed_escape,$(subst $(space),_,$(VERSION_CODE))),g' \ - -e 's,%D,$(call sed_escape,$(VERSION_DIST)),g' \ - -e 's,%d,\L$(call sed_escape,$(subst $(space),_,$(VERSION_DIST))),g' \ - -e 's,%R,$(call sed_escape,$(REVISION)),g' \ - -e 's,%T,$(call sed_escape,$(BOARD)),g' \ - -e 's,%S,$(call sed_escape,$(BOARD)/$(SUBTARGET)),g' \ - -e 's,%A,$(call sed_escape,$(ARCH_PACKAGES)),g' \ - -e 's,%t,$(call sed_escape,$(VERSION_TAINTS)),g' \ - -e 's,%M,$(call sed_escape,$(VERSION_MANUFACTURER)),g' \ - -e 's,%m,$(call sed_escape,$(VERSION_MANUFACTURER_URL)),g' \ - -e 's,%b,$(call sed_escape,$(VERSION_BUG_URL)),g' \ - -e 's,%u,$(call sed_escape,$(VERSION_HOME_URL)),g' \ - -e 's,%s,$(call sed_escape,$(VERSION_SUPPORT_URL)),g' \ - -e 's,%P,$(call sed_escape,$(VERSION_PRODUCT)),g' \ - -e 's,%h,$(call sed_escape,$(VERSION_HWREV)),g' - diff --git a/luci-theme-argon b/luci-theme-argon new file mode 160000 index 0000000000..fb069b7f12 --- /dev/null +++ b/luci-theme-argon @@ -0,0 +1 @@ +Subproject commit fb069b7f1207528f99c6737e7ff2a3ed92b6c30e diff --git a/package/base-files/files/etc/os-release b/package/base-files/files/etc/os-release deleted file mode 120000 index c4c75b419c..0000000000 --- a/package/base-files/files/etc/os-release +++ /dev/null @@ -1 +0,0 @@ -../usr/lib/os-release \ No newline at end of file diff --git a/package/base-files/files/etc/os-release b/package/base-files/files/etc/os-release new file mode 100755 index 0000000000..c4c75b419c --- /dev/null +++ b/package/base-files/files/etc/os-release @@ -0,0 +1 @@ +../usr/lib/os-release \ No newline at end of file diff --git a/package/firmware/linux-firmware/intel.mk b/package/firmware/linux-firmware/intel.mk index 225b2aa862..cc9bab53f8 100644 --- a/package/firmware/linux-firmware/intel.mk +++ b/package/firmware/linux-firmware/intel.mk @@ -173,7 +173,7 @@ $(eval $(call BuildPackage,iwlwifi-firmware-iwl9260)) Package/iwlwifi-firmware-ax101 = $(call Package/firmware-default,Intel AX101 firmware) define Package/iwlwifi-firmware-ax101/install $(INSTALL_DIR) $(1)/lib/firmware - $(INSTALL_DATA) $(PKG_BUILD_DIR)/iwlwifi-so-a0-hr-b0-89.ucode $(1)/lib/firmware + $(INSTALL_DATA) $(PKG_BUILD_DIR)/iwlwifi-so-a0-hr-b0-83.ucode $(1)/lib/firmware endef $(eval $(call BuildPackage,iwlwifi-firmware-ax101)) @@ -194,7 +194,7 @@ $(eval $(call BuildPackage,iwlwifi-firmware-ax201)) Package/iwlwifi-firmware-ax210 = $(call Package/firmware-default,Intel AX210 firmware) define Package/iwlwifi-firmware-ax210/install $(INSTALL_DIR) $(1)/lib/firmware - $(INSTALL_DATA) $(PKG_BUILD_DIR)/iwlwifi-ty-a0-gf-a0-89.ucode $(1)/lib/firmware + $(INSTALL_DATA) $(PKG_BUILD_DIR)/iwlwifi-ty-a0-gf-a0-83.ucode $(1)/lib/firmware $(INSTALL_DATA) $(PKG_BUILD_DIR)/iwlwifi-ty-a0-gf-a0.pnvm $(1)/lib/firmware endef $(eval $(call BuildPackage,iwlwifi-firmware-ax210)) diff --git a/package/kernel/linux/Makefile b/package/kernel/linux/Makefile index 8dfb01ad66..5d0c25f812 100644 --- a/package/kernel/linux/Makefile +++ b/package/kernel/linux/Makefile @@ -26,7 +26,8 @@ export SHELL:=/bin/sh include $(INCLUDE_DIR)/package.mk ifeq ($(DUMP),) - STAMP_BUILT:=$(STAMP_BUILT)_$(shell $(SCRIPT_DIR)/kconfig.pl $(LINUX_DIR)/.config | $(MKHASH) md5) + #STAMP_BUILT:=$(STAMP_BUILT)_$(shell $(SCRIPT_DIR)/kconfig.pl $(LINUX_DIR)/.config | $(MKHASH) md5) + STAMP_BUILT:=$(STAMP_BUILT)_$(shell cat $(LINUX_DIR)/.vermagic) -include $(LINUX_DIR)/.config endif diff --git a/package/network/config/netifd/files/sbin/ifdown b/package/network/config/netifd/files/sbin/ifdown deleted file mode 120000 index a0e5c176a3..0000000000 --- a/package/network/config/netifd/files/sbin/ifdown +++ /dev/null @@ -1 +0,0 @@ -ifup \ No newline at end of file diff --git a/package/network/config/netifd/files/sbin/ifdown b/package/network/config/netifd/files/sbin/ifdown new file mode 100755 index 0000000000..a0e5c176a3 --- /dev/null +++ b/package/network/config/netifd/files/sbin/ifdown @@ -0,0 +1 @@ +ifup \ No newline at end of file diff --git a/package/rkp-ipid b/package/rkp-ipid new file mode 160000 index 0000000000..073e389703 --- /dev/null +++ b/package/rkp-ipid @@ -0,0 +1 @@ +Subproject commit 073e389703853aeaced6cf1299ca8fbe60635614 diff --git a/rkp-ipid b/rkp-ipid new file mode 160000 index 0000000000..073e389703 --- /dev/null +++ b/rkp-ipid @@ -0,0 +1 @@ +Subproject commit 073e389703853aeaced6cf1299ca8fbe60635614 diff --git a/target/linux/ath79/files/drivers/gpio/gpio-latch-mikrotik.c b/target/linux/ath79/files/drivers/gpio/gpio-latch-mikrotik.c index 6e3f0f9690..70f091b79f 100644 --- a/target/linux/ath79/files/drivers/gpio/gpio-latch-mikrotik.c +++ b/target/linux/ath79/files/drivers/gpio/gpio-latch-mikrotik.c @@ -110,19 +110,14 @@ static int gpio_latch_probe(struct platform_device *pdev) struct gpio_latch_chip *glc; struct gpio_chip *gc; struct device *dev = &pdev->dev; - int err, i, n; + int i, n; glc = devm_kzalloc(dev, sizeof(*glc), GFP_KERNEL); if (!glc) return -ENOMEM; - err = devm_mutex_init(&pdev->dev, &glc->mutex); - if (err) - return err; - - err = devm_mutex_init(&pdev->dev, &glc->latch_mutex); - if (err) - return err; + mutex_init(&glc->mutex); + mutex_init(&glc->latch_mutex); n = gpiod_count(dev, NULL); if (n <= 0) diff --git a/target/linux/ath79/mikrotik/config-default b/target/linux/ath79/mikrotik/config-default index 2976c24470..0dd79d9adc 100644 --- a/target/linux/ath79/mikrotik/config-default +++ b/target/linux/ath79/mikrotik/config-default @@ -15,7 +15,6 @@ CONFIG_MFD_CORE=y CONFIG_MFD_RB4XX_CPLD=y CONFIG_MIKROTIK=y CONFIG_MIKROTIK_RB_SYSFS=y -CONFIG_MIKROTIK_WLAN_DECOMPRESS_LZ77=y CONFIG_MTD_NAND_AR934X=y CONFIG_MTD_NAND_CORE=y CONFIG_MTD_NAND_ECC=y diff --git a/target/linux/ath79/patches-6.6/700-phy-add-ath79-usb-phys.patch b/target/linux/ath79/patches-6.6/700-phy-add-ath79-usb-phys.patch index 98c399c9e0..0a9de68a39 100644 --- a/target/linux/ath79/patches-6.6/700-phy-add-ath79-usb-phys.patch +++ b/target/linux/ath79/patches-6.6/700-phy-add-ath79-usb-phys.patch @@ -51,7 +51,7 @@ Signed-off-by: John Crispin obj-$(CONFIG_PHY_LPC18XX_USB_OTG) += phy-lpc18xx-usb-otg.o --- /dev/null +++ b/drivers/phy/phy-ar7100-usb.c -@@ -0,0 +1,127 @@ +@@ -0,0 +1,140 @@ +/* + * Copyright (C) 2018 John Crispin + * @@ -118,38 +118,50 @@ Signed-off-by: John Crispin +static int ar7100_usb_phy_probe(struct platform_device *pdev) +{ + struct phy_provider *phy_provider; ++ struct resource *res; + struct ar7100_usb_phy *priv; + + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + -+ priv->io_base = devm_platform_ioremap_resource(pdev, 0); ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ priv->io_base = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(priv->io_base)) + return PTR_ERR(priv->io_base); + + priv->rst_phy = devm_reset_control_get(&pdev->dev, "usb-phy"); -+ if (IS_ERR(priv->rst_phy)) -+ return dev_err_probe(&pdev->dev, PTR_ERR(priv->rst_phy), "phy reset is missing"); ++ if (IS_ERR(priv->rst_phy)) { ++ dev_err(&pdev->dev, "phy reset is missing\n"); ++ return PTR_ERR(priv->rst_phy); ++ } + + priv->rst_host = devm_reset_control_get(&pdev->dev, "usb-host"); -+ if (IS_ERR(priv->rst_host)) -+ return dev_err_probe(&pdev->dev, PTR_ERR(priv->rst_host), "host reset is missing"); ++ if (IS_ERR(priv->rst_host)) { ++ dev_err(&pdev->dev, "host reset is missing\n"); ++ return PTR_ERR(priv->rst_host); ++ } + + priv->rst_ohci_dll = devm_reset_control_get(&pdev->dev, "usb-ohci-dll"); -+ if (IS_ERR(priv->rst_ohci_dll)) -+ return dev_err_probe(&pdev->dev, PTR_ERR(priv->rst_host), "ohci-dll reset is missing"); ++ if (IS_ERR(priv->rst_ohci_dll)) { ++ dev_err(&pdev->dev, "ohci-dll reset is missing\n"); ++ return PTR_ERR(priv->rst_host); ++ } + + priv->phy = devm_phy_create(&pdev->dev, NULL, &ar7100_usb_phy_ops); -+ if (IS_ERR(priv->phy)) -+ return dev_err_probe(&pdev->dev, PTR_ERR(priv->phy), "failed to create PHY"); ++ if (IS_ERR(priv->phy)) { ++ dev_err(&pdev->dev, "failed to create PHY\n"); ++ return PTR_ERR(priv->phy); ++ } + + priv->gpio = of_get_named_gpio(pdev->dev.of_node, "gpios", 0); + if (gpio_is_valid(priv->gpio)) { + int ret = devm_gpio_request(&pdev->dev, priv->gpio, dev_name(&pdev->dev)); -+ if (ret) -+ return dev_err_probe(&pdev->dev, ret, "failed to request gpio"); + ++ if (ret) { ++ dev_err(&pdev->dev, "failed to request gpio\n"); ++ return ret; ++ } + gpio_export_with_name(gpio_to_desc(priv->gpio), 0, dev_name(&pdev->dev)); + gpio_set_value(priv->gpio, 1); + } @@ -158,6 +170,7 @@ Signed-off-by: John Crispin + + phy_provider = devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); + ++ + return PTR_ERR_OR_ZERO(phy_provider); +} + @@ -181,7 +194,7 @@ Signed-off-by: John Crispin +MODULE_LICENSE("GPL"); --- /dev/null +++ b/drivers/phy/phy-ar7200-usb.c -@@ -0,0 +1,120 @@ +@@ -0,0 +1,136 @@ +/* + * Copyright (C) 2015 Alban Bedel + * @@ -251,28 +264,44 @@ Signed-off-by: John Crispin + return -ENOMEM; + + priv->rst_phy = devm_reset_control_get(&pdev->dev, "usb-phy"); -+ if (IS_ERR(priv->rst_phy)) -+ return dev_err_probe(&pdev->dev, PTR_ERR(priv->rst_phy), "phy reset is missing"); ++ if (IS_ERR(priv->rst_phy)) { ++ if (PTR_ERR(priv->rst_phy) != -EPROBE_DEFER) ++ dev_err(&pdev->dev, "phy reset is missing\n"); ++ return PTR_ERR(priv->rst_phy); ++ } + + priv->rst_phy_analog = devm_reset_control_get_optional( + &pdev->dev, "usb-phy-analog"); -+ if (IS_ERR(priv->rst_phy_analog)) -+ return PTR_ERR(priv->rst_phy_analog); ++ if (IS_ERR(priv->rst_phy_analog)) { ++ if (PTR_ERR(priv->rst_phy_analog) == -ENOENT) ++ priv->rst_phy_analog = NULL; ++ else ++ return PTR_ERR(priv->rst_phy_analog); ++ } + + priv->suspend_override = devm_reset_control_get_optional( + &pdev->dev, "usb-suspend-override"); -+ if (IS_ERR(priv->suspend_override)) -+ return PTR_ERR(priv->suspend_override); ++ if (IS_ERR(priv->suspend_override)) { ++ if (PTR_ERR(priv->suspend_override) == -ENOENT) ++ priv->suspend_override = NULL; ++ else ++ return PTR_ERR(priv->suspend_override); ++ } + + priv->phy = devm_phy_create(&pdev->dev, NULL, &ar7200_usb_phy_ops); -+ if (IS_ERR(priv->phy)) -+ return dev_err_probe(&pdev->dev, PTR_ERR(priv->phy), "failed to create PHY"); ++ if (IS_ERR(priv->phy)) { ++ dev_err(&pdev->dev, "failed to create PHY\n"); ++ return PTR_ERR(priv->phy); ++ } + + priv->gpio = of_get_named_gpio(pdev->dev.of_node, "gpios", 0); + if (gpio_is_valid(priv->gpio)) { + int ret = devm_gpio_request(&pdev->dev, priv->gpio, dev_name(&pdev->dev)); -+ if (ret) -+ return dev_err_probe(&pdev->dev, ret, "failed to request gpio"); ++ ++ if (ret) { ++ dev_err(&pdev->dev, "failed to request gpio\n"); ++ return ret; ++ } + gpio_export_with_name(gpio_to_desc(priv->gpio), 0, dev_name(&pdev->dev)); + gpio_set_value(priv->gpio, 1); + } diff --git a/target/linux/generic/files/drivers/platform/mikrotik/Kconfig b/target/linux/generic/files/drivers/platform/mikrotik/Kconfig index 85fe7b2050..32ef8f29de 100644 --- a/target/linux/generic/files/drivers/platform/mikrotik/Kconfig +++ b/target/linux/generic/files/drivers/platform/mikrotik/Kconfig @@ -21,11 +21,4 @@ config NVMEM_LAYOUT_MIKROTIK help This driver exposes MikroTik hard_config via NVMEM layout. -config MIKROTIK_WLAN_DECOMPRESS_LZ77 - tristate "Mikrotik factory Wi-Fi caldata LZ77 decompression support" - depends on MIKROTIK_RB_SYSFS - help - Allow Mikrotik LZ77 factory flashed Wi-Fi calibration data to be - decompressed - endif # MIKROTIK diff --git a/target/linux/generic/files/drivers/platform/mikrotik/Makefile b/target/linux/generic/files/drivers/platform/mikrotik/Makefile index 9ffb355c1e..164b23b701 100644 --- a/target/linux/generic/files/drivers/platform/mikrotik/Makefile +++ b/target/linux/generic/files/drivers/platform/mikrotik/Makefile @@ -3,4 +3,3 @@ # obj-$(CONFIG_MIKROTIK_RB_SYSFS) += routerboot.o rb_hardconfig.o rb_softconfig.o obj-$(CONFIG_NVMEM_LAYOUT_MIKROTIK) += rb_nvmem.o -obj-$(CONFIG_MIKROTIK_WLAN_DECOMPRESS_LZ77) += rb_lz77.o diff --git a/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c b/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c index 4c1edad081..78e39a7f94 100644 --- a/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c +++ b/target/linux/generic/files/drivers/platform/mikrotik/rb_hardconfig.c @@ -39,9 +39,8 @@ #include "rb_hardconfig.h" #include "routerboot.h" -#include "rb_lz77.h" -#define RB_HARDCONFIG_VER "0.08" +#define RB_HARDCONFIG_VER "0.07" #define RB_HC_PR_PFX "[rb_hardconfig] " /* Bit definitions for hardware options */ @@ -466,24 +465,23 @@ fail: /* * If the RB_ID_WLAN_DATA payload starts with RB_MAGIC_LZOR, then past * that magic number is a payload that must be appended to the hc_lzor_prefix, - * the resulting blob is LZO-compressed. - * If payload starts with RB_MAGIC_LZ77, a separate (bit level LZ77) - * decompression function needs to be used. In the decompressed result, + * the resulting blob is LZO-compressed. In the LZO decompression result, * the RB_MAGIC_ERD magic number (aligned) must be located. Following that * magic, there is one or more routerboot tag node(s) locating the RLE-encoded * calibration data payload. */ -static int hc_wlan_data_unpack_lzor_lz77(const u16 tag_id, const u8 *inbuf, size_t inlen, - void *outbuf, size_t *outlen, u32 magic) +static int hc_wlan_data_unpack_lzor(const u16 tag_id, const u8 *inbuf, size_t inlen, + void *outbuf, size_t *outlen) { u16 rle_ofs, rle_len; const u32 *needle; u8 *tempbuf; size_t templen, lzo_len; int ret; - const char lzor[] = "LZOR"; - const char lz77[] = "LZ77"; - const char *lz_type; + + lzo_len = inlen + sizeof(hc_lzor_prefix); + if (lzo_len > *outlen) + return -EFBIG; /* Temporary buffer same size as the outbuf */ templen = *outlen; @@ -491,50 +489,23 @@ static int hc_wlan_data_unpack_lzor_lz77(const u16 tag_id, const u8 *inbuf, size if (!tempbuf) return -ENOMEM; - lzo_len = inlen; - if (magic == RB_MAGIC_LZOR) - lzo_len += sizeof(hc_lzor_prefix); - if (lzo_len > *outlen) - return -EFBIG; + /* Concatenate into the outbuf */ + memcpy(outbuf, hc_lzor_prefix, sizeof(hc_lzor_prefix)); + memcpy(outbuf + sizeof(hc_lzor_prefix), inbuf, inlen); - switch (magic) { - case RB_MAGIC_LZOR: - lz_type = lzor; - - /* Concatenate into the outbuf */ - memcpy(outbuf, hc_lzor_prefix, sizeof(hc_lzor_prefix)); - memcpy(outbuf + sizeof(hc_lzor_prefix), inbuf, inlen); - - /* LZO-decompress lzo_len bytes of outbuf into the tempbuf */ - ret = lzo1x_decompress_safe(outbuf, lzo_len, tempbuf, &templen); - if (ret) { - if (LZO_E_INPUT_NOT_CONSUMED == ret) { - /* - * The tag length is always aligned thus the LZO payload may be padded, - * which can trigger a spurious error which we ignore here. - */ - pr_debug(RB_HC_PR_PFX "LZOR: LZO EOF before buffer end - this may be harmless\n"); - } else { - pr_debug(RB_HC_PR_PFX "LZOR: LZO decompression error (%d)\n", ret); - goto fail; - } - } - break; - case RB_MAGIC_LZ77: - lz_type = lz77; - /* LZO-decompress lzo_len bytes of inbuf into the tempbuf */ - ret = rb_lz77_decompress(inbuf, inlen, tempbuf, &templen); - if (ret) { - pr_err(RB_HC_PR_PFX "LZ77: LZ77 decompress error %d\n", ret); + /* LZO-decompress lzo_len bytes of outbuf into the tempbuf */ + ret = lzo1x_decompress_safe(outbuf, lzo_len, tempbuf, &templen); + if (ret) { + if (LZO_E_INPUT_NOT_CONSUMED == ret) { + /* + * The tag length is always aligned thus the LZO payload may be padded, + * which can trigger a spurious error which we ignore here. + */ + pr_debug(RB_HC_PR_PFX "LZOR: LZO EOF before buffer end - this may be harmless\n"); + } else { + pr_debug(RB_HC_PR_PFX "LZOR: LZO decompression error (%d)\n", ret); goto fail; } - - pr_debug(RB_HC_PR_PFX "LZ77: decompressed from %zu to %zu\n", - inlen, templen); - break; - default: - return -EINVAL; - break; } /* @@ -545,7 +516,7 @@ static int hc_wlan_data_unpack_lzor_lz77(const u16 tag_id, const u8 *inbuf, size needle = (const u32 *)tempbuf; while (RB_MAGIC_ERD != *needle++) { if ((u8 *)needle >= tempbuf+templen) { - pr_warn(RB_HC_PR_PFX "%s: ERD magic not found. Decompressed first word: 0x%08x\n", lz_type, *(u32 *)tempbuf); + pr_debug(RB_HC_PR_PFX "LZOR: ERD magic not found\n"); ret = -ENODATA; goto fail; } @@ -555,12 +526,12 @@ static int hc_wlan_data_unpack_lzor_lz77(const u16 tag_id, const u8 *inbuf, size /* Past magic. Look for tag node */ ret = routerboot_tag_find((u8 *)needle, templen, tag_id, &rle_ofs, &rle_len); if (ret) { - pr_debug(RB_HC_PR_PFX "%s: no RLE data for id 0x%04x\n", lz_type, tag_id); + pr_debug(RB_HC_PR_PFX "LZOR: no RLE data for id 0x%04x\n", tag_id); goto fail; } if (rle_len > templen) { - pr_debug(RB_HC_PR_PFX "%s: Invalid RLE data length\n", lz_type); + pr_debug(RB_HC_PR_PFX "LZOR: Invalid RLE data length\n"); ret = -EINVAL; goto fail; } @@ -568,7 +539,7 @@ static int hc_wlan_data_unpack_lzor_lz77(const u16 tag_id, const u8 *inbuf, size /* RLE-decode tempbuf from needle back into the outbuf */ ret = routerboot_rle_decode((u8 *)needle+rle_ofs, rle_len, outbuf, outlen); if (ret) - pr_debug(RB_HC_PR_PFX "%s: RLE decoding error (%d)\n", lz_type, ret); + pr_debug(RB_HC_PR_PFX "LZOR: RLE decoding error (%d)\n", ret); fail: kfree(tempbuf); @@ -591,18 +562,11 @@ static int hc_wlan_data_unpack(const u16 tag_id, const size_t tofs, size_t tlen, ret = -ENODATA; switch (magic) { - case RB_MAGIC_LZ77: - /* no known instances of lz77 without 8001/8201 data, skip SOLO */ - if (tag_id == RB_WLAN_ERD_ID_SOLO) { - pr_debug(RB_HC_PR_PFX "skipped LZ77 decompress in search for SOLO tag\n"); - break; - } - fallthrough; case RB_MAGIC_LZOR: /* Skip magic */ lbuf += sizeof(magic); tlen -= sizeof(magic); - ret = hc_wlan_data_unpack_lzor_lz77(tag_id, lbuf, tlen, outbuf, outlen, magic); + ret = hc_wlan_data_unpack_lzor(tag_id, lbuf, tlen, outbuf, outlen); break; case RB_MAGIC_ERD: /* Skip magic */ diff --git a/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h b/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h index 723f993eeb..e858a524af 100644 --- a/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h +++ b/target/linux/generic/files/drivers/platform/mikrotik/routerboot.h @@ -15,7 +15,6 @@ #define RB_MAGIC_HARD (('H') | ('a' << 8) | ('r' << 16) | ('d' << 24)) #define RB_MAGIC_SOFT (('S') | ('o' << 8) | ('f' << 16) | ('t' << 24)) #define RB_MAGIC_LZOR (('L') | ('Z' << 8) | ('O' << 16) | ('R' << 24)) -#define RB_MAGIC_LZ77 (('L' << 24) | ('Z' << 16) | ('7' << 8) | ('7')) #define RB_MAGIC_ERD (('E' << 16) | ('R' << 8) | ('D')) #define RB_ART_SIZE 0x10000 diff --git a/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi index 8286e1899f..3637b96d24 100644 --- a/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi +++ b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi @@ -128,17 +128,13 @@ pagesize = <32>; reg = <0x50>; read-only; /* This holds our MAC & Meraki board-data */ + #address-cells = <1>; + #size-cells = <1>; - nvmem-layout { - compatible = "fixed-layout"; - #address-cells = <1>; - #size-cells = <1>; - - mac_address: mac-address@66 { - compatible = "mac-base"; - reg = <0x66 0x6>; - #nvmem-cell-cells = <1>; - }; + mac_address: mac-address@66 { + compatible = "mac-base"; + reg = <0x66 0x6>; + #nvmem-cell-cells = <1>; }; }; }; diff --git a/target/linux/ipq40xx/mikrotik/config-default b/target/linux/ipq40xx/mikrotik/config-default index 7234e4b8f6..805e6db23b 100644 --- a/target/linux/ipq40xx/mikrotik/config-default +++ b/target/linux/ipq40xx/mikrotik/config-default @@ -1,6 +1,5 @@ CONFIG_MIKROTIK=y CONFIG_MIKROTIK_RB_SYSFS=y -CONFIG_MIKROTIK_WLAN_DECOMPRESS_LZ77=y CONFIG_MTD_ROUTERBOOT_PARTS=y CONFIG_MTD_SPI_NOR_USE_VARIABLE_ERASE=y CONFIG_MTD_SPLIT_MINOR_FW=y diff --git a/target/linux/mediatek/filogic/config-6.6 b/target/linux/mediatek/filogic/config-6.6 index 818bcfa081..271a529454 100644 --- a/target/linux/mediatek/filogic/config-6.6 +++ b/target/linux/mediatek/filogic/config-6.6 @@ -32,7 +32,6 @@ CONFIG_ARM64_VA_BITS_39=y CONFIG_ARM_AMBA=y CONFIG_ARM_ARCH_TIMER=y CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y -# CONFIG_ARM_CORESIGHT_PMU_ARCH_SYSTEM_PMU is not set CONFIG_ARM_GIC=y CONFIG_ARM_GIC_V2M=y CONFIG_ARM_GIC_V3=y @@ -42,7 +41,6 @@ CONFIG_ARM_MEDIATEK_CPUFREQ=y CONFIG_ARM_PMU=y CONFIG_ARM_PMUV3=y CONFIG_ARM_PSCI_FW=y -# CONFIG_ARM_SMMU_V3_PMU is not set CONFIG_ATA=y CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y CONFIG_BLK_DEV_LOOP=y @@ -98,6 +96,7 @@ CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y CONFIG_CPU_FREQ_GOV_USERSPACE=y CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_LITTLE_ENDIAN=y +CONFIG_CPU_MITIGATIONS=y CONFIG_CPU_RMAP=y CONFIG_CPU_THERMAL=y CONFIG_CRC16=y @@ -168,8 +167,7 @@ CONFIG_FUNCTION_ALIGNMENT_4B=y CONFIG_FWNODE_MDIO=y CONFIG_FW_LOADER_PAGED_BUF=y CONFIG_FW_LOADER_SYSFS=y -CONFIG_GCC11_NO_ARRAY_BOUNDS=y -CONFIG_GCC_ASM_GOTO_OUTPUT_WORKAROUND=y +CONFIG_GCC10_NO_ARRAY_BOUNDS=y CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_GENERIC_ARCH_TOPOLOGY=y @@ -279,6 +277,7 @@ CONFIG_MTK_HSDMA=y CONFIG_MTK_INFRACFG=y CONFIG_MTK_LVTS_THERMAL=y CONFIG_MTK_LVTS_THERMAL_DEBUGFS=y +CONFIG_MTK_NET_PHYLIB=y CONFIG_MTK_PMIC_WRAP=y CONFIG_MTK_REGULATOR_COUPLER=y CONFIG_MTK_SCPSYS=y @@ -291,6 +290,11 @@ CONFIG_MTK_TIMER=y CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_NEED_DMA_MAP_STATE=y CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_NETFILTER=y +CONFIG_NETFILTER_BPF_LINK=y +CONFIG_NETFILTER_NETLINK=y +CONFIG_NETFILTER_NETLINK_GLUE_CT=y +CONFIG_NETFILTER_NETLINK_LOG=y CONFIG_NET_DEVLINK=y CONFIG_NET_DSA=y CONFIG_NET_DSA_MT7530=y @@ -306,6 +310,9 @@ CONFIG_NET_SELFTESTS=y CONFIG_NET_SWITCHDEV=y CONFIG_NET_VENDOR_MEDIATEK=y CONFIG_NET_XGRESS=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CT_NETLINK=y +CONFIG_NF_DEFRAG_IPV4=y CONFIG_NLS=y CONFIG_NO_HZ_COMMON=y CONFIG_NO_HZ_IDLE=y @@ -331,7 +338,6 @@ CONFIG_PAGE_POOL=y CONFIG_PAGE_POOL_STATS=y CONFIG_PAGE_SIZE_LESS_THAN_256KB=y CONFIG_PAGE_SIZE_LESS_THAN_64KB=y -CONFIG_PAHOLE_HAS_LANG_EXCLUDE=y CONFIG_PARTITION_PERCPU=y CONFIG_PCI=y CONFIG_PCIEAER=y diff --git a/target/linux/mvebu/cortexa72/config-6.6 b/target/linux/mvebu/cortexa72/config-6.6 index af9dcf3632..19ca2b29d1 100644 --- a/target/linux/mvebu/cortexa72/config-6.6 +++ b/target/linux/mvebu/cortexa72/config-6.6 @@ -63,7 +63,6 @@ CONFIG_MMC_SDHCI_XENON=y CONFIG_MODULES_USE_ELF_RELA=y CONFIG_MIKROTIK=y CONFIG_MIKROTIK_RB_SYSFS=y -# CONFIG_MIKROTIK_WLAN_DECOMPRESS_LZ77 is not set CONFIG_MTD_ROUTERBOOT_PARTS=y CONFIG_MTD_SPI_NOR_USE_VARIABLE_ERASE=y CONFIG_MVEBU_GICP=y diff --git a/target/linux/ramips/mt7621/config-6.6 b/target/linux/ramips/mt7621/config-6.6 index adbb7c8465..609e520c62 100644 --- a/target/linux/ramips/mt7621/config-6.6 +++ b/target/linux/ramips/mt7621/config-6.6 @@ -128,7 +128,6 @@ CONFIG_MFD_SYSCON=y CONFIG_MIGRATION=y CONFIG_MIKROTIK=y CONFIG_MIKROTIK_RB_SYSFS=y -# CONFIG_MIKROTIK_WLAN_DECOMPRESS_LZ77 is not set CONFIG_MIPS=y CONFIG_MIPS_ASID_BITS=8 CONFIG_MIPS_ASID_SHIFT=0 diff --git a/target/linux/starfive/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt b/target/linux/starfive/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt deleted file mode 120000 index 2ed6689828..0000000000 --- a/target/linux/starfive/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt +++ /dev/null @@ -1 +0,0 @@ -brcmfmac43430-sdio.txt \ No newline at end of file diff --git a/target/linux/starfive/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt b/target/linux/starfive/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt new file mode 100755 index 0000000000..2ed6689828 --- /dev/null +++ b/target/linux/starfive/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt @@ -0,0 +1 @@ +brcmfmac43430-sdio.txt \ No newline at end of file diff --git a/target/linux/sunxi/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt b/target/linux/sunxi/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt deleted file mode 120000 index 2ed6689828..0000000000 --- a/target/linux/sunxi/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt +++ /dev/null @@ -1 +0,0 @@ -brcmfmac43430-sdio.txt \ No newline at end of file diff --git a/target/linux/sunxi/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt b/target/linux/sunxi/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt new file mode 100755 index 0000000000..2ed6689828 --- /dev/null +++ b/target/linux/sunxi/base-files/lib/firmware/brcm/brcmfmac43430a0-sdio.txt @@ -0,0 +1 @@ +brcmfmac43430-sdio.txt \ No newline at end of file diff --git a/vermagic b/vermagic new file mode 100644 index 0000000000..4a92317d10 --- /dev/null +++ b/vermagic @@ -0,0 +1 @@ +59d1431675acc6823a33c7eb2323daeb